在工作中,我们有两个服务器,一个运行很多人使用的应用程序,它有一个SQL Server 2000后端.我可以自由地查询这个很长一段时间但不能添加任何东西,如存储过程或额外的表.
这导致我们将第二个SQL Server链接到第一个SQL Server,然后构建一个存储过程库,使用链接服务器从双方查询数据.其中一些查询花费的时间比我想要的要长.
有人能指点我一些关于使用链接服务器的好文章吗?我特别感兴趣的是找出两者之间正在传输的数据,因为通常大多数sql语句都可以远程执行但我觉得它可能正在转移整个表,它通常只是一个小的最终的连接本地表.
此外,我目前拥有的链接服务器选项是什么:
整理兼容真实
数据访问真实
Rpc True
Rpc Out True
使用远程整理错误
整理名称(空白)
连接超时0
查询超时0
编辑:
只是想我会更新这篇文章我使用动态参数的openqueries一段时间以提高性能,感谢提示.但是,当你最终处理字符串时,这样做可能会使查询更加混乱.最后,今年夏天我们将SQL Server升级到2008并实现了实时数据镜像.说实话,开放查询接近我的任务的本地查询的速度,但镜像肯定使sql更容易处理.
避免连接到链接的服务器表.
可以使用连接的四部分命名,但更昂贵.您的联接可以包含可用于限制链接服务器中的数据集并使用索引列的条件.
例:
SELECT loc.field1, lnk.field1 FROM MyTable loc INNER JOIN RemoteServer.Database.Schema.SomeTable lnk ON loc.id = lnk.id AND lnk.RecordDate = GETDATE() WHERE loc.SalesDate = GETDATE()
此查询还在连接中应用条件,链接服务器可以在计算连接之前使用该条件.
推荐的方法是使用OPENQUERY.
通过使用OPENQUERY避免连接,本地服务器仅发送要远程执行的查询,而是为连接发送一组ID.
使用该链接检索一组数据并在本地执行计算.使用临时表(用于即席查询)或在夜间作业中将行插入永久表中.
根据是否在喜欢的服务器中设置了远程事务协调器,开始事务可能会失败.使用它会消耗更多资源.
还要考虑您正在使用运行应用程序的生产服务器,而您没有指定它,我认为可以安全地假设使用繁重的事务并进行插入和更新.您正在从应用程序中取走资源.
您的目的似乎是将数据用于报告目的.您的服务器可以设置为具有简单的日志而不是完全使其更有效.
您还可以避免因链接服务器上的数据移动而取消您的查询.始终注意为您的查询和表提示设置适当的隔离级别,如NOLOCK.
请!切勿在循环中放置OPENQUERY(或任何链接服务器)!