积极答复者
SQLSERVER2008 使用DBLINK跨主机复制数据时,在源主机执行速度远远慢于在目标主机执行?请教

问题
-
前提:
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的开销巨大?请老大们帮分析下可能是什么原因导致的?
谢谢!!
答案
-
因为远程事务是由DTC管理的,没什么办法好优化。用变通的方案吧。比如你用过的remote select,Stone用的FTP,或者用SSIS等。
想不想时已是想,不如不想都不想。- 已标记为答案 Molly Chen_Moderator 2011年10月17日 2:07
-
我遇到的case是 oracle to sql server。
连接数据库对于批量数据效率低的惊人,以至于10w行的数据需要超过10分钟的时间来传输(而且是局域网条件)。尝试多次优化收效甚微。
因为我们估计生产系统大约每次会有100w的数据量,这个延迟我们吃不消。
所以我们将整个流程重新设计,由oracle端导出数据到文本文件,sql端通过ftp拿到数据后导入sql server中,这个过程我们实测,100w也只要10分钟只能就完成所有工作。
不可否认这个的确要复杂了很多,但是获得效率的提升还是惊人的,而且这里面我们还有进一步优化的空间(压缩数据,及时获取数据等)。
顺便说一下,oracle端我们单独写了个小控制台程序,sql 端我们使用的是前面兄弟说的SSIS。
family as water- 已标记为答案 Molly Chen_Moderator 2011年10月17日 2:07
全部回复
-
由于远程事务的关系,remote insert本来成本就高得多
想不想时已是想,不如不想都不想。- 已建议为答案 Molly Chen_Moderator 2011年10月12日 8:34
- 已标记为答案 Molly Chen_Moderator 2011年10月17日 2:06
- 取消答案标记 Molly Chen_Moderator 2011年10月17日 2:08
-
因为远程事务是由DTC管理的,没什么办法好优化。用变通的方案吧。比如你用过的remote select,Stone用的FTP,或者用SSIS等。
想不想时已是想,不如不想都不想。- 已标记为答案 Molly Chen_Moderator 2011年10月17日 2:07
-
我遇到的case是 oracle to sql server。
连接数据库对于批量数据效率低的惊人,以至于10w行的数据需要超过10分钟的时间来传输(而且是局域网条件)。尝试多次优化收效甚微。
因为我们估计生产系统大约每次会有100w的数据量,这个延迟我们吃不消。
所以我们将整个流程重新设计,由oracle端导出数据到文本文件,sql端通过ftp拿到数据后导入sql server中,这个过程我们实测,100w也只要10分钟只能就完成所有工作。
不可否认这个的确要复杂了很多,但是获得效率的提升还是惊人的,而且这里面我们还有进一步优化的空间(压缩数据,及时获取数据等)。
顺便说一下,oracle端我们单独写了个小控制台程序,sql 端我们使用的是前面兄弟说的SSIS。
family as water- 已标记为答案 Molly Chen_Moderator 2011年10月17日 2:07