Существует ли какое-либо (желательно с открытым исходным кодом) программное обеспечение, которое может анализировать PostgreSQL EXPLAIN и рекомендовать необходимые индексы, которые ускорили бы запрос?
Существует ли какое-либо (желательно с открытым исходным кодом) программное обеспечение, которое может анализировать PostgreSQL EXPLAIN и рекомендовать необходимые индексы, которые ускорили бы запрос?
Ответы:
Я буквально только что нашел это пару минут назад: http://explain.depesz.com/ . Вы вставляете результаты своего EXPLAIN ANALYZE, и он показывает, где могут быть проблемы (он даже имеет цветовую кодировку).
Из раздела справки ...
объяснение.depesz.com инструмент для поиска реальной причины для медленных запросов. Как правило, можно использовать запрос EXPLAIN ANALYZE; и прочитайте вывод. Проблема заключается в том, что не все части вывода легко понятны любому, и не всегда очевидно, является ли узел, который выполняется за 17,3 мс, быстрее или медленнее, чем узел, который работает за 100 мс, - учитывая тот факт, что первый выполняется 7 раз. Чтобы использовать сайт, просто перейдите на его первую страницу и вставьте туда объяснение результатов анализа вашего psql. Этот вывод может выглядеть следующим образом. После загрузки вы будете перенаправлены на страницу, которая показывает разобранный текст и хорошо (ну, по крайней мере, хорошо для меня :) раскрашена, чтобы подчеркнуть важные части. Это может выглядеть так Примечание: постоянный адрес для цветного вывода, так что вы можете просто использовать его, чтобы показать его другим - например, тем приятным парням на канале irc #postgresql на freenode. Этот график использует 4 цвета для обозначения важных вещей: белый фон - все хорошо, желтый фон - данный узел беспокоится о коричневом фоне - данный узел больше беспокоит красный фон - данный узел очень беспокоится о том, какой цвет используется, выбирается в зависимости от того, какой режим Вы будете использовать: «Эксклюзив», «Включая» или «Строки X».
Я не знаю ни одного инструмента для Postgres, который бы делал это алгоритмически, и, на мой взгляд, человеческий мозг (и часто немного экспериментируя в среде разработчика) действительно единственный подходящий инструмент здесь. Это связано с множеством факторов, в том числе с точки зрения того, будет ли планировщик запросов вообще считать, что ваш индекс стоит того, чтобы использовать его - что определяется тем, как ваша установка настроила параметры планировщика запросов и размер / статистику в соответствующей таблице ( с).
Лучшая рекомендация, которую я могу дать, - это сделать EXPLAIN ANALYZE
( ANALYZE
это важно - это даст вам время выполнения запросов и подпланов), посмотреть на результаты самостоятельно и атаковать наибольшее число, которое вы видите первым. Возможно, вы могли бы написать парсер, чтобы разбить вывод EXPLAIN (особенно в 9.0 с выводом JSON), но я не знаю никого, кто бы еще занимался этим (это в основном то, что делают оптимизаторы для MS-SQL ...)
Ничего производственного уровня, но для любопытных, есть / был исследовательский проект для реализации чего-то подобного. Поиск "Советник по индексам PostgreSQL".