Skip to content

alexandersamoylov/pg_eyes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pg_eyes

Расширение включает в себя набор функций и представлений для мониторинга состояния базы данных PostgreSQL.

Установка

Версии расширения

В настоящий момент поддерживаются две ветки расширения для разных версий PostgreSQL:

  • 0.x - для версии 9.4-9.5
  • 1.x - для версии 9.6

Для установки файлов расширения можно выполнить suso make install или скопировать вручную файлы расширения(pg_eyes.control и sql/pg_eyes*.sql) в директорию SHAREDIR/extension/

Зависимости

pg_stat_statements

Создание расширения

CREATE EXTENSION pg_eyes CASCADE;

Описание

Функции мониторинга

Функции мониторинга представляют собой api для различных инструментов мониторинга, позволяющий получить из базы данных набор метрик в готовом виде. При вызове функции клиенту возвращаются метрики в виде таблицы: метрика, значение. Функции создаются с опцией SECURITY DEFINER, поэтому пользователю системы мониторинга достаточно привилегий на выполнение функций в схеме eyes.

eyes.get_activity()

Возвращает базовый набор метрик БД PostgreSQL, который можно собирать на всех экземплярах. Кол-во метрик, возвращаемых функцией, в разных экземплярах может отличатся в зависимости от наличия standby серверов.

Описание метрик:

Большинство метрик включают в себя имена view, на основе которых формируются(имя_представления.метрика).

Большая часть метрик из pg_stat_database и pg_stat_bgwriter накопительные. Для построения графиков по ним необходимо вычислять разницу между точками.

Метрики с именами *_time возвращают время в миллисекундах.

Имя метрики Описание
pg_stat_activity.total Кол-во открытых сессий.
pg_stat_activity.active Кол-во активных запросов.
pg_stat_activity.active_1s Кол-во активных запросов, работающих дольше 1 секунды.
pg_stat_activity.active_time Время работы самого долгого запроса. Не учитываются активные запросы процессов autovacuum.
pg_stat_activity.idle Кол-во сессий в статусе idle.
pg_stat_activity.idle_in_tr Кол-во открытых транзакций, ожидающих в статусе idle in transaction.
pg_stat_activity.idle_in_tr_1s Кол-во открытых транзакций, ожидающих в статусе idle in transaction дольше 1 секунды.
pg_stat_activity.idle_in_tr_time Самое долгое время ожидания в статусе idle in transaction.
pg_stat_activity.xact_time Время работы самой долгой открытой транзакции. Не учитываются активные запросы процессов autovacuum.
pg_stat_activity.wait_lock Кол-во заблокированных запросов.
pg_stat_activity.wait_lock_1s Кол-во запросов, заблокированных дольше 1 секунды.
pg_stat_activity.wait_lock_time Самое долгое время блокировки запроса.
pg_stat_activity.autovacuum Кол-во работающих процессов autovacuum
pg_stat_activity.autovacuum_time Время работы самого старого процесса autovacuum.
pg_stat_activity.dba_task_active Значение рассчитывается для application_name = "DBATask" аналогично pg_stat_activity.active
pg_stat_activity.dba_task_active_time Значение рассчитывается для application_name = "DBATask" аналогично pg_stat_activity.active_time
pg_stat_activity.dba_task_xact_time Значение рассчитывается для application_name = "DBATask" аналогично pg_stat_activity.xact_time
pg_stat_database.backends_pct Процент открытых сессий от max_connections.
pg_stat_database.xact_total pg_stat_database
pg_stat_database.xact_commit pg_stat_database
pg_stat_database.xact_rollback pg_stat_database
pg_stat_database.blks_read pg_stat_database
pg_stat_database.blks_hit pg_stat_database
pg_stat_database.tup_returned pg_stat_database
pg_stat_database.tup_fetched pg_stat_database
pg_stat_database.tup_inserted pg_stat_database
pg_stat_database.tup_updated pg_stat_database
pg_stat_database.tup_deleted pg_stat_database
pg_stat_database.conflicts pg_stat_database
pg_stat_database.temp_files pg_stat_database
pg_stat_database.temp_bytes pg_stat_database
pg_stat_database.deadlocks pg_stat_database
pg_stat_bgwriter.checkpoints_timed pg_stat_bgwriter
pg_stat_bgwriter.checkpoints_req pg_stat_bgwriter
pg_stat_bgwriter.checkpoint_write_time pg_stat_bgwriter
pg_stat_bgwriter.checkpoint_sync_time pg_stat_bgwriter
pg_stat_bgwriter.buffers_checkpoint pg_stat_bgwriter
pg_stat_bgwriter.buffers_clean pg_stat_bgwriter
pg_stat_bgwriter.maxwritten_clean pg_stat_bgwriter
pg_stat_bgwriter.buffers_backend pg_stat_bgwriter
pg_stat_bgwriter.buffers_backend_fsync pg_stat_bgwriter
pg_stat_bgwriter.buffers_alloc pg_stat_bgwriter
wal_written_b Объем записанных в WAL данных.
replication.streaming_db02_b_lag Отставание репликации в байтах. Метрика формируется на мастере динамически(streaming_application_name_b_lag) на основе данных pg_stat_replication.
replication.is_in_recovery Возвращает 1, если база данных в процессе восстановления.
replication.ms_lag Время отставания репликации standby базы данных в миллисекундах. На мастере время отставания всегда 0.
response_time Условное время отклика базы данных. Считается время работы текущей функции.

