Отслеживает ли 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;

Конечно, вам нужно понять запрос и его план. Иногда сканирование таблицы может быть более оптимизировано.

Другие вопросы по тегам