400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
mx_stream
存储流的基本信息mx_stream_info
保存流和slot的对应关系及其他信息mx_max_number_streams
最⼤允许创建 8 个 stream,修改需要重启数据库。 max_replication_slots
控制 segment 节点上的复制槽的数量,一个流对应一个复制槽。mx_stream_message_level
打印额外的 stream 相关⽇志,默认为 DEBUG4,可以在会话级别修改,当开发者调试故障时可以设为 LOG。 mxstream.debug_plan
和 mxstream.debug_plan_verbose
若打开,则在创建流时,可以打印出额外的执⾏计划信息,可以作为性能问题排查的依据,可以在会话级别打开或关闭。 mx_stream_message_level
to notice,打印更详细的建流执行日志输出mxstream.debug_tuple_decoding
默认关闭,打开会在⽇志⾥打印巨量调试信息,仅作为开发和故障分析临时使⽤。mxstream.simple_one.skip_check
默认关闭,打开则允许创建任何流,仅限开发者使⽤。 mx_stream_internal_modify
允许对流里的数据直接进行 DML 操作【危险参数,谨慎调整】mxstream.domino_join_skip_index_check
允许双流创建时不存在索引mxstream.scan_tuples_limit
和 mxstream.scan_xlog_size_limit
、scan_xlog_size_limit
是控制每个流表进程扫过的 xlog 日志,不是有效日志大小;scan_tuples_limit
是控制流表单次处理的有效记录数;scan_xlog_size_limit
设置为 0,scan_tuples_limit
根据实际需要进行控制流的单次处理大小.=# 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
注:调整完上述操作后需要重启数据库
注:增加上限会使 postgres 进程申请额外的共享内存,因此不是越大越好
=# 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)
查看流表定义
\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
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)));
通过master节点日志,查阅每个流表的数据处理效率
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