GoldenGate抽取进程extract延迟处理

前言

一套GoldenGate环境,已经运行了很多年,一直比较正常,Extract抽取进程基本上没有出现延迟的情况,但这次突然出现抽取延迟,其中一个抽取进程延迟高达50个小时左右。

 

处理过程

1. 当前有两个抽取进程,分别为:E_HXZG、E_SBFSC, 目前出现延迟的是第1个抽取进程。检查该进程的当前状态。

 可以看出,该抽取进程当前正在处理数据,等待了10分钟左右,再次执行send e_hxzg, status命令,发现该进程的处理效率非常低,10分钟左右,才处理了200MB的日志。

2. 检查该抽取进程的配置文件,具体内容如下所示:

 该配置文件,整体上没有问题,但有两个参数,可能对性能有点影响。 getupdatebefores 和 nocompressdeletes,询问现场人员,得知:后续的PUMP进程不会进行filter过滤操作,同样Replicat进程也没有数据统计之类的额外需求。只是单纯的表数据同步。 所以建议屏蔽掉这两个参数,并重启抽取进程。

3. 删除getupdatebefores 和 nocompressdeletes参数后,观察该抽取进程的抽取效率,发现没有太多的改善。

4. 针对该抽取进程,获取pstack和strace信息。

 查看strace的输出,发现每次在read调用时,就卡住好几秒,而write调用就非常快。这应该就是读取时遇到性能问题。

5. 建议收集抽取进程的trace,看看时间都花在哪些位置。
Send <process_name> TRACE </full_path/trace.txt>
等待5分钟
Send <process_name> TRACE off

Send <process_name> TRACE2 </full_path/trace2.txt>
等待5分钟
Send <process_name> TRACE2 off

6. trace日志如下所示。

 可以看出,在抽取hx_zh.gy_zzsfpglxxttb_log这张表时,遭遇了ORA-01555,fetch failed. 然后通过rowid再去fetch数据,最终才fetch成功。 这正好验证了strace命令中为什么每次read时都会卡好几秒。

 

7. 此时, 我们可以在抽取进程的配置文件中添加fetch选项:fetchoptions nousesnapshot ,也即不要通过快照来fetch数据。

8. 添加完该参数后,该抽取进程在两个小时内追平数据。

posted @ 2024-04-18 12:50  石云华  阅读(98)  评论(0编辑  收藏  举报