在Perl中用Array DML来进行性能调优

    asyncdata是一个用于同步数据的角本, 基于实体化视图日志或自定义的触发器来获得变更的记录, 然后防照实体化视图刷新的过程来进行数据同步. 几个月之前完成的这一段角本, 现在要拿来作一些数据的迁移用了. 除正确性外, 性能就是最关键的因素了.

    在处理SELECT的结果时, 我们已经广泛地使用Array Fetch提升性能了, 不过Array DML真正用得还是不够广的, 相对来说, 在PL/SQL中用得多一些. 现在我要测试的是在Perl测试Array DML的性能提升.

    做的测试是在两个不同的数据中心间进行数据同步, 网络速度肯定是不够快的, 在不用Array DML的情况下, 源节点这边插入一万条记录(表有13个字段, 一个主键索引), 用Perl同步到目标数据库需要40秒, 用dblink的结果更差, 需要一分钟左右. 通过升级DBD Oracle后, 用Array DML方式处理这一万条刻录时(Array Size为500), 只用了4秒钟, 整个速度提升了10倍, 应当可以满足性能要求了.

    用Perl而不用PL/SQL的原因是可以做得比较通用, 要写一段PL/SQL程序来处理几个表, 还要用Array DML方式, 代码难度比较高. 而用Perl等角本语言, 则可以很轻松地实现. 如有这种少量表的数据同步需求, 不防考虑使用这个角本. 如果两端的数据互不干涉, 则还可以做成双向同步.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I once took a part-time job delivering the Evening Post.
  • 我曾干过送晚报的兼职.
  • Have you read the article about the rescue of the hostage?
  • 你看了关于营救人质的文章了吗?
  • There was much news in the morning paper today.
  • 今天的晨报上有许多新闻.
  • My friend Tom is a reporter for the New York Times.
  • 我朋友汤姆是【纽约时报】的记者.
  • What channel are you watching now?
  • 现在你在看哪个新闻?