是这样的,我通过sqlserver2008的linked server往同一局域网内的另一台server上插入100万的数据,居然用了30分钟,而如果不通过linked server直接插入本地库,只用了1分钟如果是linked server性能不好的问题,我又做了另外一个试验,就是通过linked server查询另一server的刚刚花30分钟插入的这100万条数据,性能和直接查询本地的100万一样,都是28秒,这就说明Linked server 查询没问题啊
select * from 100万表这到底是为什么啊,是不是Linked server在insert,update,delete数据的时候,就会产生什么事务,锁之类的把性能搞的很差很?在线等,每5分钟刷新,看看有人回答没

解决方案 »

  1.   

    是有网络传输的问题啊,但是 不至于出现30倍的性能差距啊,我现在测试的是100万,如果是1000万,1亿,那得多长时间啊
    有人提出使用service broker和触发器结合的办法,service broker不会用,不知道是否能解决性能问题。。求高人
      

  2.   

    首先谢谢你的回复
    1.查询语句优化:insert into 表() values()貌似没什么好优化的了
    2。网络因素:2台美国局域网服务器128G,24核的
    3。目标表索引:我新建了一张没任何约束索引的临时表,把100万数据插入,原来要30分钟,现在只要28-29分钟,貌似没效果关键的问题,用link server查询select * from 表,和直接在本地查询这张表,速度都是一样的,约28秒就全查出来了
      

  3.   

    你的逻辑有问题,查询性能就算一样不能说明插入性能一样链接服务器在SQL SERVER内部当作远程查询处理,实际情况是无论查询和插入,性能都比本地低很多,而且很难优化,这是一般建议不要使用链接服务器的最主要原因。
      

  4.   

    select * from 100万表
    28秒的大部分时间用于显示这100万数据,差别不大不能说明查询性能没有差别
    用以下语句比较可能科学些select * INTO #T from 100万表
      

  5.   

    为什么link server查询性能差距不大的情况下,而插入性能差距就那么大呢??(30倍)
      

  6.   

    美国微软内部网络
    1。查询时候select * from linkServer.百万表,28秒搞定
    2。truncate linkServer.百万表,再 insert into linkServer.百万表 select * from 本地100万表,30分钟才完.
    如果是本地100万表插入相同的表,只要1分钟。
      

  7.   

    可以去这里看,Linchi Shea : Linked servers and performance impact: Direction matters!
    http://sqlblog.com/blogs/linchi_shea/archive/2010/12/01/linked-server-and-performance-impact-direction-matters.aspx在linked server上pull可以,换local server push就很慢了,貌似是一条条insert
      

  8.   

    Source 数据来源,Destination 数据目标。登录到Source,链接Destination。insert linkedDestination select * from Source会很慢。
    登录到Destination,链接Source。select * into Destination from linkedSource 灰常快~~