Есть ли инструмент для профилирования sqlite запросов? - PullRequest
44 голосов
/ 08 июля 2010

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

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

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

Ответы [ 3 ]

34 голосов
/ 31 августа 2011

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

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

sqlite> .timer on

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

22 голосов
/ 09 июля 2010

У вас есть несколько вопросов здесь. Чтобы посмотреть, какие запросы выполняются и сколько времени занимает каждый, вам нужно либо изменить 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, поскольку их точное поведение не задокументировано, не указано и может быть переменной.

3 голосов
/ 09 мая 2016

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

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