diff --git a/content/zh/docs/Developerguide/PG_GTT_ATTACHED_PIDS.md b/content/zh/docs/Developerguide/PG_GTT_ATTACHED_PIDS.md index 12e134c5435255398833b5e5203731820372acaf..e3b0e83cc433a7400d2be57b53ceff4dd43c446e 100644 --- a/content/zh/docs/Developerguide/PG_GTT_ATTACHED_PIDS.md +++ b/content/zh/docs/Developerguide/PG_GTT_ATTACHED_PIDS.md @@ -1,10 +1,10 @@ -# PG\_GTT_ATTACHED_PIDS - -PG\_GTT_ATTACHED_PIDS视图查看哪些会话正在使用全局临时表,调用pg_get_attached_pid函数。 - -**表 1** PG\_GTT_ATTACHED_PIDS字段 - - +# PG\_GTT\_ATTACHED\_PIDS + +PG\_GTT\_ATTACHED\_PIDS视图查看哪些会话正在使用全局临时表,调用pg\_get\_attached\_pid函数。 + +**表 1** PG\_GTT\_ATTACHED\_PIDS字段 + + - - - - - - - -

名称

类型

@@ -24,24 +24,23 @@ PG\_GTT_ATTACHED_PIDS视图查看哪些会话正在使用全局临时表,调

name

全局临时表名。

+

全局临时表名称。

relid

+

relid

oid

+

oid

全局临时表oid。

+

全局临时表的oid。

pids

+

pids

bigint[]

+

bigint[]

线程pid列表。

+

线程pid列表。

- - + + diff --git a/content/zh/docs/Developerguide/PG_GTT_RELSTATS.md b/content/zh/docs/Developerguide/PG_GTT_RELSTATS.md index 3ae94e0dad23618c107a664a6357fe4a586535f8..cf4b2df445d6a44fc297057c843b07754988e109 100644 --- a/content/zh/docs/Developerguide/PG_GTT_RELSTATS.md +++ b/content/zh/docs/Developerguide/PG_GTT_RELSTATS.md @@ -1,11 +1,10 @@ -# PG\_GTT_RELSTATS - -PG\_GTT_RELSTATS视图查看当前会话所有全局临时表基本信息,调用pg_get_gtt_relstats函数。 - -**表 1** PG\_GTT_RELSTATS字段 - - - +# PG\_GTT\_RELSTATS + +PG\_GTT\_RELSTATS视图查看当前会话所有全局临时表基本信息,调用pg\_get\_gtt\_relstats函数。 + +**表 1** PG\_GTT\_RELSTATS字段 + + - - - - - - - - - - - - - - - - - - -

名称

类型

@@ -25,52 +24,51 @@ PG\_GTT_RELSTATS视图查看当前会话所有全局临时表基本信息,调

name

全局临时表名。

+

全局临时表名称。

relfilenode

+

relfilenode

oid

+

oid

relfilenode。

+

文件对象的ID。

relpages

+

relpages

integer

+

integer

全局临时表的磁盘页面数。

+

全局临时表的磁盘页面数。

reltuples

+

reltuples

real

+

real

全局临时表的记录数。

+

全局临时表的记录数。

relallvisible

+

relallvisible

integer

+

integer

被标识为全可见的页面数。

+

被标识为全可见的页面数。

relfrozenxid

+

relfrozenxid

xid

+

xid

该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。

+

该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。

relminmxid

+

relminmxid

xid

暂时没用。

+

预留接口,暂未启用。

- - + + diff --git a/content/zh/docs/Developerguide/PG_GTT_STATS.md b/content/zh/docs/Developerguide/PG_GTT_STATS.md index af977ef5cefeb13fee2011fc689a66b7f1a79944..db4ca3033fd4e35c049b518ae25efd48868248b0 100644 --- a/content/zh/docs/Developerguide/PG_GTT_STATS.md +++ b/content/zh/docs/Developerguide/PG_GTT_STATS.md @@ -1,11 +1,10 @@ -# PG\_GTT_STATS - -PG\_GTT_STATS视图查看当前会话所有全局临时表单列统计信息,调用pg_get_gtt_statistics函数。 - -**表 1** PG\_GTT_STATS字段 - - - +# PG\_GTT\_STATS + +PG\_GTT\_STATS视图查看当前会话所有全局临时表单列统计信息,调用pg\_get\_gtt\_statistics函数。 + +**表 1** PG\_GTT\_STATS字段 + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

类型

@@ -25,94 +24,93 @@ PG\_GTT_STATS视图查看当前会话所有全局临时表单列统计信息,

