Беркли DB: DbEnv :: lsn_reset занимает очень много времени

Я использую Berkeley DB с, вероятно, относительно большим файлом базы данных (2,1 ГБ, используя формат btree, если это имеет значение). Во время закрытия приложения вызывается DbEnv :: lsn_reset, чтобы «очистить» все перед выходом из приложения. Для большой базы данных эта процедура занимает у меня очень много времени — не менее 10 минут, в течение которых происходит тяжелый доступ к диску.

Это нормально или результат неправильного использования Беркли БД? Что-нибудь можно сделать, чтобы ускорить процесс? В частности, какие параметры можно настроить для улучшения производительности?

0

Решение

DbEnv :: lsn_reset (), вероятно, не то, что вы хотите. Эта функция перезаписывает каждую страницу в базе данных, чтобы вы могли закрыть базы данных и открыть их в другой среде. Это собирается выпустить по крайней мере 2,1 ГиБ, и довольно медленно.

Если вы просто выключаете приложение, чтобы запустить его позже, вы можете просто захотеть сделать DbEnv :: txn_checkpoint (), чтобы очистить журнал базы данных и вставить запись контрольной точки. Впрочем, это тоже не обязательно. Пока у вас есть журналы, сохраненные в стабильном хранилище, вы можете просто выйти из приложения.

http://docs.oracle.com/cd/E17276_01/html/api_reference/CXX/txncheckpoint.html

1

Другие решения