Оптимизация и отладка SQL-запросов - PullRequest
2 голосов
/ 22 июля 2011

вопрос о лучшей практике.

Как выполнить надежный тест SQL-запроса?

То есть речь идет об оптимизации структуры БД и самого SQL-запроса, а не производительности системы и БД, буферов,caches.

Когда у вас сложный запрос с большим количеством объединений и т. д., однажды вам нужно понять, как его оптимизировать, и вы переходите к команде EXPLAIN ( mysql :: объяснять , postresql :: объяснять ) для изучения плана выполнения.

После настройки структуры БД вы выполняете запрос, чтобы увидеть любые изменения производительности, но здесь вы находитесь на панели многоуровневой оптимизации / буферизации / кэширования.Как этого избежать?Мне нужно pure время для выполнения запроса и быть уверенным, что оно не затронуто.

Если вы знаете разные практики для разных серверов, пожалуйста, укажите явно: mysql, postgresql, mssql и т. Д.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Для Microsoft SQL Server вы можете использовать DBCC FREEPROCCACHE (для удаления скомпилированных планов запросов) и DBCC DROPCLEANBUFFERS (для очистки кэша данных), чтобы убедиться, что вы начинаете с полностью не кэшированного состояния.Затем вы можете профилировать как некэшированную, так и кэшированную производительность, и точно определять свою производительность в обоих случаях.

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

Я уверен, что многие из этих общих принципов применимы и к другим платформам баз данных.

1 голос
/ 23 июля 2011

Зачем вам нужно чистое время выполнения? Это зависит от многих факторов и практически бессмысленно на живом сервере. Я бы порекомендовал собрать некоторую статистику с живого сервера и проанализировать время выполнения запросов с помощью инструмента pgfouine (для postgresql) и принимать решения на его основе. Вы увидите, что именно вам нужно настроить и насколько эффективными были ваши изменения в отчете.

1 голос
/ 22 июля 2011

В мире PostgreSQL вам необходимо очистить кэш базы данных, а также кэш ОС, поскольку PostgreSQL использует систему кэширования ОС.

См. Эту ссылку для некоторых обсуждений.

http://archives.postgresql.org/pgsql-performance/2010-08/msg00295.php

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