name

全局临时表名。

+

全局临时表名称。

attname

+

attname

name

+

name

属性名。

+

属性名称。

inherited

+

inherited

boolean

+

boolean

是否统计有继承关系的对象。

+

是否统计有继承关系的对象。

null_frac

+

null_frac

real

+

real

该字段中为NULL的记录的比率。

+

该字段中为NULL的记录的比率。

avg_width

+

avg_width

integer

+

integer

非NULL记录的平均存储宽度,以字节计。

+

非NULL记录的平均存储宽度,以字节计算。

n_distinct

+

n_distinct

real

+

real

标识全局统计信息中字段里唯一的非NULL数据值的数目。

+

标识全局统计信息中字段里唯一的非NULL数据值的数目。

most_common_vals

+

most_common_vals

text[]

+

text[]

高频值列表,按照出现的频率排序。

+

高频值列表,按照出现的频率排序。

most_common_freqs

+

most_common_freqs

real[]

+

real[]

高频值的频率。

+

高频值的频率。

histogram_bounds

+

histogram_bounds

text[]

+

text[]

等频直方图描述列中的数据分布(不包含高频值)。

+

等频直方图描述列中的数据分布(不包含高频值)。

correlation

+

correlation

real

+

real

相关系数。

+

相关系数。

most_common_elems

+

most_common_elems

text[]

+

text[]

类型高频值列表,用于数组类型或一些其他类型。

+

类型高频值列表,用于数组类型或一些其他类型。

most_common_elem_freqs

+

most_common_elem_freqs

real[]

+

real[]

类型高频值的频率。

+

类型高频值的频率。

elem_count_histogram

+

elem_count_histogram

real[]

+

real[]

数组类型直方图。

+

数组类型直方图。

