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
4ee8fff305
commit
cd0ed2f155
76
ChangeLog.md
76
ChangeLog.md
@ -4,7 +4,15 @@ ChangeLog
|
||||
English version [by Google](https://gitflic-ru.translate.goog/project/erthink/libmdbx/blob?file=ChangeLog.md&_x_tr_sl=ru&_x_tr_tl=en)
|
||||
and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md).
|
||||
|
||||
## v0.12.3 (Акула) в процессе подготовки
|
||||
|
||||
## v0.12.3 (Акула) запланирован на 2022-12-11
|
||||
|
||||
Выпуск с существенными доработками и новой функциональностью в память о закрытом open-source проекте "Акула".
|
||||
|
||||
```
|
||||
18 files changed, 2470 insertions(+), 1562 deletions(-)
|
||||
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
|
||||
```
|
||||
|
||||
Благодарности:
|
||||
|
||||
@ -13,17 +21,76 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
|
||||
Новое:
|
||||
|
||||
- Использование адреса https://libmdbx.dqdkfa.ru/dead-github для отсылки к сохранённым в web.archive.org копиям ресурсов, уничтоженных администрацией Github.
|
||||
- Использование адреса [https://libmdbx.dqdkfa.ru/dead-github](https://libmdbx.dqdkfa.ru/dead-github)
|
||||
для отсылки к сохранённым в web.archive.org копиям ресурсов, уничтоженных администрацией Github.
|
||||
|
||||
- Реализована prefault-запись при выделении страниц для read-write отображений.
|
||||
Это приводит к кратному снижению системных издержек и существенному увеличению
|
||||
производительности в соответствующих сценариях использования, когда:
|
||||
- размер БД и объём данных существенно больше ОЗУ;
|
||||
- используется режим `MDBX_WRITEMAP`;
|
||||
- не-мелкие транзакции (по ходу транзакции выделяется многие сотни или тысячи страниц).
|
||||
|
||||
В режиме `MDBX_WRITEMAP` выделение/переиспользование страниц приводит
|
||||
к page-fault и чтению страницы с диска, даже если содержимое страницы
|
||||
не нужно (будет перезаписано). Это является следствием работы подсистемы
|
||||
виртуальной памяти, а штатный способ лечения через `MADV_REMOVE`
|
||||
работает не на всех ФС и обычно дороже получаемой экономии.
|
||||
|
||||
Теперь в libmdbx используется "упреждающая запись" таких страниц,
|
||||
которая на системах с [unified page cache](https://www.opennet.ru/base/dev/ubc.txt.html)
|
||||
приводит к "вталкиванию" данных, устраняя необходимость чтения с диска при
|
||||
обращении к такой странице памяти.
|
||||
|
||||
Новый функционал работает в согласованности с автоматическим управлением read-ahead
|
||||
и кэшем статуса присутствия страниц в ОЗУ, посредством [mincore()](https://man7.org/linux/man-pages/man2/mincore.2.html).
|
||||
|
||||
- Реализован динамический выбор между сквозной записью на диск и обычной записью
|
||||
с последующим [fdatasync()](https://man7.org/linux/man-pages/man3/fdatasync.3p.html)
|
||||
управляемый опцией `MDBX_opt_writethrough_threshold`.
|
||||
|
||||
В долговечных (durable) режимах данные на диск могут быть сброшены двумя способами:
|
||||
- сквозной записью через файловый дескриптор открытый с `O_DSYNC`;
|
||||
- обычной записью с последующим вызовом `fdatasync()`.
|
||||
|
||||
Первый способ выгоднее при записи малого количества страниц и/или если
|
||||
канал взаимодействия с диском/носителем имеет близкую к нулю задержку.
|
||||
Второй способ выгоднее если требуется записать много страниц и/или канал
|
||||
взаимодействия имеет весомую задержку (датацентры, облака). Добавленная
|
||||
опция `MDBX_opt_writethrough_threshold` позволяет во время выполнения
|
||||
задать порог для динамического выбора способа записи в зависимост от
|
||||
объема и конкретных условия использования.
|
||||
|
||||
- Автоматическая установка `MDBX_opt_rp_augment_limit` в зависимости от размера БД.
|
||||
|
||||
- Запрещение разного режима `MDBX_WRITEMAP` между процессами в режимах
|
||||
с отложенной/ленивой записью, так как в этом случае невозможно
|
||||
обеспечить сброс данных на диск во всех случаях на всех поддерживаемых платформах.
|
||||
|
||||
Исправления (без корректировок новых функций):
|
||||
|
||||
- Устранение SIGSEGV или ошибочного вызова `free()` в ситуациях повторного открытия среды посредством `mdbx_env_open()`.
|
||||
- Изменение размера отображения если это требуется для сброса данных на
|
||||
диск при вызове `mdbx_env_sync()` из параллельного потока выполнения вне
|
||||
работающей транзакции.
|
||||
|
||||
- Исправление регресса после коммита db72763de049d6e4546f838277fe83b9081ad1de от 2022-10-08
|
||||
в логике возврата грязных страниц в режиме `MDBX_WRITEMAP`, из-за чего
|
||||
освободившиеся страницы использовались не немедленно, а попадали в
|
||||
retired-список совершаемой транзакции и происходил необоснованный рост
|
||||
размера транзакции.
|
||||
|
||||
- Устранение SIGSEGV или ошибочного вызова `free()` в ситуациях
|
||||
повторного открытия среды посредством `mdbx_env_open()`.
|
||||
|
||||
- Устранение ошибки совершенной в коммите fe20de136c22ed3bc4c6d3f673e79c106e824f60 от 2022-09-18,
|
||||
в результате чего на Linux в режиме `MDBX_WRITEMAP` никогда не вызывался `msync()`.
|
||||
Проблема существует только в релизе 0.12.2.
|
||||
|
||||
- Добавление подсчета грязных страниц в `MDBX_WRITEMAP` для предоставления посредством `mdbx_txn_info()`
|
||||
актуальной информации об объеме изменений в процессе транзакций чтения-записи.
|
||||
|
||||
- Исправление несущественной опечатки в условиях `#if` определения порядка байт.
|
||||
|
||||
- Исправление сборки для случая `MDBX_PNL_ASCENDING=1`.
|
||||
|
||||
Ликвидация технических долгов и мелочи:
|
||||
@ -32,6 +99,9 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
- Устранение несущественных предупреждений Coverity.
|
||||
- Использование единого курсора для поиска в GC.
|
||||
- Переработка внутренних флагов связанных с выделением страниц из GC.
|
||||
- Доработка подготовки резерва перед обновлением GC при включенном BigFoot.
|
||||
- Оптимизация `pnl_merge()` для случаев неперекрывающихся объединяемых списков.
|
||||
- Оптимизация поддержки отсортированного списка страниц в `dpl_append()`.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user