Мой Andl проект дополнительно использует SQLite в качестве бэкэнда, и у меня есть сотни модульных тестов для работы с базой данных. Типичный набор смешанных запросов (включая обновления) выполняется с базовой скоростью 800 мс и почти 5 с SQLite или примерно в 6 раз медленнее. Это реальная проблема, так как количество тестов увеличивается.
Тестирование производительности (VS) показывает, что загрузка SQLite составляет около 22% загрузки ЦП (тики). Измеренное использование процессора незначительно (менее 5%), но использование диска максимально достигает почти 100%. Похоже, что система связана с диском.
Итак, как мне настроить SQLite для очень быстрого выполнения множества небольших запросов? Каждый тест - это как минимум одна транзакция (для изоляции), но мне не нужна устойчивость к потере данных. Мне просто нужно, чтобы окончательная база данных была на диске.
Обновление: SQLite pragma synchronous=OFF
значительно снижает накладные расходы на запрос. Базовая линия для соответствующего набора тестов составляет 5 секунд;с этой опцией тесты SQL теперь выполняются за 11 секунд (вместо минут). Теперь это приемлемо.
Похоже, что это ответ, если не найдется что-то лучшее.