Sqlite3 во встроенной системе - процесс увеличения памяти? - PullRequest
3 голосов
/ 19 января 2012

Мы используем Sqlite3 в качестве встроенной базы данных для проекта на основе C ++. Процесс, использующий интерфейс sqlite3 (тот, который фактически фиксирует записи журнала), по-видимому, расширяет свою кучную память при увеличении размера базы данных.

Расширение динамической памяти определенно напрямую связано с размером базы данных (доказательство: если строка «вставка в базу данных» закомментирована, расширение никогда не произойдет, И если включение журнала включено, когда база данных начинает перенос расширение прекращается, как будто оно исчерпано).

Мы на Unix-подобной ОС.

Кто-нибудь знает, если SQLITE3 выполняет какое-то кэширование, которое мы могли бы отключить, если UNIX может делать это само, или это обязательно проблема? Беспокойство здесь очевидно, что куча памяти может быть исчерпана, что приведет к сбою нашей системы.

Я видел странную ссылку на само кеширование в UNIX и высвобождение связанной с кешем памяти, когда это требуется в противном случае, но я недостаточно знаю об этом предмете, чтобы быть уверенным в том, что это правда. Я не нашел ничего подходящего (что я понимаю) в документации SQLITE3.

1 Ответ

2 голосов
/ 23 января 2012

Через несколько дней я определил, что вы можете использовать прагму при создании базы данных или до открытия соединения, чтобы смягчить эту проблему.Я опубликую его как принятый ответ, так как никто не комментировал этот вопрос с момента его публикации.

Установите это через интерфейс sqlite3 и установите его в 0 или число, которое вам нравится больше.

PRAGMA cache_size=0; 

, чтобы остановить рост памяти процесса в соответствии с размером базы данных.По-видимому, хотя существуют ограничения по умолчанию для кэширования, они либо были отключены, либо просто не работали в нашей реализации - возможно, из-за параметров компиляции, используемых при кросс-компиляции sqlite3.Установка прагмы заставляет ее правильно применять ограничения, чтобы остановить рост размера процесса.

Вот ссылка для получения дополнительной информации:

http://www.sqlite.org/pragma.html#pragma_cache_size

...