none
SQLSERVER2008 使用DBLINK跨主机复制数据时,在源主机执行速度远远慢于在目标主机执行?请教 RRS feed

  • 问题

  • 前提:

    A主机为源主机 tablea

    B主机为目标主机 tableb

    其中tablea和tableb表结构完全相同;

     

    场景:

    1.在A主机执行insert into dest.tablea select * from tableb;导入30万数据耗时6min

    2.在B主机执行insert into tablea select * from source.tableb;导入30万数据耗时19sec

     

    场景1的执行计划:95%开销为源表表扫描;3%为远程插入

    场景2执行计划:66%为远程查询;34%为本地插入

    场景1的IO统计:目标表,逻辑读取 925266 次;源表,逻辑读取 11110 次

    场景2的IO统计:目标表,逻辑读取 306953 次;源表,逻辑读取 925266 次

     

    ==》远程insert的开销巨大?请老大们帮分析下可能是什么原因导致的?

    谢谢!!

     

     

     

     

     

     

    2011年10月9日 9:00

答案

  • 因为远程事务是由DTC管理的,没什么办法好优化。用变通的方案吧。比如你用过的remote select,Stone用的FTP,或者用SSIS等。
    想不想时已是想,不如不想都不想。
    2011年10月13日 9:04
    版主
  • 我遇到的case是 oracle to sql server。

    连接数据库对于批量数据效率低的惊人,以至于10w行的数据需要超过10分钟的时间来传输(而且是局域网条件)。尝试多次优化收效甚微。

    因为我们估计生产系统大约每次会有100w的数据量,这个延迟我们吃不消。

     

    所以我们将整个流程重新设计,由oracle端导出数据到文本文件,sql端通过ftp拿到数据后导入sql server中,这个过程我们实测,100w也只要10分钟只能就完成所有工作。

    不可否认这个的确要复杂了很多,但是获得效率的提升还是惊人的,而且这里面我们还有进一步优化的空间(压缩数据,及时获取数据等)。

    顺便说一下,oracle端我们单独写了个小控制台程序,sql 端我们使用的是前面兄弟说的SSIS。


    family as water
    2011年10月14日 5:33

全部回复

  • 由于远程事务的关系,remote insert本来成本就高得多
    想不想时已是想,不如不想都不想。
    2011年10月9日 11:33
    版主
  • 请问下是否有优化的空间?
    2011年10月10日 0:17
  • 还有网络传输数据,延迟等问题。sql 之间已经很好了,遇到sql与其他的数据库大批量的只能放弃(后来采用FTP方式)
    family as water
    2011年10月10日 0:17
  • 从remote select的效率来看,瓶颈应该不在网络;
    2011年10月10日 0:19
  • 往远程服务器上INSERT UPDATE,DELETE时性能本来就很差。。。

    估计是因为远程服务器对传过来的命令做安全性审核  或是降低操作优先级?之类的 具体原因也不明了

    2011年10月13日 8:19
  • 因为远程事务是由DTC管理的,没什么办法好优化。用变通的方案吧。比如你用过的remote select,Stone用的FTP,或者用SSIS等。
    想不想时已是想,不如不想都不想。
    2011年10月13日 9:04
    版主
  • 还有网络传输数据,延迟等问题。sql 之间已经很好了,遇到sql与其他的数据库大批量的只能放弃(后来采用FTP方式)
    family as water

    FTP方式是怎么运作的呢?

    可以简单解释下吗?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2011年10月14日 0:56
  • 我遇到的case是 oracle to sql server。

    连接数据库对于批量数据效率低的惊人,以至于10w行的数据需要超过10分钟的时间来传输(而且是局域网条件)。尝试多次优化收效甚微。

    因为我们估计生产系统大约每次会有100w的数据量,这个延迟我们吃不消。

     

    所以我们将整个流程重新设计,由oracle端导出数据到文本文件,sql端通过ftp拿到数据后导入sql server中,这个过程我们实测,100w也只要10分钟只能就完成所有工作。

    不可否认这个的确要复杂了很多,但是获得效率的提升还是惊人的,而且这里面我们还有进一步优化的空间(压缩数据,及时获取数据等)。

    顺便说一下,oracle端我们单独写了个小控制台程序,sql 端我们使用的是前面兄弟说的SSIS。


    family as water
    2011年10月14日 5:33