Восстановление кеша - это особый шаг, который должен выполняться под заданием Не другая команда.
SQLite для ACID db сбрасывается при каждой фиксации ИЛИ при каждой вставке / удалении / обновлении, не обернутой транзакцией. Используйте транзакции для группировки операций ИЛИ ВЫКЛЮЧИТЕ ACIDity и установите PRAGMA синхронный = ВЫКЛ.
«PRAGMA синхронный = ВЫКЛ», и SQLite не будет сбрасывать данные вообще (фактически оставляя это для кэша ОС)
SQLITE_DEFAULT_CACHE_SIZE ТОЛЬКО для размера кеша. И кеш используется ТОЛЬКО для чтения данных.
Есть еще один вариант - вы можете реализовать собственный слой VFS и вообще запретить сохранение страниц до того, как ваш собственный буфер будет заполнен. http://www.sqlite.org/c3ref/vfs.html
Но я уверен, что sync = off (или гораздо лучше использовать транзакции) сделает работу достаточно хорошо (при этом с хорошим шансом) испортить вашу базу данных в случае сбоя питания или полной перезагрузки для синхронизации = выкл).
Еще один совет - поместить ЖУРНАЛ в память или полностью его отключить. Опять же - это отключает кислотность, но это также устраняет некоторые прикосновения к диску.
В последнем SQLite есть функция для резервного копирования горячих баз данных , он все еще экспериментальный, но моя рекомендация было бы использовать базу данных памяти и объединить ее с базой данных диска, когда вы считаете это целесообразным.
You have the source code to SQLite - why not simply instrument it to record the information you are interested in.
Хорошо, Нил. Если «SQLite использует форму «сквозное кэширование», затем при переполнении кэша он попытается сбросить данные во временный файл или на диск. Это та же самая точка, которую я пытаюсь экспериментировать, увеличивая размер кэша и, таким образом, получая контроль над скоростью очистки. но этого не происходит. Пожалуйста, ответьте.