mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-31 11:08:22 +08:00
mdbx: обновление ChangeLog.
This commit is contained in:
parent
25ab65b470
commit
e46ca81abd
99
ChangeLog.md
99
ChangeLog.md
@ -1,20 +1,107 @@
|
|||||||
ChangeLog
|
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 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).
|
- 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()`.
|
- Fixed an extra ensure/assertion check of `oldest_reader` inside `txn_end()`.
|
||||||
- Removed description of deprecated usage of `MDBX_NODUPDATA`.
|
- Removed description of deprecated usage of `MDBX_NODUPDATA`.
|
||||||
- Fixed regression ASAN/Valgring-enabled builds.
|
- Fixed regression ASAN/Valgring-enabled builds.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user