Отслеживает ли postgresql полное сканирование таблицы?
Я хотел бы сделать что-то похожее на то, что описано в http://www.bestbrains.dk/Blog/2010/03/25/HowToAssertThatYourSQLDoesNotDoFullTableScans.aspx но для этого мне понадобится postgres для отслеживания любых полных сканирований таблицы. делает. Есть ли такая вещь для postgres?
2 ответа
Решение
Посмотри на pg_stat_get_numscans(oid)
(количество последовательных проверок на столе) и сборщик статистики (в целом).
Я использую приведенный ниже запрос. Если использование индекса> 99, я в порядке. Поэтому меня беспокоит любая таблица, имеющая более 7000 строк и использование индекса менее 99.
SELECT
relname table_name,
idx_scan index_scan,
seq_scan table_scan,
100*idx_scan / (seq_scan + idx_scan) index_usage,
n_live_tup rows_in_table
FROM
pg_stat_user_tables
WHERE
seq_scan + idx_scan > 0 and 100 * idx_scan / (seq_scan + idx_scan) < 99 and
n_live_tup > 70000
ORDER BY
4 DESC;
Конечно, вам нужно понять запрос и его план. Иногда сканирование таблицы может быть более оптимизировано.