链接服务器性能和选项

2023-11-24

在工作中,我们有两台服务器,其中一台正在运行很多人使用的应用程序,该应用程序具有 SQL Server 2000 后端。我很长时间以来都可以自由地查询它,但无法向其中添加任何内容,例如存储过程或额外的表。

这导致我们将第二个 SQL Server 链接到第一个 SQL Server,并且我构建了一个存储过程库,使用链接服务器从双方查询数据。其中一些查询花费的时间比我想要的要长。

有人可以给我指出一些关于使用链接服务器的好文章吗?我特别感兴趣的是找出两者之间正在传输哪些数据,因为通常大多数 sql 语句都可以远程执行,但我感觉它可能正在传输整个表,它通常只是一个小型最终的连接本地表。

另外,我目前有哪些链接服务器选项:

  • 排序规则兼容 True
  • 数据访问真实
  • Rpc True
  • Rpc 输出正确
  • 使用远程排序规则 False
  • 排序规则名称(空白)
  • 连接超时 0
  • 查询超时 0

EDIT:

只是想我会更新这篇文章,我使用带有动态参数的 openqueries 一段时间来提高性能,感谢您的提示。然而,当您最终处理字符串时,这样做可能会使查询变得更加混乱。最终今年夏天我们将SQL Server升级到2008并实现了实时数据镜像。老实说,对于我的任务来说,开放查询的速度已经接近本地查询的速度,但镜像确实使 SQL 更容易处理。


避免连接到链接服务器表。

可以使用四部分命名来进行连接,但成本更高。您的联接可以包含可用于限制来自链接服务器的数据集并使用索引列的条件。

Example:

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(或任何链接服务器)放置在循环内!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链接服务器性能和选项 的相关文章

  • LINQ to SQL Server 2000:“必须声明变量‘@p0’”

    我创建了这个简单的 LINQ 查询 var result from invoice in invoiceTable where invoice Id 1 select invoice Document 它生成以下 SQL SELECT t0
  • SQL Server:当我总是要重新加入它们时,垂直分区有什么价值吗?

    我面临着必须向已经有 32 列的表添加 64 个新列 举个例子 Customers CustomerID int Name varchar 50 Address varchar 50 City varchar 50 Region varch
  • 资源池“内部”中系统内存不足

    SQL Server 2008 链接服务器和临时插入会导致快速内存泄漏 最终导致服务器无响应并以以下错误结束 Msg 701 Level 17 State 123 Server BRECK PC SQLEXPRESS Line 2 Ther
  • SQL Server 更新查询不起作用,但是 SQL 表示行受到影响

    我有一个 SQL Server 2000 数据库 其中有一个名为Voters 表中的一列 PrecinctCode类型的varchar 10 应该有一个 4 位代码 类似于A111 or D109 但有些行的值为 999 有值的行 999
  • 有没有办法阻止 SQL Server 在 CREATE / ALTER 期间验证存储过程中的 SQL

    我们系统的一方面要求我们的 SQL Server 实例通过链接服务器连接与 MySQL 服务器通信 MSSQL gt LinkedServer MSDASQL ODBC 提供程序 gt MySQL ODBC 连接器 gt MySQL DB
  • T-SQL 脚本 - 时间线的逻辑问题

    创建并加载两个临时表 这是架构 Create table SH date datetime sched id int agent id int Create table SD sched id int start minute int le
  • SQL Server 2000 实时数据镜像

    我目前正在使用 2 个 sql 2000 服务器 其中一个可以查询 但不能添加任何数据库 这导致第二个服务器有很多查询 这些查询使用第一个服务器作为链接服务器 我想在查询实时数据的同时提高性能 是否可以将实时数据镜像到第二台服务器 这样查询
  • 多个子查询

    是否可以从同一个表的日期记录中得到如下结果 Enrolled Enrolled as Email Enrolled as Text Deals Redeemed
  • 在 SQL Server 2012 上还原 SQL Server 2000 备份

    将备份从 SQL Server 2000 恢复到最新版本时 我收到以下错误消息 我不知道旧版本 现在我使用的是SQL Server 2012 11 0 3128 0 错误信息是 消息 3169 级别 16 状态 1 服务器 FF101 第
  • 跨服务器SQL

    我想将数据从一台服务器的数据库移植到另一台服务器的数据库 这两个数据库都位于不同的 mssql 2005 服务器上 复制可能不是一个选项 因为目标数据库是按 时间间隔 从头开始生成的 我最好会做类似的事情 insert from db1 t
  • MSSQL 链接服务器错误:链接服务器的 OLE DB 提供程序“OraOLEDB.Oracle”为列提供了不一致的元数据

    我试图将数据从 Oracle 提取到MSSqlserver使用链接服务器的数据库 select from LINK NAME SCHEMA TABLE 但它失败并出现以下错误 链接服务器 LINK NAME 的 OLE DB 提供程序 Or
  • 如何使用 PDO 和 SQL Server 获取最后插入行的 ID?

    在其他情况下我可能会想使用 result mssql query INSERT INTO table fields VALUES data SELECT CAST scope identity AS int 但由于我将插入用户提交的数据 我
  • SQL Server 2000 中的交叉表查询

    我希望以前有人尝试过这一点 并且在我进一步之前可以得到一些建议 我希望在 sql server 2000 中生成类似于交叉表查询的内容 我有一个类似于以下的表结构 Item Item Parameter Parameter id item
  • SQL Server 2000 - 调试死锁

    我正在寻找有关如何调试和解决 SQL Server 2000 数据库中的死锁问题的建议 有人建议我使用跟踪标志 1024 和 3605 我发现它们可以提供以下信息 1024 此跟踪标志返回参与死锁的锁的类型以及受影响的当前命令 3605 此
  • LINQ、Skip、OrderBy 和 SQL Server 2000

    我正在访问使用 LINQ to SQL 自动生成的数据上下文对象 SQL 数据库是一个SQL Server 2000 盒子 我正在使用的类是 SQL 视图 我有一个类似的声明 query context OrderDetails Where
  • 在 SQL Server 中使用链接服务器有哪些缺点?

    是否存在任何巨大的性能问题或安全问题 使用 SQL Server 2005 及更高版本 服务器迁移更加复杂 为多跳设置安全性可能很棘手 非 SQL Server 需要安装本地驱动程序 Sybase DB2 等 集群 异地灾难恢复 注册表项
  • SQL Server 2000:如何从存储过程将图像变量保存到文件系统中的文件

    我有一个存储过程 它接收 Data image范围 我想将它从存储过程保存到文件系统 知道怎么做吗 您可以使用 OLE 自动化 ADODB Stream 从 SQL Server 2000 存储过程写入二进制数据 如下所述here http
  • SQL Server 的 printf

    Sql Server中有类似printf的函数吗 我想要与 RAISERROR 函数相同的功能 但我不想抛出错误或打印消息 而是想将其写在 varchar 中 因为我的 ERP 不允许我处理错误消息 这是 SQL Server 2000 R
  • CROSS APPLY 不适用于 SQL SERVER 2000?

    如何在 SQL Server 2000 中使用与 CROSS APPLY 等效的功能 我有一个函数返回传递的 id 的顶级父级 ALTER Function dbo fn GetTopParentRiskCategory RctId int
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation

随机推荐