Низкая производительность sqlite для десятков крошечных запросов - PullRequest
0 голосов
/ 07 октября 2019

Мой Andl проект дополнительно использует SQLite в качестве бэкэнда, и у меня есть сотни модульных тестов для работы с базой данных. Типичный набор смешанных запросов (включая обновления) выполняется с базовой скоростью 800 мс и почти 5 с SQLite или примерно в 6 раз медленнее. Это реальная проблема, так как количество тестов увеличивается.

Тестирование производительности (VS) показывает, что загрузка SQLite составляет около 22% загрузки ЦП (тики). Измеренное использование процессора незначительно (менее 5%), но использование диска максимально достигает почти 100%. Похоже, что система связана с диском.

Итак, как мне настроить SQLite для очень быстрого выполнения множества небольших запросов? Каждый тест - это как минимум одна транзакция (для изоляции), но мне не нужна устойчивость к потере данных. Мне просто нужно, чтобы окончательная база данных была на диске.

  • Система: Windows 10, i7, 16 ГБ памяти, 512 ГБ SSD.
  • Код: C # с Interop to sqlite3.dll,другие библиотеки не задействованы.
  • Проект: https://github.com/david-pfx/Andl.

Обновление: SQLite pragma synchronous=OFF значительно снижает накладные расходы на запрос. Базовая линия для соответствующего набора тестов составляет 5 секунд;с этой опцией тесты SQL теперь выполняются за 11 секунд (вместо минут). Теперь это приемлемо.

Похоже, что это ответ, если не найдется что-то лучшее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...