SQLite замедляет работу машины при массовой вставке - PullRequest
1 голос
/ 27 марта 2012

Я использую оболочку system.data.sqlite для приложения, которое кэширует большой объем данных.Почти все эти данные попадают в 1 таблицу с 3 столбцами.Данные из кэша извлекаются из вызова веб-службы и вставляются в базу данных в цикле, пока весь набор данных не будет кэширован.Каждый вызов веб-службы сбрасывает 3000 записей и вставляет их в базу данных за 1 транзакцию.

После того, как объем базы данных увеличивается примерно до 8 МБ, операции вставки начинают замедляться и создается файл журнала размером 2-3 МБ ПОСЛЕфиксация каждой транзакции.Это вызывает массивный ввод-вывод, который фактически замедляет операционную систему (Windows XP) до такой степени, что она не отвечает на фиксацию транзакции.

Я прочитал, что SQLite не использует кластерные индексы, поэтому я не уверен, какданные заказываются или заказываются на вставке.Данные не вставляются в обычном порядке.

Наиболее запутанная вещь, если вы обнаружили эту проблему, это то, что это происходит только тогда, когда мы вызываем производственный веб-сервис, веб-сервис QA не вызывает такой большойфайл журнала, создаваемый при каждой фиксации транзакции (файл в QA составляет около 2–14 КБ).Веб-сервис извлекает данные из базы данных SQLServer.Единственная разница между производством и QA заключается в том, что база данных QA является резервной копией производства примерно год назад.Алгоритм кэширования будет начинаться с самых старых данных, и в этом случае обе эти базы данных (QA и Prod) должны быть на 99% одинаковыми.

Создает ли SQLite этот большой файл журнала, потому что он вставляет неупорядоченные данные иприходится разделять страницы?Разрешит ли обновление до WAL эту проблему?

1 Ответ

0 голосов
/ 05 сентября 2013

Без какой-либо информации о PRAGMA, строке соединения или операторе SQL трудно помочь ... Может быть, посмотрите здесь http://blog.teamleadnet.com/2012/03/sqlite-performance-tuning.html Вы уверены, что ваше утверждение выполняется в рамках одной транзакции?Может быть, разделить их на несколько из них ...

...