mirror of
https://github.com/isar/libmdbx.git
synced 2025-11-07 07:18:56 +08:00
mdbx: переработка контроля "некогерентности" для уменьшения накладных расходов.
Существует проблема https://libmdbx.dqdkfa.ru/dead-github/issues/269, которая проявляется только при специфической неупорядоченности внутри ядра ОС, когда страницы, записанные в файл отображенный в память, становятся видны в памяти посредством работы unified page cache: - если записанная последней мета-страница "обгоняет" ранее записанные, т.е. когда записанное в файл позже становится видимым в отображении раньше, чем записанное ранее. Теперь, вместо постоянной полной сверки записываемых страниц, выполняется легковесная проверка при старте транзакций, с переключением в режим "как раньше" при обнаружении проблемы. В результате, в некоторых сценариях возвращается 5-10% производительности, а в отдельных синтетических тестах до 30%.
This commit is contained in:
@@ -622,6 +622,11 @@ typedef struct pgop_stat {
|
||||
MDBX_atomic_uint64_t prefault; /* Number of prefault write operations */
|
||||
MDBX_atomic_uint64_t mincore; /* Number of mincore() calls */
|
||||
|
||||
MDBX_atomic_uint32_t
|
||||
incoherence; /* number of https://libmdbx.dqdkfa.ru/dead-github/issues/269
|
||||
caught */
|
||||
MDBX_atomic_uint32_t reserved;
|
||||
|
||||
/* Статистика для профилирования GC.
|
||||
* Логически эти данные может быть стоит вынести в другую структуру,
|
||||
* но разница будет сугубо косметическая. */
|
||||
|
||||
Reference in New Issue
Block a user