pgsql timing

Last edit

Changed: 6c6,7

< выполняться совсем не так как ожидалось. В мире БД, как правило, основным тормозящим фактором является ввод-вывод. Загрузка процессора является редко

to

> выполняться совсем не так как ожидалось. В мире БД, как правило, основным тормозящим фактором является ввод-вывод. Для оценки IO трафика можно воспользоваться [http://www.postgresql.org/docs/current/static/monitoring-stats.html статистикой], которая доступна для индексов и таблиц.
> Загрузка процессора является редко


Как оценить производительность ?

Всех всегда интересует насколько быстро работает БД, как выполняется запрос. Несмотря на то, что это действительно интересует, на самом деле время выполнения запроса не очень показательно, так как определяется слишком большим количеством факторов. Вы можете отладить запрос на своем десктопе, а на сервере он будет выполняться совсем не так как ожидалось. В мире БД, как правило, основным тормозящим фактором является ввод-вывод. Для оценки IO трафика можно воспользоваться статистикой, которая доступна для индексов и таблиц. Загрузка процессора является редко решающим фактором. Тем не менее, используйте \timing в psql, если хотите получить время (ms):

www=# \timing
Timing is on.
www=# select count(*) from pg_class;
 count 
-------
   228
(1 row)

Time: 344.456 ms

Замечу, что для получения времени выполнения запросы используется функция gettimeofday().

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

Неблагодарной задачей является сравнение времен выполнения запроса разными БД. Например, MS SQL может выдать время на порядок меньше, чем pgsql, а объясняется это тем фактом, что MS SQL выдает результат блоками и сообщает время выполнения сразу после выдачи первого блока, в то время как pgsql выдает время лишь после того, как накопится весь результат !