您的位置:首页 > 产品设计 > UI/UE

OGG由于GGS处理SEQUENCE方式导致Ext延时_NOAUTOMATICSEQUENCEFLUSH处理

2016-05-11 15:12 549 查看

OGG Extlc延迟-由于GGS处理SEQUENCE方式导致延时_NOAUTOMATICSEQUENCEFLUSH

from:http://blog.sina.com.cn/s/blog_4d22b9720102v3xr.html

(2014-10-30 14:06:01)

我们一直使用GGS作为数据库容灾的工具,配置上海本地以及北京异地的数据库容灾系统,采用的级联复制模式,即:SH(A)àSHLocal(B)àBJ(C).

之前使用的GGS的版本是10.4.0.19版本,每次在上海生产库上执行的DDL,都是特别慢,需要的时间特别久(这需要的时间无法忍受)才能传至北京的容灾数据库,已经影响到容灾环境正常运转。多次咨询OracleMetalink的工程师,都没有结果,他们给的最后答案是升级到最新版本。由于很多问题,我们并没有升级到最新版本,只是将到北京库的DDL复制取消,当然这给我们DBSQL升级人员带来麻烦,因为每次DDL升级必须北京容灾先升级。

恰好由于现在机房租赁的调整,我们所有设备将迁移到新机房之中,趁机我们更换的GGS的版本,更改为11.2.1.0.1版本。更改之后,我们上海本地GGS容灾的EXTLC进程中增加如下参数(增加到北京库的DDL功能):

extract extlc

setenv (ORACLE_SID="paidit")

setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )

userid ggs, password ggsxxxx

REPORT AT 01:59

numfiles 3000

IGNOREAPPLOPS, GETREPLICATES

--ddl include mapped exclude mapped optype comment exclude mappedobjtype 'SNAPSHOT' exclude mapped instr 'moveTABLESPACE'

--ddloptions nocrossrename,report

--DDL include objname "IPSx.*" exclude objname"IPSx.TIPS_DIS_TRANS_TMP"

DDL include objname IPSx.*,includeobjname AML.*,include objname IPSACCOUNT.*

--DDL include objname AML.*

DDLOPTIONS REMOVECOMMENTS BEFORE

reportrollover at 02:00

--TRANLOGOPTIONS CONVERTUCS2CLOBS

DDLOPTIONS GETREPLICATES,IGNOREAPPLOPS

--TRANLOGOPTIONS EXCLUDEUSER ggs

--THREADOPTIONSMAXCOMMITPROPAGATIONDELAY 3000 IOLATENCY3000

discardfile ./dirrpt/extlc.dsc,append,megabytes 10

--gettruncates

--warnlongtrans 10m, checkintervals 3m

exttrail ./dirdat/lc

--numfiles 3000

dynamicresolution

--obey ./dirprm/seq.txt

--DDLERROR SKIPTRIGGERERROR 10

TRACE ./dirtmp/ext.trc

TRACE2 ./dirtmp/ext.trc2

---table

table IPSx.*;

table AML.*;

table IPSACCOUNT.*;

---sequence

sequence IPSx.*;

sequence AML.*;

sequence IPSACCOUNT.*;

此时,发现问题依旧, EXTLC进程的LAGTIME越来越大。使用TRACE/TRACE2分析EXTLC工作内容,发现EXTLC一直在处理SEQUENCE(我们生产库确实有很多SEQUENCE,而且很多都是实时取值的).

根据SEQUENCE这一点深入分析发现与metalinkDoc ID 1535322.1情况类似,主要是GGS为了保证把SEQUENCE取值可靠更新到目标库,将每一次SEQUENCE取值都要分解成以下类似SQL语句:

alter sequence .... cycle; ---- for the sequence with cycleoption
alter sequence ... nocycle; ---- for the sequence without cycleoption

这样就会导致目标库中产生大量的DDL脚本,此时上海容灾库的EXTLC进程再来捕获,从而导致速度过慢。DocID 1535322.1也提到类似解决方案,就是将上海容灾库上的REPLICAT进程增加如下参数:

DBOPTIONS_NOAUTOMATICSEQUENCEFLUSH
replicat replc

setenv (ORACLE_SID="paidit")

setenv ( NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)

userid ggs, password ggsxxx

sqlexec "Alter session setconstraints=deferred"

REPORT AT 01:59

reportrollover at 02:00

--handlecollisions

DBOPTIONS SUPPRESSTRIGGERS

DBOPTIONS DEFERREFCONST

DBOPTIONS_NOAUTOMATICSEQUENCEFLUSH

--ddl include mapped

--ddloptoins report

ddl include all

DDLERROR DEFAULT abend

DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE'trigger', OPTYPE alter

DDLSUBST 'enable' WITH 'disable' INCLUDE INSTR'ZGLT_CASCADE', OPTYPE alter, OBJTYPE 'CONSTRAINT'

reperror default,abend

discardfile ./dirrpt/replc.dsc,append, megabytes10

assumetargetdefs

checksequencevalue

allownoopupdates

dynamicresolution

numfiles 3000

map IPSx.*, target IPSx.*;

map IPSACCOUNT.*, target IPSACCOUNT.*;

map AML.*, target AML.*;

以让REPLICAT进程不在分解SEQUENCE取值操作。根据这种方法,确实解决了我们目前EXTLC延时问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: