mirror of
https://github.com/isar/libmdbx.git
synced 2024-10-30 11:29:19 +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)
|
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).
|
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,
|
- Устранение ошибки совершенной в коммите fe20de136c22ed3bc4c6d3f673e79c106e824f60 от 2022-09-18,
|
||||||
в результате чего на Linux в режиме `MDBX_WRITEMAP` никогда не вызывался `msync()`.
|
в результате чего на Linux в режиме `MDBX_WRITEMAP` никогда не вызывался `msync()`.
|
||||||
Проблема существует только в релизе 0.12.2.
|
Проблема существует только в релизе 0.12.2.
|
||||||
|
|
||||||
- Добавление подсчета грязных страниц в `MDBX_WRITEMAP` для предоставления посредством `mdbx_txn_info()`
|
- Добавление подсчета грязных страниц в `MDBX_WRITEMAP` для предоставления посредством `mdbx_txn_info()`
|
||||||
актуальной информации об объеме изменений в процессе транзакций чтения-записи.
|
актуальной информации об объеме изменений в процессе транзакций чтения-записи.
|
||||||
|
|
||||||
- Исправление несущественной опечатки в условиях `#if` определения порядка байт.
|
- Исправление несущественной опечатки в условиях `#if` определения порядка байт.
|
||||||
|
|
||||||
- Исправление сборки для случая `MDBX_PNL_ASCENDING=1`.
|
- Исправление сборки для случая `MDBX_PNL_ASCENDING=1`.
|
||||||
|
|
||||||
Ликвидация технических долгов и мелочи:
|
Ликвидация технических долгов и мелочи:
|
||||||
@ -32,6 +99,9 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
|||||||
- Устранение несущественных предупреждений Coverity.
|
- Устранение несущественных предупреждений Coverity.
|
||||||
- Использование единого курсора для поиска в GC.
|
- Использование единого курсора для поиска в GC.
|
||||||
- Переработка внутренних флагов связанных с выделением страниц из GC.
|
- Переработка внутренних флагов связанных с выделением страниц из GC.
|
||||||
|
- Доработка подготовки резерва перед обновлением GC при включенном BigFoot.
|
||||||
|
- Оптимизация `pnl_merge()` для случаев неперекрывающихся объединяемых списков.
|
||||||
|
- Оптимизация поддержки отсортированного списка страниц в `dpl_append()`.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user