mirror of
https://github.com/isar/libmdbx.git
synced 2024-10-29 23:19:20 +08:00
mdbx: обновление ChangeLog.
This commit is contained in:
parent
25ab65b470
commit
e46ca81abd
99
ChangeLog.md
99
ChangeLog.md
@ -1,20 +1,107 @@
|
||||
ChangeLog
|
||||
---------
|
||||
|
||||
## Underway v0.12.2
|
||||
## В разработке v0.12.2
|
||||
|
||||
New:
|
||||
|
||||
- Added `MDBX_HAVE_BUILT IN_CPU_SUPPORTS` build option to control use GCC's `__builtin_cpu_supports()` function,
|
||||
which could be unavailable on a fake OSes (macos, ios, android, etc).
|
||||
Новое:
|
||||
|
||||
Fixes:
|
||||
- В C++ API добавлены методы фиксации транзакции с получением информации
|
||||
о задержках.
|
||||
|
||||
- Отключение учета «грязных» страниц в не требующих этого режимах
|
||||
(`MDBX_WRITEMAP` при `MDBX_AVOID_MSYNC=0`). Доработка позволяет снизить
|
||||
накладные расходы и была запланирована давно, но откладывалась так как
|
||||
требовала других изменений.
|
||||
|
||||
- Вытеснение из памяти (спиллинг) «грязных» страниц с учетом размера
|
||||
large/overflow-страниц. Доработка позволяет корректно соблюдать политику
|
||||
задаваемую опциями `MDBX_opt_txn_dp_limit`,
|
||||
`MDBX_opt_spill_max_denominator`, `MDBX_opt_spill_min_denominator` и
|
||||
была запланирована давно, но откладывалась так как требовала других
|
||||
изменений.
|
||||
|
||||
- Для Windows в API добавлены UNICODE-зависимые определения макросов
|
||||
`MDBX_DATANAME`, `MDBX_LOCKNAME` и `MDBX_LOCK_SUFFIX`.
|
||||
|
||||
- Переход на преимущественное использование типа `size_t` для
|
||||
уменьшения накладных расходов на платформе Эльбрус.
|
||||
|
||||
- В API добавлены функции `mdbx_limits_valsize4page_max()` и
|
||||
`mdbx_env_get_valsize4page_max()` возвращающие максимальный размер в
|
||||
байтах значения, которое может быть размещена в одной
|
||||
large/overflow-странице, а не последовательности из двух или более таких
|
||||
страниц. Для таблиц с поддержкой дубликатов вынос значений на
|
||||
large/overflow-страницы не поддерживается, поэтому результат совпадает с
|
||||
`mdbx_limits_valsize_max()`.
|
||||
|
||||
- В API добавлены функции `mdbx_limits_pairsize4page_max()`и
|
||||
`mdbx_env_get_pairsize4page_max()` возвращающие в байтах максимальный
|
||||
суммарный размер пары ключ-значение для их размещения на одной листовой
|
||||
страницы, без выноса значения на отдельную large/overflow-страницу. Для
|
||||
таблиц с поддержкой дубликатов вынос значений на large/overflow-страницы
|
||||
не поддерживается, поэтому результат определяет максимальный/допустимый
|
||||
суммарный размер пары ключ-значение.
|
||||
|
||||
- Реализовано использование асинхронной (overlapped) записи в Windows,
|
||||
включая использования небуфферизированного ввода-вывода и WriteGather().
|
||||
Это позволяет сократить накладные расходы и частично обойти проблемы
|
||||
Windows с низкой производительностью ввода-вывода, включая большие
|
||||
задержки FlushFileBuffers(). Новый код также обеспечивает консолидацию
|
||||
записываемых регионов на всех платформах, а на Windows использование
|
||||
событий (events) сведено к минимум, одновременно с автоматических
|
||||
использованием WriteGather(). Поэтому ожидается существенное снижение
|
||||
накладных расходов взаимодействия с ОС, а в Windows это ускорение, в
|
||||
некоторых сценариях, может быть кратным в сравнении с LMDB.
|
||||
|
||||
- Добавлена опция сборки `MDBX_AVOID_MSYNC`, которая определяет
|
||||
поведение libmdbx в режиме `MDBX_WRITE_MAP` (когда данные изменяются
|
||||
непосредственно в отображенных в ОЗУ страницах БД):
|
||||
|
||||
* Если `MDBX_AVOID_MSYNC=0` (по умолчанию на всех системах кроме Windows),
|
||||
то (как прежде) сохранение данных выполняется посредством `msync()`,
|
||||
либо `FlushViewOfFile()` на Windows. На платформах с полноценной
|
||||
подсистемой виртуальной памяти и адекватным файловым вводом-выводом
|
||||
это обеспечивает минимум накладных расходов (один системный вызов)
|
||||
и максимальную производительность. Однако, на Windows приводит
|
||||
к значительной деградации, в том числе из-за того что после
|
||||
`FlushViewOfFile()` требуется также вызов `FlushFileBuffers()`
|
||||
с массой проблем и суеты внутри ядра ОС.
|
||||
|
||||
* Если `MDBX_AVOID_MSYNC=1` (по умолчанию только на Windows), то
|
||||
сохранение данных выполняется явной записью в файл каждой измененной
|
||||
страницы БД. Это требует дополнительных накладных расходов, как
|
||||
на отслеживание измененных страниц (ведение списков "грязных"
|
||||
страниц), так и на системные вызовы для их записи.
|
||||
Кроме этого, с точки зрения подсистемы виртуальной памяти ядра ОС,
|
||||
страницы БД измененные в ОЗУ и явно записанные в файл, могут либо
|
||||
оставаться "грязными" и быть повторно записаны ядром ОС позже,
|
||||
либо требовать дополнительных накладных расходов для отслеживания
|
||||
PTE (Page Table Entries), их модификации и дополнительного копирования
|
||||
данных. Тем не менее, по имеющейся информации, на Windows такой путь
|
||||
записи данных в целом обеспечивает более высокую производительность.
|
||||
|
||||
- Added `MDBX_HAVE_BUILT IN_CPU_SUPPORTS` build option to control use GCC's
|
||||
`__builtin_cpu_supports()` function, which could be unavailable on a fake
|
||||
OSes (macos, ios, android, etc).
|
||||
|
||||
Исправления:
|
||||
|
||||
- Доработан сбор информации о задержках при фиксации транзакций:
|
||||
* Устранено искажение замеров длительности обновления GC
|
||||
при включении отладочного внутреннего аудита;
|
||||
* Защита от undeflow-нуля только общей задержки в метриках,
|
||||
чтобы исключить ситуации, когда сумма отдельных стадий
|
||||
больше общей длительности.
|
||||
- Ряд исправлений для устранения срабатываний проверочных утверждения в отладочных сборках.
|
||||
- Исправление лишнего сброса данных на диск в режиме `MDBX_SAFE_NOSYNC` при обновлении GC.
|
||||
- Fixed an extra check for `MDBX_APPENDDUP` inside `mdbx_cursor_put()` which could result in returning `MDBX_EKEYMISMATCH` for valid cases.
|
||||
- Fixed nasty `clz()` bug (by using `_BitScanReverse()`, only MSVC builds affected).
|
||||
|
||||
Minors:
|
||||
Мелочи:
|
||||
|
||||
- Добавлено описание использования файловых дескрипторов в различных режимах.
|
||||
- Добавлено использование _CrtDbgReport() в отладочных сборках.
|
||||
- Fixed an extra ensure/assertion check of `oldest_reader` inside `txn_end()`.
|
||||
- Removed description of deprecated usage of `MDBX_NODUPDATA`.
|
||||
- Fixed regression ASAN/Valgring-enabled builds.
|
||||
|
Loading…
Reference in New Issue
Block a user