POSTGRESQLRUSSIA.org Российское сообщество пользователей PostgreSQL

Полезные запросы для PostgreSQL DBA

Материал из Postgresmen Wiki.

Перейти к: навигация, поиск

Данная страница служит для быстрой справки, некоторые запросы из приведённых ниже подробно разобраны в статье PostgreSQL: аналитика для DBA.

Размеры объектов

  • Размер БД
   SELECT pg_size_pretty(pg_database_size('<your_database_name>')); 
  • Размеры 10 самых больших таблиц в БД
   SELECT 
     schemaname || '.' || tablename as name,
     pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) as totalsize, -- incl. TOASTed and indx
     pg_size_pretty(pg_relation_size(schemaname ||  '.' || tablename)) as relsize -- pure size (w/o TOAST and indexes)
   FROM 
     pg_tables
   WHERE
     schemaname <> 'information_schema'
   ORDER BY
     pg_total_relation_size(schemaname || '.' || tablename) DESC
   LIMIT 10;
  • Размеры 10 самых больших индексов в БД
   SELECT 
     schemaname || '.' || indexname as name, 
     pg_size_pretty(pg_relation_size(schemaname || '.' || indexname)) as idxsize
   FROM 
     pg_indexes
   WHERE
     schemaname <> 'information_schema'
   ORDER BY
     pg_relation_size(schemaname || '.' || indexname) DESC
   LIMIT 10;

Статистика использования

Внимание! Для корректной работы запросов этой секции необходимо включить опции stats_block_level и stats_row_level в postgresql.conf, а также настроить параметр stats_reset_on_server_start по своему усмотрению.

  • Отношение hit / read
   SELECT 
     datname, 
     CASE 
       WHEN blks_read = 0 THEN 0 
       ELSE blks_hit / blks_read 
     END AS ratio 
   FROM 
     pg_stat_database;
  • Количество модификаций, произошедших в таблице
   SELECT 
     relname, 
     n_tup_ins, 
     n_tup_upd, 
     n_tup_del 
   FROM 
     pg_stat_user_tables 
   ORDER BY 
     n_tup_upd DESC;
  • Статистика seq scan / index scan
   SELECT 
     relname, 
     seq_scan, 
     idx_scan, 
     CASE 
       WHEN idx_scan = 0 THEN 100 
       ELSE seq_scan / idx_scan 
     END AS ratio 
   FROM 
     pg_stat_user_tables 
   ORDER BY 
     ratio DESC;
  • Статистика по использованию индексов
   SELECT
     indexrelname,
     idx_tup_read,
     idx_tup_fetch,
     (idx_tup_read - idx_tup_fetch),
     CASE WHEN idx_tup_read = 0 THEN 0 ELSE (idx_tup_read::float4 -
   idx_tup_fetch) / idx_tup_read END as r
   FROM
     pg_stat_user_indexes
   ORDER BY r desc;

Текущие запросы, блокировки

  • Выполняющиеся запросы с их продолжительностью
   SELECT 
     datname, 
     NOW() - query_start AS duration, 
     procpid, 
     current_query	
   FROM
     pg_stat_activity 
   ORDER BY duration DESC;
  • Список текущих блокировок
   SELECT 
     l.mode, 
     d.datname, 
     c.relname, 
     l.granted, 
     l.transactionid 
   FROM 
     pg_locks AS l 
   LEFT JOIN pg_database AS d ON l.database= d.oid 
   LEFT JOIN pg_class AS c ON l.relation = c.oid;