Пример использования:

SELECT stat_name, stat_value FROM eyes.get_activity();
               stat_name                |   stat_value   
----------------------------------------+----------------
 pg_stat_activity.total                 |            150
 pg_stat_activity.active                |              5
 pg_stat_activity.active_1s             |              1
 pg_stat_activity.active_time           |           8233
 pg_stat_activity.idle                  |            134
 pg_stat_activity.idle_in_tr            |             11
 pg_stat_activity.idle_in_tr_1s         |             10
 pg_stat_activity.idle_in_tr_time       |          28972
 pg_stat_activity.xact_time             |          29967
 pg_stat_activity.wait_lock             |              0
 pg_stat_activity.wait_lock_1s          |              0
 pg_stat_activity.wait_lock_time        |              0
 pg_stat_activity.autovacuum            |              0
 pg_stat_activity.autovacuum_time       |              0
 pg_stat_activity.dba_task_active       |              0
 pg_stat_activity.dba_task_active_time  |              0
 pg_stat_activity.dba_task_xact_time    |              0
 pg_stat_database.backends_pct          |              8
 pg_stat_database.xact_total            |     2467775475
 pg_stat_database.xact_commit           |     2464139978
 pg_stat_database.xact_rollback         |        3635497
 pg_stat_database.blks_read             |    12695419761
 pg_stat_database.blks_hit              |  1595740885426
 pg_stat_database.tup_returned          | 49506807445278
 pg_stat_database.tup_fetched           |   375366791483
 pg_stat_database.tup_inserted          |      503839362
 pg_stat_database.tup_updated           |     1176437355
 pg_stat_database.tup_deleted           |      126931522
 pg_stat_database.conflicts             |              0
 pg_stat_database.temp_files            |            734
 pg_stat_database.temp_bytes            |    10883135968
 pg_stat_database.deadlocks             |            404
 pg_stat_bgwriter.checkpoints_timed     |           2656
 pg_stat_bgwriter.checkpoints_req       |            697
 pg_stat_bgwriter.checkpoint_write_time |     4068513155
 pg_stat_bgwriter.checkpoint_sync_time  |         618549
 pg_stat_bgwriter.buffers_checkpoint    |      244031859
 pg_stat_bgwriter.buffers_clean         |       40027187
 pg_stat_bgwriter.maxwritten_clean      |         271382
 pg_stat_bgwriter.buffers_backend       |       84082877
 pg_stat_bgwriter.buffers_backend_fsync |              0
 pg_stat_bgwriter.buffers_alloc         |     1290553764
 wal_written_b                          | 50313595651824
 replication.streaming_db03_b_lag       |          27384
 replication.streaming_db02_b_lag       |          27384
 replication.is_in_recovery             |              0
 replication.ms_lag                     |              0
 response_time                          |             14
(48 строк)

eyes.get_activity(p_stat_group character varying)

Функция для получения специфичных для конкретных баз данных или приложений метрик, настраиваемых дополнительно администраторами. Возвращает метрики только для заданной в параметре вызова группы. Для настройки нестандартных метрик используется таблица eyes.get_activity.

Столбец Тип Описание
stat_name character varying(30) Имя метрики.
stat_group character varying(30) Группа метрик. Значение задается в качестве параметра при вызове функции eyes.get_activity(character varying).
stat_query text Запрос для получения значения. Запрос должен возвращать одно значение целочисленного типа.
stat_description text Произвольное описание метрики.

Пример использования:

Например необходимо получать метрики по размеру таблицы testtable1 и ее индексов. Для настройки добавим соответствующие строки в таблицу с группой "table_size":

INSERT INTO eyes.get_activity (stat_name,
    stat_group, 
    stat_query,
    stat_description)
VALUES ( 'table_size.testtable1_size',
    'table_size',
    'SELECT pg_table_size(''testtable1'');',
    'Размер таблицы testtable1');

INSERT INTO eyes.get_activity (stat_name,
    stat_group, 
    stat_query,
    stat_description)
VALUES ( 'table_size.testtable1_idx_size',
    'table_size',
    'SELECT pg_indexes_size(''testtable1'');',
    'Размер индексов testtable1');

Получение метрик для группы "table_size":

SELECT stat_name, stat_value FROM eyes.get_activity('table_size');
           stat_name            | stat_value 
--------------------------------+------------
 table_size.testtable1_size     |      73728
 table_size.testtable1_idx_size |      32768
(2 строки)

Представления и функции для анализа текущей активности в базе данных

eyes.get_pg_stat_activity()

Функция возвращает результат запроса "SELECT * FROM pg_stat_activity;". Позволяет организовать полный доступ к данным представления pg_stat_activity пользователям без предоставления им роли superuser.

eyes.get_pg_stat_statements()

