本文将与您分享在OGG添加主键和trandata的顺序。边肖觉得挺实用的,所以分享给大家学习。希望你看完这篇文章能有所收获。让我们和边肖一起看看。
最近,在OGG的压力测试中,源库和目标库在表级同步。源数据库中有20个表,每个表有30-40列,数据量不小。
在测试过程中,循环执行dml语句来测试OGG同步效果。测试脚本如下所示:
剧本只是用来说明过程,并不严谨。
开始
因为我在1.100000环路
插入表1 (test_id,col1,col2)值(I,x,x);
插入表2 (test_id,col1,col2)值(I,x,x);
.
插入表20 (test_id,col1,col2)值(I,x,x);
如果mod(1,1000)=0
提交;
结束if;
结束循环;
提交;
结束;
/
开始
因为我在1.100000环路
更新表1设置col1=48452,其中test _ id=I;
更新表2设置col1=48452,其中test _ id=I;
…
更新表20设置col1=48452,其中test _ id=I;
如果mod(1,1000)=0
提交;
结束if;
结束循环;
提交;
结束;
/
开始
因为我在1.100000环路
删除表1,其中test _ id=I;
删除表2,其中test _ id=I;
…
删除表20,其中test _ id=I;
如果mod(1,1000)=0
提交;
结束if;
结束循环;
提交;
结束;
/
测试结果非常差,耗时长达10个小时!其中提取和传递的速度比较理想,耗时集中在复制过程执行删除操作的部分。
GGSCI lagREPSYM _ T
向REPLICAT REPSYM _ T发送GETLAG请求.
最后记录落后:36481秒。
在EOF,没有更多的记录需要处理。
有几种方法可以解决这个问题:
1.并行设置多个复制过程。
2.将batchsql参数添加到复制过程参数文件中。
3.绑定变量以优化delete语句。
直观感受解决不了以上问题,但已经一一尝试过了。效果不明显。在测试过程中监控撤销表空间和用户表空间没有问题,所以这不是问题的一部分。
接下来,我们做了一个测试。我们没有使用OGG复制,而是在目标上创建了一个测试表,插入了100,000个数据,并以正常速度删除了10w个数据。看来问题在于OGG的复制。
没有主键吗?使用以下SQL语句检查以下结果。发现所有表都有主键。
选择所有者、表名、约束类型、约束名、状态
来自dba _约束
其中所有者='TEST '
和约束类型(' P ',' U ');
接下来,检查trandata的状态,结果非常出乎意料。
GGSCI dblogin用户id ogg,密码ogg
GGSCI信息传输数据测试。*
.
补充重做日志数据的记录是表TEST.table1的disabled
.
看到这里,我知道问题出在哪里了。
同步表中没有主键。设置trandata后,更新和删除操作使用绑定到一列中的所有列作为唯一标识符来同步更改。后来手动添加了主键,但是trandata按照前面的方法做了,没有使用主键。解决方法很简单。删除原始trans data并再次添加trans data以使主键生效。
GGSCI删除trandata TEST。*
添加传输数据测试。*
再次测试取得了显著的效果,复制过程的延迟从36481秒减少到542秒!
GGSCI lagREPSYM _ T
向REPLICAT REPSYM _ T发送GETLAG请求.
最后记录落后:542秒。
在EOF,没有更多的记录需要处理。
摘要:在部署OGG之前,您需要对复制的对象进行运行状况检查。最重要的一点是,源表需要有一个主键或唯一键。如果在OGG部署完成后发现源表缺少主键或唯一键,则需要手动添加,然后删除原始trandata,然后重新构建以使其生效。这样,当OGG同步更新和删除操作时,可以减少传输量,使得所有列打包和绑定都不能作为“键值”应用。
以上是在OGG添加主键和trandata的顺序。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86574.html