| Параметр | Описание |
|---|---|
domino.decoder_info() |
Отображает информацию о декодере для текущей базы данных. |
domino.decoder_info_all() |
Отображает информацию о декодере для всех баз данных. |
domino.decoder_workers() |
Запрашивает PID рабочих процессов и базы данных, к которым они подключены. |
domino.decoder_metrics() |
Показывает счетчики производительности для декодеров. |
domino.stream_metrics() |
Показывает счетчики производительности планировщика и информацию об ошибках для потоков. |
domino.stream_strategy() |
Отображает стратегию планирования и статус потоков. |
domino.stream_progress() |
Показывает прогресс потока и статус удержания XLog. |
domino.ticker_info() |
Проверяет, запущен ли тикер или он приостановлен. |
domino.ticker_metric() |
Показывает условия, вызвавшие срабатывание тикера. |
domino.tlog_page(text) |
Отображает содержимое TLog; используется для отладки. |
Примеры использования
domino.decoder_workers(): Запрос PID рабочих процессов и подключенных баз данных.
=# select * from domino.decoder_workers();
segid | dbid | dbname | pid
-------+-------+--------+-------
0 | 18745 | haoyu | 20351
1 | 18745 | haoyu | 20353
2 | 18745 | haoyu | 20352
-1 | 18745 | haoyu | 20354
(4 rows)
domino.decoder_metrics(): Просмотр счетчиков производительности декодеров.
=# select * from domino.decoder_metrics();
segid | dbid | dbname | bytes_in | xacts | spills | tuples_new | tuples_old | snapshots | latency_ms | loops | total_duration_ms | last_duration_ms
-------+-------+--------+----------+-------+--------+------------+------------+-----------+------------+-------+-------------------+------------------
0 | 18745 | haoyu | 36048 | 0 | 0 | 0 | 0 | 119 | 0 | 25851 | 26616 | 1
1 | 18745 | haoyu | 35872 | 0 | 0 | 0 | 0 | 119 | 0 | 26755 | 27517 | 1
2 | 18745 | haoyu | 36048 | 0 | 0 | 0 | 0 | 119 | 0 | 25814 | 26576 | 1
-1 | 18745 | haoyu | 36784 | 0 | 0 | 0 | 0 | 119 | 0 | 22781 | 23444 | 1
(4 rows)
domino.stream_metrics(): Просмотр счетчиков производительности планировщика потоков и сообщений об ошибках.
=# select * from domino.stream_metrics();
db | db_name | stream | stream_name | loops | tuples | total_slip_ms | last_slip_ms | last_lag_ms | total_duration_ms | last_duration_ms | last_run | held_until | has_error | error_message | error_detail | error_hint | error_context
-------+---------+--------+-------------+-------+--------+---------------+--------------+-------------+-------------------+------------------+-------------------------------+-------------------------------+-----------+---------------+--------------+------------+---------------
18745 | haoyu | 18792 | s1 | 4 | 0 | 6 | 2 | 1709 | 57 | 7 | 2025-05-23 14:14:26.249188+08 | 2025-05-23 14:14:27.242299+08 | f | | | |
(1 row)
domino.stream_strategy(): Просмотр стратегии планирования и статуса потоков.
=# select * from domino.stream_strategy();
id | db | db_name | stream | stream_name | strategy | summary
----+-------+---------+--------+-------------+------------+------------------------------------------
0 | 18745 | haoyu | 18792 | s1 | roundrobin | held until 2025-05-23 14:14:56.279678+08
(1 row)
domino.stream_progress(): Просмотр прогресса потока и статуса удержания XLog.
=# select * from domino.stream_progress();
segid | db | db_name | stream | stream_name | restart_lsn | flush_lsn | tsn | xmin | end_lsn | lag_size | pending_xid | pending_restart | pending_flush | pending_tsn | pending_xmin | wal_status | safe_wal_size
-------+-------+---------+--------+-------------+-------------+-----------+---------+------+-----------+----------+-------------+-----------------+---------------+-------------+--------------+------------+---------------
0 | 18745 | haoyu | 18792 | s1 | 0/C246788 | 0/C249420 | 0/1A160 | 645 | 0/C249CE0 | 2240 | 647 | 0/C246788 | 0/C249610 | 0/1A240 | 646 | reserved |
1 | 18745 | haoyu | 18792 | s1 | 0/C2466F0 | 0/C249388 | 0/1A160 | 645 | 0/C249C48 | 2240 | 647 | 0/C2466F0 | 0/C249578 | 0/1A240 | 646 | reserved |
2 | 18745 | haoyu | 18792 | s1 | 0/C246788 | 0/C249420 | 0/1A160 | 645 | 0/C249CE0 | 2240 | 647 | 0/C246788 | 0/C249610 | 0/1A240 | 646 | reserved |
(3 rows)
domino.ticker_info(): Проверка, запущен ли тикер или он приостановлен.
-- Return values: (invalid: not started, running: active, paused: paused)
ticker_info
-------------
running
(1 row)
domino.ticker_metric(): Просмотр условий, вызывающих срабатывание тикера.
=# SELECT * FROM domino.ticker_metric();
segid | ticks_by_time | ticks_by_size | ticks_by_force
-------+---------------+---------------+----------------
0 | 18894 | 2 | 1
1 | 18894 | 2 | 1
2 | 18894 | 2 | 1
-1 | 0 | 0 | 0
(4 rows)
Плагин Domino предоставляет два представления: domino.decoder_info и domino.stream_info, используемые для мониторинга состояния и метрик логических декодеров и потоков данных.
domino.decoder_info отображает состояние выполнения и метрики логических декодеров на каждом сегменте.
Описание полей
| Имя поля | Тип | Описание |
|---|---|---|
| segid | integer | Идентификатор сегмента |
| dbid | oid | OID базы данных |
| dbname | text | Имя базы данных |
| restart_lsn | pg_lsn | Начальный LSN удерживаемого XLog (XLog удерживается с этой позиции) |
| confirmed_flush | pg_lsn | LSN, до которого выполнен flush XLog |
| start_tsn | pg_lsn | Начальный TSN последнего сгенерированного TLog |
| end_tsn | pg_lsn | Конечный TSN последнего сгенерированного TLog |
| prog_xmin | xid | xmin таблиц каталога/измерений (данные удерживаются на основе этого xmin) |
| pid | integer | ID процесса декодера; 0 означает, что процесс не запущен |
| bytes_in | bigint | Общий объем потребленных данных XLog |
| xacts | bigint | Общее количество потребленных транзакций |
| spills | bigint | Количество транзакций, вытесненных на диск |
| tuples_new | bigint | Количество вставленных строк |
| tuples_old | bigint | Количество старых строк, обновленных/удаленных |
| snapshots | bigint | Количество созданных снимков |
| latency_ms | bigint | Задержка последнего цикла декодирования |
| loops | bigint | Количество циклов выполнения декодера |
| total_duration_ms | bigint | Суммарное время выполнения |
| last_duration_ms | bigint | Длительность последнего цикла выполнения |
Пример запроса
-- Check segments with high decoding latency
SELECT segid, dbid, dbname, dbname, latency_ms
FROM domino.decoder_info
WHERE latency_ms > 60 * 1000;
domino.stream_info отображает общий прогресс, статус и информацию о планировании для каждого логического потока.
Описание полей
| Имя поля | Тип | Описание |
|---|---|---|
| segid | integer | Идентификатор сегмента |
| db | oid | OID базы данных |
| db_name | text | Имя базы данных |
| stream | oid | OID потока |
| stream_name | text | Имя потока |
| restart_lsn | pg_lsn | Начальный LSN удерживаемого XLog (XLog удерживается с этой позиции) |
| flush_lsn | pg_lsn | LSN, до которого выполнен flush XLog |
| start_tsn | pg_lsn | Начальный TSN последнего потребленного TLog |
| end_tsn | pg_lsn | Конечный TSN последнего потребленного TLog |
| xmin | xid | xmin таблиц каталога/измерений (данные удерживаются на основе этого xmin) |
| end_lsn | pg_lsn | Последний LSN на этом сегменте |
| lag_size | bigint | Разница размера между flush_lsn и end_lsn |
| pending_xid | xid | ID незавершенной транзакции |
| pending_restart | pg_lsn | Незавершенный LSN перезапуска XLog (XLog удерживается с этой позиции) |
| pending_flush | pg_lsn | Незавершенный LSN flush XLog |
| pending_tsn | pg_lsn | Незавершенный начальный TSN TLog |
| pending_xmin | xid | Незавершенный xmin таблиц каталога/измерений |
| wal_status | text | Статус WAL: active: в пределах max_wal_size, не очищается; reserved: превышает max_wal_size, но защищен логическим слотом или потоком, не очищается; unprotected: вышел за пределы защиты слота и потока, будет очищен на следующей контрольной точке; removed: уже очищен |
| safe_wal_size | bigint | Безопасный максимальный предел размера WAL; WAL, превышающий этот размер, может быть очищен |
| loops | bigint | Количество циклов выполнения |
| tuples | bigint | Количество обработанных строк |
| total_slip_ms | bigint | Суммарное время ожидания (задержка планирования задачи) |
| last_slip_ms | bigint | Длительность последнего ожидания |
| last_lag_ms | bigint | Задержка обработки потока (разница во времени между последней обработанной меткой и последней доступной меткой) |
| total_duration_ms | bigint | Общее время выполнения |
| last_duration_ms | bigint | Длительность последнего выполнения |
| last_run | timestamp with time zone | Время последнего выполнения |
| held_until | timestamp with time zone | Время следующего запланированного выполнения (при ошибке — ожидание одной минуты перед повторной попыткой) |
| has_error | boolean | Произошла ли ошибка |
| error_message | text | Сообщение об ошибке |
| error_detail | text | Детали ошибки |
| error_hint | text | Подсказка по ошибке |
| error_context | text | Контекст ошибки |
| slot_id | integer | Слот рабочего процесса Domino, используемый в данный момент |
| strategy | text | Стратегия планирования |
| summary | text | Краткое описание стратегии |
Примеры запросов
-- Check all streams with errors
SELECT stream_name, error_message
FROM domino.stream_info
WHERE has_error;
-- Check streams with large lag
SELECT stream_name, pg_size_pretty(lag_size) AS lag
FROM domino.stream_info
WHERE lag_size > 64*1024*1024;
| Функция | Описание |
|---|---|
domino.start_all() |
Запускает все компоненты. После создания плагина компоненты v2 не запускаются автоматически при перезагрузке; требуется ручной запуск. |
domino.stop_all() |
Останавливает все компоненты. |
domino.start_decoder() |
Запускает декодер. |
domino.stop_decoder() |
Останавливает декодер. |
domino.start_ticker() |
Запускает тикер. |
domino.stop_ticker() |
Останавливает тикер. |
domino.pause_ticker() |
Приостанавливает тикер. |
domino.resume_ticker() |
Возобновляет тикер. |
domino.reset_ticker() |
Сбрасывает тикер. |
domino.wait_next_tick() |
Ожидает следующий тик. |
Используется в основном для устранения неполадок.
| Функция | Описание |
|---|---|
domino.wait_for_decoder() |
Ожидает, пока декодер догонит текущее состояние. |
domino.wait_for_stream() |
Ожидает, пока поток догонит текущее состояние. |
domino.pause_stream(oid) |
Приостанавливает конкретный поток. |
domino.pause_all_streams() |
Приостанавливает все потоки. |
domino.resume_stream(oid) |
Возобновляет конкретный поток. |
domino.resume_all_streams() |
Возобновляет все потоки. |
domino.rotate_tlog() |
Переключает файл TLog (сегмент). |