暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

fdw_server突然真香,800G的LOB表导入PostgreSQL不到1.5小时

前言

大家好,昨天测试了ora2pg最新版的fdw_server参数,疏忽遗漏了一点,今天一个朋友给我指点了一下,瞬间疑惑顿开。Gilles Darold
的测试结果是对的。经过现在的测试,23GB带LOB的表导入到PostgreSQL不到2分钟,性能大大的提升。

fdw_server如何发挥性能

“fdw_server之所以慢,是因为你的并发不够高。”朋友说。

于是我就根据他的说法在测试了一下,这次我分别把并发参数进行了调整。ORACLE_COPIES
JOBS
,我分别设置为8,32,64,128,256个并行进行处理。

经过新一轮的测试,这次可以明显发现差距了。当ORACLE_COPIES
JOBS
设置为128的时候,也就是采用128个并行的情况,每秒插入能达到62990 rows/sec。所以23GB,600多万的数据,只需要1分40秒就完成了插入。

而如果我们不使用fdw_server
,采用以前的方法,不管你的并行开到多少都受到perl语言的限制,没办法加快速度。因为这涉及到一个perl优化入库的过程,还有像datax这样的jdbc的连接软件,其实分片并行这块也做的不错,但是仍然快不起来,因为它在clob入库的过程就慢。所以也达不到fdw_server
这样的性能。

最后给大家看一下,我设置成256个并行,操作系统层面iotop的一个情况。这里为什么单独拿出来说,从128上升到256个并行进程后,速度并没有提升,反而是下降了。

从操作系统层面上看,一大批进程在插入,而有的进程插入的时候后面带了一个waiting
。从系统的pg_stat_activity上可以看到,是有Lock方面的等待。

查看pg_locks视图,大多数是ExclusiveLock和RowExclusiveLock的等待。

并发开高了就会产生锁上面的开销,也不会提升速度。开到一个合理的并发值才行。

后记

最后找了一个862GB带2个CLOB的表做了一下测试,开启128个并发。

SQL>  select OWNER,SEGMENT_NAME from dba_lobs where TABLE_NAME='SALE_INT_EXTSYS_LOG_1001'  and owner='XSEC';OWNER                          SEGMENT_NAME------------------------------ ------------------------------XSEC                           SYS_LOB0000076880C00004$$XSEC                           SYS_LOB0000076880C00005$$SQL> select sum(bytes/1024/1024/1024from dba_segments where segment_name in ('SALE_INT_EXTSYS_LOG_1001','SYS_LOB0000076880C00004$$','SYS_LOB0000076880C00005$$'and owner='XSEC';SUM(BYTES/1024/1024/1024)-------------------------               862.637512               SQL> desc XSEC.SALE_INT_EXTSYS_LOG_1001 Name                                      Null?    Type ----------------------------------------- -------- ---------------------------- LOG_ID                                             NUMBER(12) SYSTEM_NAME                                        VARCHAR2(50) SERVICE_CODE                                       VARCHAR2(50) REQUEST                                            CLOB RESPONSE                                           CLOB REQ_TIME                                           DATE RESP_TIME                                          DATE CREATE_TIME                                        DATE LATN_ID                                            NUMBER(5) KEY_WORD                                           VARCHAR2(100) OUT_KEY_WORD                                       VARCHAR2(200) SYSTEM_USER_ID                                     NUMBER(12)               
复制

开始时间15点05分。

[2021-07-07 15:05:23] Ora2Pg version: 22.1[2021-07-07 15:05:23] Export type: COPY
复制

结束时间16点25分。速度58410rows sec。

[2021-07-07 16:25:13] Total time to export data from 1 tables (24 partitions, 0 sub-partitions) and 279202812 total rows: 4780 wallclock secs ( 0.94 usr  1.82 sys +  1.63 cusr  3.07 csys =  7.46 CPU)[2021-07-07 16:25:13] Speed average: 58410.63 rows/sec
复制

1个小时20分钟导出800GB,这还要啥自行车,fdw_server,真香。为我昨天草率的测试结论道歉。


文章转载自励志成为postgresql大神,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论