Функция возвращает результат запроса "SELECT * FROM pg_stat_statements;". Позволяет организовать полный доступ к данным представления pg_stat_statements пользователям без предоставления им роли superuser.

Представления с информацией о базе данных

eyes.db_object

Список объектов в базе данных(pg_class)

Столбец Тип Описание
object_oid oid pg_class.oid
schema_name name pg_namespace.nspname
object_name name pg_class.relname
object_type text Тип объекта: table, view, materialized view, index, sequence, toast, foreign table, composite
object_owner name pg_get_userbyid(pg_class.relowner)
tablespace name pg_tablespace.spcname
object_options text[] pg_class.reloptions

eyes.db_tables

Список таблиц в базе данных

Столбец Тип Описание
table_oid oid pg_class.oid
schema_name name pg_namespace.nspname
table_name name pg_class.relname
table_owner name pg_get_userbyid(pg_class.relowner)
tablespace name pg_tablespace.spcname
seq_scan bigint pg_stat_all_tables.seq_scan
seq_tup_read bigint pg_stat_all_tables.seq_tup_read
idx_scan bigint pg_stat_all_tables.idx_scan
idx_tup_fetch bigint pg_stat_all_tables.idx_tup_fetch
n_tup_ins bigint pg_stat_all_tables.n_tup_ins
n_tup_upd bigint pg_stat_all_tables.n_tup_upd
n_tup_del bigint pg_stat_all_tables.n_tup_del
n_tup_hot_upd bigint pg_stat_all_tables.n_tup_hot_upd

eyes.db_tables_size

Список таблиц в базе данных с расчетом размеров

Столбец Тип Описание
table_oid oid pg_class.oid
schema_name name pg_namespace.nspname
table_name name pg_class.relname
table_owner name pg_get_userbyid(pg_class.relowner)
tablespace name pg_tablespace.spcname
seq_scan bigint pg_stat_all_tables.seq_scan
seq_tup_read bigint pg_stat_all_tables.seq_tup_read
idx_scan bigint pg_stat_all_tables.idx_scan
idx_tup_fetch bigint pg_stat_all_tables.idx_tup_fetch
n_tup_ins bigint pg_stat_all_tables.n_tup_ins
n_tup_upd bigint pg_stat_all_tables.n_tup_upd
n_tup_del bigint pg_stat_all_tables.n_tup_del
n_tup_hot_upd bigint pg_stat_all_tables.n_tup_hot_upd
table_size bigint pg_table_size(pg_class.oid::regclass)
indexes_size bigint pg_indexes_size(pg_class.oid::regclass)
total_size bigint pg_total_relation_size(pg_class.oid::regclass)

eyes.db_indexes

Список индексов в базе данных

Столбец Тип Описание
table_oid oid pg_stat_all_indexes.relid
index_oid oid pg_class.oid
schema_name name pg_namespace.nspname
table_name name pg_stat_all_indexes.relname
index_name name pg_class.relname
tablespace name pg_tablespace.spcname
index_def text pg_get_indexdef(pg_class.oid)
idx_scan bigint pg_stat_all_indexes.idx_scan
idx_tup_read bigint pg_stat_all_indexes.idx_tup_read
idx_tup_fetch bigint pg_stat_all_indexes.idx_tup_fetch

eyes.db_indexes_size

Список индексов в базе данных с расчетом размеров

Столбец Тип Описание
table_oid oid pg_stat_all_indexes.relid
index_oid oid pg_class.oid
schema_name name pg_namespace.nspname
table_name name pg_stat_all_indexes.relname
index_name name pg_class.relname
tablespace name pg_tablespace.spcname
index_def text pg_get_indexdef(pg_class.oid)
idx_scan bigint pg_stat_all_indexes.idx_scan
idx_tup_read bigint pg_stat_all_indexes.idx_tup_read
idx_tup_fetch bigint pg_stat_all_indexes.idx_tup_fetch
index_size bigint pg_table_size(pg_class.oid::regclass)

eyes.db_attributes

Список атрибутов в базе данных

Столбец Тип Описание
object_oid oid pg_class.oid
schema_name name pg_namespace.nspname
object_name name pg_class.relname
object_type name Тип объекта: table, view, materialized view, index, sequence, toast, foreign table, composite
attribute_num smallint pg_attribute.attnum
attribute_name name pg_attribute.attname
attribute_type text format_type(pg_attribute.atttypid, pg_attribute.atttypmod)
is_not_null boolean pg_attribute.attnotnull

eyes.db_functions

Список функций в базе данных

Столбец Тип Описание
function_oid oid pg_proc.oid
schema_name name pg_namespace.nspname
function_name name pg_proc.proname
function_owner name pg_get_userbyid(pg_proc.proowner)
function_def text pg_get_functiondef(pg_proc.oid)

eyes.db_settings

Список параметров

Столбец Тип Описание
name text pg_settings.name
setting text current_setting(pg_settings.name)
context text pg_settings.context
source text pg_settings.source
sourcefile text pg_settings.sourcefile
sourceline integer pg_settings.sourceline

About

PostgreSQL extension for analyze database activity

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published