Подтвердить что ты не робот

Есть ли инструмент для профилирования запросов sqlite?

Я использую базу данных SQLite и хочу ускорить мои запросы, возможно, с помощью индексов или путем их реструктуризации.

Есть ли инструмент для профилирования запросов, которые могут помочь мне решить, где вещи замедляются?

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

4b9b3361

Ответ 1

Здесь у вас есть множество вопросов. Чтобы просмотреть, какие запросы выполняются и сколько времени потребуется, вам нужно либо изменить sqlite3.dll, если приложение ссылается на это, либо если ваше собственное приложение вы можете записать его в свой код проще (мы делаем это и все время запросы, транзакции, тайминги и т.д.).

Для индивидуального анализа запросов вы можете использовать EXPLAIN. Он не укажет вам временные рамки отдельных шагов в запросе, но он будет сообщать вам, как был выполнен запрос.

http://www.sqlite.org/lang_explain.html

Оператору SQL может предшествовать ключевое слово "EXPLAIN" или фраза "EXPLAIN QUERY PLAN". Любая модификация заставляет оператор SQL вести себя как запрос и возвращать информацию о том, как оператор SQL работал бы, если ключевое слово или фраза EXPLAIN были опущены.

Когда ключевое слово EXPLAIN появляется сам по себе, это заставляет оператор вести себя как запрос, который возвращает последовательность команд виртуальной машины, которые он использовал бы для выполнения команды, если бы ключевое слово EXPLAIN не присутствовало. Когда появляется фраза EXPLAIN QUERY PLAN, оператор возвращает высокоуровневую информацию о том, какие индексы были бы использованы.

Выход из EXPLAIN и EXPLAIN QUERY PLAN предназначен только для интерактивного анализа и устранения неполадок. Детали выходного формата могут быть изменены с одного выпуска SQLite на другой. Приложения не должны использовать EXPLAIN или EXPLAIN QUERY PLAN, поскольку их точное поведение недокументировано, неопределено и переменной.

Ответ 2

Это ответит только на одну часть вопроса (к сожалению, самая бесполезная часть).

Я искал это, потому что искал что-то по времени, и у клиента sqlite3 есть команда meta timer.

sqlite > .timer on

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

Ответ 3

Теперь у SQLite есть экспериментальные sqlite3_trace и sqlite3_profile (подробнее см. https://www.sqlite.org/c3ref/profile.html). Они могут пригодиться для получения статистики/расследования виновника во время длительных тестов.