diff --git a/content/zh/post/wllove/title/title.png b/content/zh/post/wllove/title/title.png deleted file mode 100644 index 86a420b92fb8289658d807d49f137b6d13862f6d..0000000000000000000000000000000000000000 Binary files a/content/zh/post/wllove/title/title.png and /dev/null differ diff --git "a/content/zh/post/wllove/\345\255\230\345\202\250\350\277\207\347\250\213\346\224\257\346\214\201\350\207\252\346\262\273\344\272\213\345\212\241.md" "b/content/zh/post/wllove/\345\255\230\345\202\250\350\277\207\347\250\213\346\224\257\346\214\201\350\207\252\346\262\273\344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..68c24aa4606162e3cefd7f7a8d2ca437f3114f21 --- /dev/null +++ "b/content/zh/post/wllove/\345\255\230\345\202\250\350\277\207\347\250\213\346\224\257\346\214\201\350\207\252\346\262\273\344\272\213\345\212\241.md" @@ -0,0 +1,50 @@ ++++ +title = "存储过程支持自治事务" +date = "2022-09-30" +tags = ["openGauss3.0.0"] +archives = "2020-09" +author = "wllove" +summary = "OpenGauss3.0.0" +img = "/zh/post/wllove/title/title.png" +times = "16:10" ++++ +自治事务可以在存储过程中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建存储过程语法相同,示例如下。 + +--建表 +``` +create table t2(a int, b int); insert into t2 values(1,2); select * from t2; +``` +--创建包含自治事务的存储过程 +``` +CREATE OR REPLACE PROCEDURE autonomous_4(a int, b int) +AS +DECLARE + num3 int := a; + num4 int := b; +PRAGMA AUTONOMOUS_TRANSACTION; +BEGIN +insert into t2 values(num3, num4); +END; +/ +``` +--创建调用自治事务存储过程的普通存储过程 +``` +CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) +AS +DECLARE +BEGIN +insert into t2 values(666, 666); +autonomous_4(a,b); +rollback; +END; +/ +``` +--调用普通存储过程 +``` +select autonomous_5(11,22); +``` +--查看表结果 +``` +select * from t2 order by a; +``` +上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 diff --git "a/content/zh/post/wllove/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" "b/content/zh/post/wllove/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" deleted file mode 100644 index 8231dee8cfe0ae4d74b3a11a03830ed74173f6bc..0000000000000000000000000000000000000000 --- "a/content/zh/post/wllove/\351\200\273\350\276\221\350\247\243\347\240\201\346\246\202\350\277\260.md" +++ /dev/null @@ -1,54 +0,0 @@ -+++ -title = "使用gs_dump导出数据库" -date = "2022-9-23" -tags = ["OpenGauss3.0.0"] -archives = "2020-09" -author = "wllove" -summary = "OpenGauss3.0.0" -img = "/zh/post/wllove/title/title.png" -times = "17:10" -+++ - -## 功能描述 - -openGauss对数据复制能力的支持情况为:
支持通过数据迁移工具定期向异构数据库(如Oracle等)进行数据同步,不具备实时数据复制能力。不足以支撑与异构数据库间并网运行实时数据同步的诉求。
openGauss提供了逻辑解码功能,通过反解xlog的方式生成逻辑日志。目标数据库解析逻辑日志以实时进行数据复制。逻辑复制降低了对目标数据库的形态限制,支持异构数据库、同构异形数据库对数据的同步,支持目标库进行数据同步期间的数据可读写,数据同步时延低。
逻辑复制由两部分组成:逻辑解码和数据复制。逻辑解码会输出以事务为单位组织的逻辑日志。业务或数据库中间件将会对逻辑日志进行解析并最终实现数据复制。openGauss当前只提供逻辑解码功能,因此本章节只涉及逻辑解码的说明。
逻辑解码为逻辑复制提供事务解码的基础能力,openGauss使用SQL函数接口进行逻辑解码。此方法调用方便,不需使用工具,对接外部工具接口也比较清晰,不需要额外适配。
由于逻辑日志是以事务为单位的,在事务提交后才能输出,且逻辑解码是由用户驱动的;因此为了防止事务开始时的xlog被系统回收,或所需的事务信息被VACUUM回收,openGauss新增了逻辑复制槽,用于阻塞xlog的回收。
一个逻辑复制槽表示一个更改流,这些更改可以在其它数据库中以它们在原数据库上产生的顺序被重播。逻辑复制槽,由每个逻辑日志的获取者维护一个。 - -## 注意事项 - -- 不支持DDL语句解码,在执行特定的DDL语句(例如普通表truncate或分区表exchange)时,可能造成解码数据丢失。 -- 不支持列存、数据页复制的解码。 -- 不支持级联备机进行逻辑解码。 -- 当执行DDL语句(如alter table)后,该DDL语句前尚未解码的物理日志可能会丢失。 -- 单条元组大小不超过1GB,考虑解码结果可能大于插入数据,因此建议单条元组大小不超过500MB。 -- openGauss支持解码的数据类型为:INTEGER、BIGINT、SMALLINT、TINYINT、SERIAL、SMALLSERIAL、BIGSERIAL、FLOAT、DOUBLE PRECISION、DATE、TIME[WITHOUT TIME ZONE]、TIMESTAMP[WITHOUT TIME ZONE]、CHAR(n)、VARCHAR(n)、TEXT。 -- 如果需要ssl连接需要保证前置设置GUC参数ssl=on。 -- 逻辑复制槽名称必须小于64个字符,且只包含小写字母、数字或者下划线中的一种或几种。 -- 当前逻辑复制不支持MOT特性。 -- 当逻辑复制槽所在数据库被删除后,这些复制槽变为不可用状态,需要用户手动删除。 -- 仅支持utf-8字符集。 -- 对多库的解码需要分别在库内创建流复制槽并开始解码,每个库的解码都需要单独扫一遍日志。 -- 不支持强起,强起后需要重新全量导出数据。 -- 备机解码时,switchover和failover时可能出现解码数据变多,需用户手动过滤。Qurem协议下,switchover和failover选择升主的备机,需要与当前主机日志同步。 -- 不允许主备,多个备机同时使用同一个复制槽解码,否则会产生数据不一致。 -- 只支持主机创建删除复制槽。 -- 数据库故障重启或逻辑复制进程重启后,解码数据存在重复,用户需自己过滤。 -- 计算机内核故障后,解码存在乱码,需手动或自动过滤。 -- 当前备机逻辑解码,不支持开启极致RTO。 -- 请确保在创建逻辑复制槽过程中长事务未启动,启动长事务会阻塞逻辑复制槽的创建。 -- 不支持interval partition表复制。 -- 不支持全局临时表。 -- 在事务中执行DDL语句后,该DDL语句与之后的语句不会被解码。 -- 如需进行备机解码,需在对应主机上设置guc参数enable_slot_log = on。 -- 禁止在使用逻辑复制槽时在其他节点对该复制槽进行操作,删除复制槽进行操作的操作需在该复制槽停止解码后执行。 - -## 性能 - -在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_changes时: - -- 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5 MB/s 。 -- 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s 。 -- 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s 。 -- 单次解码数据量再增大,解码性能无明显提升。 - -如果采用pg_logical_slot_peek_changes + pg_replication_slot_advance 方式,解码性能相比采用pg_logical_slot_get_changes时要下降30%~50%。 -