YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
- MPP 架构
- 镜像分布策略
- 持续聚集
- 滑动窗口
- 全文搜索
- Grafana 监控指标解读
- Prometheus 监控指标解读
- 术语表
-
工具指南
- mxaddmirrors
- mxbackup
- mxbench
- mxdeletesystem
- mxgate
- mxinitstandby
- mxmoveseg
- mxpacklogs
- mxrecover
- mxrestore
- mxshift
- mxstart
- mxstate
- mxstop
- gpconfig
- pgvector
-
数据类型
-
存储引擎
-
执行引擎
-
流计算引擎
-
灾难恢复
-
系统配置参数
- 使用说明(必读)
- 参数目录
- 文件位置参数
- 连接与认证参数
- 客户端连接默认值参数
- 错误报告和日志参数
- 资源消耗参数
- 查询调优参数
- 运行中的统计信息参数
- 自动清理参数
- 数据表参数
- 锁管理参数
- 资源管理参数
- YMatrix 数据库集群参数
- 预写式日志参数
- 复制参数
- PL/JAVA 参数
- 版本和平台兼容性参数
-
索引
-
扩展
SQL 参考
- ABORT
- ALTER_DATABASE
- ALTER_EXTENSION
- ALTER_EXTERNAL_TABLE
- ALTER_FOREIGN_DATA_WRAPPER
- ALTER_FOREIGN_TABLE
- ALTER_FUNCTION
- ALTER_INDEX
- ALTER_RESOURCE_GROUP
- ALTER_RESOURCE_QUEUE
- ALTER_ROLE
- ALTER_RULE
- ALTER_SCHEMA
- ALTER_SEQUENCE
- ALTER_SERVER
- ALTER_TABLE
- ALTER_TABLESPACE
- ALTER_TYPE
- ALTER_USER_MAPPING
- ALTER_VIEW
- ANALYZE
- BEGIN
- CHECKPOINT
- COMMIT
- COPY
- CREATE_DATABASE
- CREATE_EXTENSION
- CREATE_EXTERNAL_TABLE
- CREATE_FOREIGN_DATA_WRAPPER
- CREATE_FOREIGN_TABLE
- CREATE_FUNCTION
- CREATE_INDEX
- CREATE_RESOURCE_GROUP
- CREATE_RESOURCE_QUEUE
- CREATE_ROLE
- CREATE_RULE
- CREATE_SCHEMA
- CREATE_SEGMENT_SET
- CREATE_SEQUENCE
- CREATE_SERVER
- CREATE_STREAM
- CREATE_TABLE
- CREATE_TABLE_AS
- CREATE_TABLESPACE
- CREATE_TYPE
- CREATE_USER_MAPPING
- CREATE_VIEW
- DELETE
- DROP_DATABASE
- DROP_EXTENSION
- DROP_EXTERNAL_TABLE
- DROP_FOREIGN_DATA_WRAPPER
- DROP_FOREIGN_TABLE
- DROP_FUNCTION
- DROP_INDEX
- DROP_RESOURCE_GROUP
- DROP_RESOURCE_QUEUE
- DROP_ROLE
- DROP_RULE
- DROP_SCHEMA
- DROP_SEGMENT_SET
- DROP_SEQUENCE
- DROP_SERVER
- DROP_TABLE
- DROP_TABLESPACE
- DROP_TYPE
- DROP_USER_MAPPING
- DROP_VIEW
- END
- EXPLAIN
- GRANT
- INSERT
- LOAD
- LOCK
- REINDEX
- RELEASE_SAVEPOINT
- RESET
- REVOKE
- ROLLBACK_TO_SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT INTO
- SET ROLE
- SET TRANSACTION
- SET
- SHOW
- START TRANSACTION
- TRUNCATE
- UPDATE
- VACUUM
常见问题(FAQ)
维护
内部管理视图
mx_stream
存储流的基本信息mx_stream_info
保存流和slot的对应关系及其他信息- pg_class 新增两个字段,relisstream 标识是否是流表,relhasdownstream 标识是否存在下游流表
配置产生管理
mx_max_number_streams
最⼤允许创建 8 个 stream,修改需要重启数据库。max_replication_slots
控制 segment 节点上的复制槽的数量,一个流对应一个复制槽。mx_stream_message_level
打印额外的 stream 相关⽇志,默认为 DEBUG4,可以在会话级别修改,当开发者调试故障时可以设为 LOG。mxstream.debug_plan
和mxstream.debug_plan_verbose
若打开,则在创建流时,可以打印出额外的执⾏计划信息,可以作为性能问题排查的依据,可以在会话级别打开或关闭。- set
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)
-
查看流表定义
- 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)));
-
通过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
- 通过segment节点,查阅每个流表复制槽的处理进度
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
- 流表检查(各个segment一致)
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