Вы здесь

Статистика для PostgreSql

Статистика сбрасывается на диск в каталог pg_stat и pg_stat_tmp

Текущая активность

Кто сейчас происходит в базе: (клиентские и серверные процессы)

================================================  pg_stat_activity 

параметры

track_activities включен по умочанию

track_counts включен по умочанию, показывает сколько строк было было изменено, прочитано, добавлено в каждую таблицу 

track_io_timing отключен по умолчанию, тоже что track_counts  но в терминах страниц

track_functions отключен по умолчанию, сколько раз какая функция запускала, сколько работала

что выполняется долго?

select now() - query_start, pid, query from pg_stat_activity where state != 'idle' order by 1 desc;

select substr(query,1,100) query,backend_type,application_name,query_start,wait_event_type,wait_event,state  from pg_stat_activity ;

=============================== pg_stat_statements

статистика по запросам,настраиваем что собирать

postgres=# create extension pg_stat_statements; CREATE EXTENSION  

select substr(query,1,100) query,calls,total_time/1e6 seconds,total_time/calls/1e6 "sec./call",rows 
from pg_stat_statements order by total_time desc;
 
=======================  pg_buffercache
что сидит в буферном кеше

CREATE EXTENSION pg_buffercache;

SELECT c.relname, count(*) AS buffers
             FROM pg_buffercache b INNER JOIN pg_class c
             ON b.relfilenode = pg_relation_filenode(c.oid) AND
                b.reldatabase IN (0, (SELECT oid FROM pg_database
                                      WHERE datname = current_database()))
             GROUP BY c.relname
             ORDER BY 2 DESC
             LIMIT 10;

 

=======================  pgstattuple

статистика раздувания таблицы

 CREATE EXTENSION pgstattuple;

SELECT * FROM pgstattuple('table') ;

Пример

Создадим таблицу и заполним ее данными:

 
=> CREATE TABLE bloat(id serial, s text);
CREATE TABLE
=> INSERT INTO bloat(s)
  SELECT g.id::text FROM generate_series(1,100000) AS g(id);
INSERT 0 100000
=> CREATE INDEX ON bloat(s);
CREATE INDEX
С помощью расширения можно проверить состояние таблицы:
 
=> SELECT * FROM pgstattuple('bloat') \gx
-[ RECORD 1 ]------+--------
table_len          | 4014080
tuple_count        | 100000
tuple_len          | 3388895
tuple_percent      | 84.43
dead_tuple_count   | 0
dead_tuple_len     | 0
dead_tuple_percent | 0
free_space         | 4356
free_percent       | 0.11
 
tuple_percent - доля полезной информации (не 100% из-за накладных расходов).
И индекса:
 
=> SELECT * FROM pgstatindex('bloat_s_idx') \gx
-[ RECORD 1 ]------+--------
version            | 2
tree_level         | 1
index_size         | 2252800
root_block_no      | 3
internal_pages     | 1
leaf_pages         | 273
empty_pages        | 0
deleted_pages      | 0
avg_leaf_density   | 89.98
leaf_fragmentation | 0
 
avg_leaf_density - заполненность листовых страниц индекса;
leaf_fragmentation - характеристика физической упорядоченности страниц.
Теперь обновим половину строк:
 
=> UPDATE bloat SET s = s || '!' WHERE id % 2 = 0;
UPDATE 50000
Посмотрим на таблицу снова:
 
=> SELECT * FROM pgstattuple('bloat') \gx
-[ RECORD 1 ]------+--------
table_len          | 6021120
tuple_count        | 100000
tuple_len          | 3438895
tuple_percent      | 57.11
dead_tuple_count   | 50000
dead_tuple_len     | 1694450
dead_tuple_percent | 28.14
free_space         | 4732
free_percent       | 0.08
 
Плотность уменьшилась.
 
Чтобы не читать всю таблицу целиком, можно попросить pgstattuple показать приблизительную информацию:
 
=> SELECT * FROM pgstattuple_approx('bloat') \gx
-[ RECORD 1 ]--------+-------------------
table_len            | 6021120
scanned_percent      | 100
approx_tuple_count   | 100000
approx_tuple_len     | 3438895
approx_tuple_percent | 57.113875823767
dead_tuple_count     | 50000
dead_tuple_len       | 1694450
dead_tuple_percent   | 28.1417742878401
approx_free_space    | 4732
approx_free_percent  | 0.0785900297619048
 
И посмотрим на индекс:
 
