А в каких случаях срабатывает compact()? И почему он может не отрабатывать до конца (не все дерево компактит, а только часть)?
Задайте этот вопрос на SO, пожалуйста.
компакт срабатывает автоматически при следующих ситуациях:
1) Размер данных на уровне l0 достиг предела
2) Размер данных на уровне >0 достиг предела по отношению к предыдущему уровню
2) Размер куска (ран-файла) на уровне >0 достиг предела, так что настало время разбить его на два (или несколько) кусков
В ответе на SO я укажу настройки, которыми это регулируется