Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
mx_stream хранит базовую информацию о потоках.mx_stream_slot поддерживает сопоставление между потоками и слотами, а также другие метаданные.pg_class добавлены два поля: relisstream указывает, является ли таблица потоком. relhasdownstream указывает, существуют ли потоки downstream.mx_max_number_streams ограничивает максимальное количество потоков значением 8. Изменение этого параметра требует перезапуска базы данных. max_replication_slots управляет количеством репликационных слотов на каждом сегментном узле. Каждый поток использует один репликационный слот. log_min_messages для логов, связанных с потоками, по умолчанию установлен в DEBUG4. Это значение можно изменить на уровне сессии. При отладке проблем установите в LOG. mx_stream_print_plan и mx_stream_print_parsed_plan: при включении выводятся дополнительные детали плана выполнения при создании потока. Полезно для диагностики производительности. Можно включать или отключать на уровне сессии. client_min_messages в notice, чтобы включить более подробные логи выполнения при создании потоков. mx_stream_debug_print отключен по умолчанию. При включении генерирует обширные отладочные логи. Используйте только временно для разработки или анализа сбоев. mx_stream_allow_any_provider отключен по умолчанию. При включении позволяет создавать потоки любого типа. Только для использования разработчиками. mx_stream_allow_dml позволяет выполнять прямые DML-операции над данными потока. Это опасная настройка; изменяйте с осторожностью. mx_stream_allow_noindex_join позволяет создавать соединения двойных потоков без индексов. mx_stream_xlog_prefetch_bytes и mx_stream_xlog_prefetch_records: mx_stream_xlog_prefetch_bytes управляет объемом XLOG, сканируемым каждым процессом для каждой таблицы потока (не размером действительных записей лога). mx_stream_xlog_prefetch_records ограничивает количество действительных записей, обрабатываемых за одну партию. mx_stream_xlog_prefetch_bytes в 0 и настраивать mx_stream_xlog_prefetch_records в соответствии с реальными требованиями нагрузки.=# select /*streamoid,*/streamrelid::regclass,dbid,provider,plugin,querytext from mx_stream;
streamoid | streamrelid | dbid | provider | plugin | querytext
-----------+-------------+-------+----------+------------+-----------
23184 | s8 | 19789 | mxstream | simple_one |
23195 | s1 | 19789 | mxstream | domino_agg |
23222 | s61 | 19789 | mxstream | simple_one |
23230 | s62 | 19789 | mxstream | simple_one |
23244 | s51 | 19789 | mxstream | simple_one |
23252 | s52 | 19789 | mxstream | simple_one |
23266 | s3 | 19789 | mxstream | simple_one |
23280 | s4 | 19789 | mxstream | simple_one |
(8 rows)
=# drop stream s8;
DROP STREAM
gpconfig -c max_replication_slots -v 100
gpconfig -c mx_max_number_streams -v 100
Note: A database restart is required after these changes.
Note: Increasing the limit causes the postgres process to allocate additional shared memory; therefore, setting it too high is not recommended.
=# select relname,relkind,relisstream,relhasdownstream from pg_class where relname ='t8';
relname | relkind | relisstream | relhasdownstream
---------+---------+-------------+------------------
t8 | r | f | t
(1 row)
=# select relname,relkind,relisstream,relhasdownstream from pg_class where relname ='s8';
relname | relkind | relisstream | relhasdownstream
---------+---------+-------------+------------------
s8 | r | t | f
(1 row)
Просмотр определения потока
psql:\dS+ s8
TABLE "public.s1"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+---------+--------------+-------------
id | integer | | | | plain | |
v1 | integer | | | | plain | |
v2 | integer | | | | plain | |
STREAM definition:
SELECT t1.id,
t1.v1,
t2.v2
FROM STREAMING t1
JOIN STREAMING t2 ON t1.id = t2.id;
DISTRIBUTED BY: (id)
Access method: heap
- С использованием других SQL-клиентов:
SELECT pg_catalog.pg_get_viewdef('s1');
pg_get_viewdef
-----------------------------------------------
SELECT t1.id, +
t1.v1, +
t2.v2 +
FROM (STREAMING t1 +
JOIN STREAMING t2 ON ((t1.id = t2.id)));
cat gpdb-2024-08-26_121305.csv | grep -iE "77748" | grep -iE -A1 "process" | awk -F',' '{print $1"-"$19}' | grep -v '^-' | sed -n '{N;s/\n/\t/p}' | sed 's/processed.*execution took//g' > /tmp/stream1_77748.log
select slot_name,restart_lsn,pg_wal_lsn_diff(pg_current_wal_lsn(),confirmed_flush_lsn)/8/1024 as currentlsn_diff from pg_replication_slots; \watch 1
for i in {20000..20010};
do
PGOPTIONS='-c gp_role=utility' psql -d yonyou_ap -U ap_test -h 127.0.0.1 -p $i -c "select count(*) from pg_replication_slots;";
done
for i in {20000..20010};
do
PGOPTIONS='-c gp_role=utility' psql -d yonyou_ap -U ap_test -h 127.0.0.1 -p $i -c "select pg_drop_replication_slot('stream_slot_27534');";
done
for i in {20000..20010};
do
PGOPTIONS='-c gp_role=utility' psql -d yonyou_ap -U ap_test -h 127.0.0.1 -p $i -c "select count(*) from pg_class where relisstream is true;";
done