=> SELECT * FROM pgstatindex('bloat_s_idx') \gx
-[ RECORD 1 ]------+--------
version            | 2
tree_level         | 2
index_size         | 4505600
root_block_no      | 412
internal_pages     | 3
leaf_pages         | 546
empty_pages        | 0
deleted_pages      | 0
avg_leaf_density   | 67.6
leaf_fragmentation | 49.82
 
Плотность тоже уменьшилась.
 
================================= pg_stat_plans
статистика по планам
 
================================= pg_stat_kcache
статистика по процессору и вводу - выводу
 
================================= pg_qualstat
статистика по предикатам
 
=============================================

Table 28.1. Dynamic Statistics Views

View Name Description
pg_stat_activity One row per server process, showing information related to the current activity of that process, such as state and current query. See pg_stat_activity for details.
pg_stat_replication One row per WAL sender process, showing statistics about replication to that sender's connected standby server. See pg_stat_replication for details.
pg_stat_wal_receiver Only one row, showing statistics about the WAL receiver from that receiver's connected server. See pg_stat_wal_receiver for details.
pg_stat_subscription At least one row per subscription, showing information about the subscription workers. See pg_stat_subscription for details.
pg_stat_ssl One row per connection (regular and replication), showing information about SSL used on this connection. See pg_stat_ssl for details.
pg_stat_progress_vacuum One row for each backend (including autovacuum worker processes) running VACUUM, showing current progress. See Section 28.4.1.

Table 28.2. Collected Statistics Views

View Name Description
pg_stat_archiver One row only, showing statistics about the WAL archiver process's activity. See pg_stat_archiver for details.
pg_stat_bgwriter One row only, showing statistics about the background writer process's activity. See pg_stat_bgwriter for details.
pg_stat_database One row per database, showing database-wide statistics. See pg_stat_database for details.
pg_stat_database_conflicts One row per database, showing database-wide statistics about query cancels due to conflict with recovery on standby servers. Seepg_stat_database_conflicts for details.
pg_stat_all_tables One row for each table in the current database, showing statistics about accesses to that specific table. See pg_stat_all_tables for details.
pg_stat_sys_tables Same as pg_stat_all_tables, except that only system tables are shown.
pg_stat_user_tables Same as pg_stat_all_tables, except that only user tables are shown.
pg_stat_xact_all_tables Similar to pg_stat_all_tables, but counts actions taken so far within the current transaction (which are not yet included in pg_stat_all_tables and related views). The columns for numbers of live and dead rows and vacuum and analyze actions are not present in this view.
pg_stat_xact_sys_tables Same as pg_stat_xact_all_tables, except that only system tables are shown.
pg_stat_xact_user_tables Same as pg_stat_xact_all_tables, except that only user tables are shown.
pg_stat_all_indexes One row for each index in the current database, showing statistics about accesses to that specific index. See pg_stat_all_indexes for details.
pg_stat_sys_indexes Same as pg_stat_all_indexes, except that only indexes on system tables are shown.
pg_stat_user_indexes Same as pg_stat_all_indexes, except that only indexes on user tables are shown.
pg_statio_all_tables One row for each table in the current database, showing statistics about I/O on that specific table. See pg_statio_all_tables for details.
pg_statio_sys_tables Same as pg_statio_all_tables, except that only system tables are shown.
pg_statio_user_tables Same as pg_statio_all_tables, except that only user tables are shown.
pg_statio_all_indexes One row for each index in the current database, showing statistics about I/O on that specific index. See pg_statio_all_indexes for details.
pg_statio_sys_indexes Same as pg_statio_all_indexes, except that only indexes on system tables are shown.
pg_statio_user_indexes Same as pg_statio_all_indexes, except that only indexes on user tables are shown.
pg_statio_all_sequences One row for each sequence in the current database, showing statistics about I/O on that specific sequence. See pg_statio_all_sequences for details.
pg_statio_sys_sequences Same as pg_statio_all_sequences, except that only system sequences are shown. (Presently, no system sequences are defined, so this view is always empty.)
pg_statio_user_sequences Same as pg_statio_all_sequences, except that only user sequences are shown.
pg_stat_user_functions One row for each tracked function, showing statistics about executions of that function. See pg_stat_user_functions for details.
pg_stat_xact_user_functions Similar to pg_stat_user_functions, but counts only calls during the current transaction (which are not yet included in pg_stat_user_functions).

 

Post new comment

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
1 + 3 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.