Как измерить производительность запроса в Oracle - PullRequest
8 голосов
/ 21 августа 2009

Я новичок в Oracle DB. У меня есть 2 запроса, которые возвращают один и тот же набор результатов. Я хочу измерить производительность каждого из них и выбрать лучший. Как мне это сделать с помощью Oracle SQL Developer? Я помню, как читал, что некоторые инструменты предоставляют статистику. Любые указатели о том, как читать эту статистику?

Обновление: по предложению Роба Вана я использовал утилиту tkprof, чтобы определить производительность моих запросов. Несколько параметров, которые я мог понять (количество, строки, прошедшее время, время выполнения), но большинство я не мог. Кто-нибудь может мне помочь со значением этих параметров? Ниже приведены результаты.

Query 1:
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch       49      0.26       0.32         45        494          0       23959
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       51      0.28       0.33         45        494          0       23959

Query2:
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch       33      0.25       0.24          0        904          0       15992
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       35      0.25       0.24          0        904          0       15992

Я могу решить, что запрос 2 лучше, чем запрос 1. Любая помощь на диске, запрос и текущие параметры означают ??

Ответы [ 4 ]

10 голосов
/ 21 августа 2009

Над редактором SQL есть кнопка, которая называется «План объяснения». Этот инструмент расскажет вам, сколько стоит каждый маршрут, и как оператор будет использовать индексы и разделы. Обратите внимание, что вы можете получить сообщение об ошибке, вашему администратору БД потребуется включить функцию для вашей учетной записи пользователя, я считаю, что это «трассировка», но в этом вопросе может возникнуть ошибка. Поначалу чтение вывода оператора execute может быть сложным, но это хороший инструмент, помогающий писать хороший SQL.

3 голосов
/ 23 августа 2009

На OTN Рэндольф Гейст и я написали два поста о том, как измерять производительность. Если вы сделаете, как указано в этих темах, вы соберете информацию, чтобы выбрать лучший.

Если вам нужна полная версия, посетите Randolf's .

Если вам нужна короткая версия, посетите mine :

Обе темы объясняют, как использовать план объяснения и отслеживания, чтобы увидеть, где тратится время. Тогда вам решать, что именно вы квалифицируете как «лучше». Это может быть самое короткое истекшее время, наименьшее количество использованных ресурсов или наименьшее количество защелок, или, может быть, что-то еще.

Надеюсь, это поможет.

С уважением, Роб.

2 голосов
/ 24 августа 2009

Боюсь, что EXPLAIN PLAN - единственный способ. Начните с предположения, что более низкая стоимость (если вы посмотрите на план объяснения, там должен быть столбец с названием COST), но вам нужно прочитать об этом, чтобы вы узнали больше и больше. Может быть, у вас есть администратор базы данных, с которым вы могли бы пообщаться? Не имея ваших данных и запросов, трудно посоветовать дальше

Для того, чтобы что-то связанное с разработкой Oracle, лучше всего начать с Тома Кайта (Google его) или поиска по на сайте Ask Tom . Если вы действительно хотите принять участие

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

Зависит от того, как часто вызывается запрос, влияет на то, насколько хорошо вам нужно отслеживать производительность запроса (извините пуристам, но это так). Если запрос выполняется только один раз в неделю и занимает минуту , не затрагивая что-либо еще , тогда нужно ли оптимизировать этот запрос? Для технического обслуживания проще использовать запрос, за которым логически легче следовать?

Если запрос вызывается несколько раз в секунду, вам необходимо полностью понять план объяснения и получить дополнительное представление о том, как можно оптимизировать запрос до наилучшей производительности

2 голосов
/ 21 августа 2009

Основной ответ - выполнить каждый запрос пару раз и посмотреть, какой из них быстрее. Лучшая часть - вы можете сделать это без изучения производительности Oracle. Единственное, что вам нужно знать, это то, что вы не можете доверять первой попытке, потому что большую часть времени она будет считывать данные с диска, а вторая попытка будет использовать кэшированные данные из ОЗУ. Вот почему вы пытаетесь каждый запрос пару раз.

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