mdbx_env_defrag() and mdbx_defrag utility #295
erthink
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
The mdbx_env_defrag() avaiable in the
masterbranch along with the newmdbx_defragutility.Функция выполняет "дефрагментацию"/уплотнение БД, перемещая данные из страниц примыкающих к концу БД в свободные страницы внутри, и отсекая освобожденные страницы.
Параметрами задаются ограничения на минимальные/максимальные результат и объём работы (через затрачиваемое время).
Также уже реализовано перемещение large/overflow-страниц, с формированием для этого интервалов из свободных последовательных страниц в теле БД.
Для дефрагментации больших overlflow-страниц (при хранении в БД больших кусков данных) необходимо формировать соответствующие интервалы в теле БД, т.е. переместить страницы с данными, чтобы потом на их место переместить overflow-страницу.
Для минимизации операций перемещения (и расходования ресурса SSD) необходимо выбирать перемещаемые страницы с учетом уже свободных и требуемого количества операций, определяемого как структурой B-Tree, так и обновлением/перемещением родительских при корректировке ссылок на уже перемещенные страницы.
Алгоритм дефрагментации нельзя назвать сложным, он сводится к повторению нескольких достаточно простых шагов.
Однако, структура БД и её содержимое могут образовывать огромное количество специальных случаев, обработку которых необходимо отладить до 100% верного выбора варианта: пропустить, повторить, отложить на следующий цикл, остановиться и т.д.
Beta Was this translation helpful? Give feedback.
All reactions