mirror of
https://github.com/isar/libmdbx.git
synced 2025-11-07 07:18:56 +08:00
mdbx: доработка rebalance() ради уменьшения WAF.
После предыдущей серии доработок весной 2021 года, функция `rebalance()` обеспечивала слияние мало заполненной страницы с менее заполненной соседней, одновременно пытаясь не вовлекать соседних страниц, если те еще не были скопированы/клонированы/изменены в текущей транзакции. В целом, реализованная тактика представляется успешной. Однако, при обновлении GC она иногда приводила к исчерпанию подготовленного резерва извлеченных из GC страниц. Это не является проблемой, если не считать вероятность срабатывания `assert(txn->mt_flags & MDBX_TXN_DRAINED_GC)` в отладочных сборках. Тем не менее, из этой ситуации можно сделать вывод, что поведение `rebalance()`, как минимум, может быть обогащено опцией уменьшения WAF ценой меньшей сбалансированности дерева. Технически при этом слияние выполняется преимущественно с грязной страницей, если на ней достаточно места и соседняя страница с другой стороны еще чистая. Соответствующая опция в `enum MDBX_option_t` будет добавлена чуть позже.
This commit is contained in:
@@ -1437,6 +1437,8 @@ struct MDBX_env {
|
||||
unsigned writethrough_threshold;
|
||||
#endif /* Windows */
|
||||
bool prefault_write;
|
||||
bool prefer_waf_insteadof_balance; /* Strive to minimize WAF instead of
|
||||
balancing pages fullment */
|
||||
union {
|
||||
unsigned all;
|
||||
/* tracks options with non-auto values but tuned by user */
|
||||
|
||||
Reference in New Issue
Block a user