- - + + diff --git "a/content/zh/docs/Developerguide/\344\275\277\347\224\250SQL\345\207\275\346\225\260\346\216\245\345\217\243\350\277\233\350\241\214\351\200\273\350\276\221\350\247\243\347\240\201.md" "b/content/zh/docs/Developerguide/\344\275\277\347\224\250SQL\345\207\275\346\225\260\346\216\245\345\217\243\350\277\233\350\241\214\351\200\273\350\276\221\350\247\243\347\240\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..60b66bf6b67859acad70a03ac18dd6e1fb76f4fd --- /dev/null +++ "b/content/zh/docs/Developerguide/\344\275\277\347\224\250SQL\345\207\275\346\225\260\346\216\245\345\217\243\350\277\233\350\241\214\351\200\273\350\276\221\350\247\243\347\240\201.md" @@ -0,0 +1,78 @@ +# 使用SQL函数接口进行逻辑解码 + +openGauss可以通过调用SQL函数,进行创建、删除、推进逻辑复制槽,获取解码后的事务日志。 + +## 前提条件 + +- 逻辑日志目前从主机节点中抽取,默认关闭SSL连接,如果进行逻辑复制,需要先上配置GUC参数[ssl](zh-cn_topic_0242371486.md#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s8c4647db116f44c4b9ce3dceee3d6ffa)=on。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >为避免安全风险,请保证启用SSL连接。 + + +- 设置GUC参数[wal\_level](zh-cn_topic_0242371497.md#zh-cn_topic_0237124707_zh-cn_topic_0059778393_s2c76f5957066407a959191148f2c780f)=logical。 +- 设置GUC参数[max\_replication\_slots](zh-cn_topic_0242371502.md#section7322161612568)\>每个节点所需的(物理流复制槽数+逻辑复制槽数)。 + + 物理流复制槽提供了一种自动化的方法来确保主节点在所有备节点或从备节点收到xlog之前,xlog不会被移除。也就是说物理流复制槽用于支撑集群HA。集群所需要的物理流复制槽数为:备节点加从备的和与主节点之间的比例。例如,假设集群的高可用方案为1主、1备、1从备,则所需物理流复制槽数为2。又例如,假设集群的高可用方案为1主3备,则所需物理流复制槽数为3。 + + 关于逻辑复制槽数,请按如下规则考虑。 + + - 一个逻辑复制槽只能解码一个Database的修改,如果需要解码多个Database,则需要创建多个逻辑复制槽。 + - 如果需要多路逻辑复制同步给多个目标数据库,在源端数据库需要创建多个逻辑复制槽,每个逻辑复制槽对应一条逻辑复制链路。 + +- 仅限数据库管理员和拥有REPLICATION权限的用户进行操作。 + +## 操作步骤 + +1. 以集群安装用户登录openGauss集群主节点。 +2. 使用如下命令通过连接默认数据库postgres。 + + ``` + gsql -d postgres -p 16000 -r + ``` + + 其中,16000为数据库端口号,用户可根据实际情况替换。 + +3. 创建名称为slot1的逻辑复制槽。 + + ``` + postgres=# SELECT * FROM pg_create_logical_replication_slot('slot1', 'mppdb_decoding'); + slotname | xlog_position + ----------+--------------- + slot1 | 0/601C150 + (1 row) + ``` + +4. 在数据库中创建表t,并向表t中插入数据。 + + ``` + postgres=# CREATE TABLE t(a int PRIMARY KEY, b int); + postgres=# INSERT INTO t VALUES(3,3); + ``` + +5. 读取复制槽slot1解码结果,解码条数为4096。 + + ``` + postgres=# SELECT * FROM pg_logical_slot_peek_changes('slot1', NULL, 4096); + location | xid | data + -----------+-------+------------------------------------------------------------------------------------------------------------------------------------------------- + ------------------------------------------- + 0/601C188 | 1010023 | BEGIN 1010023 + 0/601ED60 | 1010023 | COMMIT 1010023 CSN 1010022 + 0/601ED60 | 1010024 | BEGIN 1010024 + 0/601ED60 | 1010024 | {"table_name":"public.t","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]} + 0/601EED8 | 1010024 | COMMIT 1010024 CSN 1010023 + (5 rows) + ``` + +6. 删除逻辑复制槽slot1。 + + ``` + postgres=# SELECT * FROM pg_drop_replication_slot('slot1'); + pg_drop_replication_slot + -------------------------- + + (1 row) + ``` + + diff --git "a/content/zh/docs/Developerguide/\344\275\277\347\224\250\351\200\273\350\276\221\345\244\215\345\210\266\345\267\245\345\205\267\345\244\215\345\210\266\346\225\260\346\215\256.md" "b/content/zh/docs/Developerguide/\344\275\277\347\224\250\351\200\273\350\276\221\345\244\215\345\210\266\345\267\245\345\205\267\345\244\215\345\210\266\346\225\260\346\215\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..cb81b5ebf162867a9c899dcfc288f5c7e9e6f710 --- /dev/null +++ "b/content/zh/docs/Developerguide/\344\275\277\347\224\250\351\200\273\350\276\221\345\244\215\345\210\266\345\267\245\345\205\267\345\244\215\345\210\266\346\225\260\346\215\256.md" @@ -0,0 +1,4 @@ +# 使用逻辑复制工具复制数据 + +目前支持GaussDB逻辑复制的工具有SDR和DRS。复制工具从GaussDB抽取逻辑日志后到对端数据库回放。 + diff --git "a/content/zh/docs/Developerguide/\351\200\273\350\276\221\345\244\215\345\210\266.md" "b/content/zh/docs/Developerguide/\351\200\273\350\276\221\345\244\215\345\210\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..63c3fd4e500a0ae3396d3ecfd7e3890b42f8d7ea --- /dev/null +++ "b/content/zh/docs/Developerguide/\351\200\273\350\276\221\345\244\215\345\210\266.md" @@ -0,0 +1,7 @@ +# 逻辑复制 + +- **[逻辑解码](逻辑解码.md)** + +- **[使用逻辑复制工具复制数据](使用逻辑复制工具复制数据.md)** + + diff --git "a/content/zh/docs/Developerguide/\351\200\273\350\276\221\350\247\243\347\240\201.md" "b/content/zh/docs/Developerguide/\351\200\273\350\276\221\350\247\243\347\240\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..25f2edb4efb5630d7994912a9247d9997f1dac3b --- /dev/null +++ "b/content/zh/docs/Developerguide/\351\200\273\350\276\221\350\247\243\347\240\201.md" @@ -0,0 +1,7 @@ +# 逻辑解码 + +- **[逻辑解码概述](逻辑解码概述.md)** + +- **[使用SQL函数接口进行逻辑解码](使用SQL函数接口进行逻辑解码.md)** + + diff --git "a/content/zh/docs/Developerguide/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" "b/content/zh/docs/Developerguide/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..a75d6d043056191932f7412093fb1bcfde095ba2 --- /dev/null +++ "b/content/zh/docs/Developerguide/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" @@ -0,0 +1,33 @@ +# 逻辑解码概述 + +## 功能描述 + +openGauss对数据复制能力的支持情况为: + +支持通过数据迁移工具定期向异构数据库(如Oracle等)进行数据同步,不具备实时数据复制能力。不足以支撑与异构数据库间并网运行实时数据同步的诉求。 + +openGauss提供了逻辑解码功能,通过反解xlog的方式生成逻辑日志。目标数据库解析逻辑日志以实时进行数据复制。具体如[图1](#zh-cn_topic_0237121452_fig65787201989)所示。逻辑复制降低了对目标数据库的形态限制,支持异构数据库、同构异形数据库对数据的同步,支持目标库进行数据同步期间的数据可读写,数据同步时延低。 + +**图 1** 逻辑复制 +![](figures/逻辑复制.png "逻辑复制") + +逻辑复制由两部分组成:逻辑解码和数据复制。逻辑解码会输出以事务为单位组织的逻辑日志。业务或数据库中间件将会对逻辑日志进行解析并最终实现数据复制。openGauss当前只提供逻辑解码功能,因此本章节只涉及逻辑解码的说明。 + +逻辑解码为逻辑复制提供事务解码的基础能力,openGauss使用SQL函数接口进行逻辑解码。此方法调用方便,不需使用工具,对接外部工具接口也比较清晰,不需要额外适配。 + +由于逻辑日志是以事务为单位的,在事务提交后才能输出,且逻辑解码是由用户驱动的;因此为了防止事务开始时的xlog被系统回收,或所需的事务信息被VACUUM回收,openGauss新增了逻辑复制槽,用于阻塞xlog的回收。 + +一个逻辑复制槽表示一个更改流,这些更改可以在其它集群上以它们在原集群上产生的顺序被重播。逻辑复制槽,由每个逻辑日志的获取者维护一个。 + +## 注意事项 + +- 不支持DDL语句解码。 +- 不支持列存、数据页复制的解码。 +- 当执行DDL语句(如alter table)后,该DDL语句前尚未解码的物理日志可能会丢失。 +- 使用逻辑解码功能时,禁止进行集群在线扩容。 +- 单条元组大小不超过1GB,考虑解码结果可能大于插入数据,因此建议单条元组大小不超过500MB。 +- 不支持压缩表的DML语句解码。 +- openGauss支持解码的数据类型为:INTEGER、BIGINT、SMALLILNT、TINYINT、SERIAL、SMALLSERIAL、BIGSERIAL、FLOAT、DOUBLE PRECISION、DATE、TIME\[WITHOUT TIME ZONE\]、TIMESTAMP\[WITHOUT TIME ZONE\]、CHAR\(n\)、VARCHAR\(n\)、TEXT。 +- 目前默认不支持ssl连接,如果需要ssl连接需要设置guc参数ssl=on。 +- 如果使用JDBC创建逻辑复制槽,则逻辑复制槽名称必须小于64个字符,以字母或下划线开头,且只包含字母、数字或者下划线中的一种或几种。 + diff --git a/content/zh/menu/index.md b/content/zh/menu/index.md index e0e19870d37c6e1e79921a11280c9442d073421a..d6b1c47069657393c14a370ded84cc3072cf9c87 100644 --- a/content/zh/menu/index.md +++ b/content/zh/menu/index.md @@ -1232,6 +1232,11 @@ headless: true - [SNAPSHOT.SNAPSHOT]({{< relref "./docs/Developerguide/SNAPSHOT-SNAPSHOT.md" >}}) - [SNAPSHOT.TABLES\_SNAP\_TIMESTAMP]({{< relref "./docs/Developerguide/SNAPSHOT-TABLES_SNAP_TIMESTAMP.md" >}}) - [WDR Snapshot 数据表]({{< relref "./docs/Developerguide/WDR-Snapshot-数据表.md" >}}) + - [逻辑复制]({{< relref "./docs/Developerguide/逻辑复制.md" >}}) + - [逻辑解码]({{< relref "./docs/Developerguide/逻辑解码.md" >}}) + - [逻辑解码概述]({{< relref "./docs/Developerguide/逻辑解码概述.md" >}}) + - [使用SQL函数接口进行逻辑解码]({{< relref "./docs/Developerguide/使用SQL函数接口进行逻辑解码.md" >}}) + - [使用逻辑复制工具复制数据]({{< relref "./docs/Developerguide/使用逻辑复制工具复制数据.md" >}}) - [GUC参数说明]({{< relref "./docs/Developerguide/GUC参数说明.md" >}}) - [GUC使用说明]({{< relref "./docs/Developerguide/GUC使用说明.md" >}}) - [文件位置]({{< relref "./docs/Developerguide/文件位置.md" >}})