链接服务器性能和选项

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(使用前将#替换为@)

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

  • SQL Server 链接服务器到 Microsoft Access

    我尝试通过执行以下操作来使用 SQL Server 2008 中的链接服务器来访问 Microsoft Access 2003 表 EXEC sp addlinkedserver access1t OLE DB Provider for J
  • SQL Server:是否可以在不设置链接服务器的情况下从另一个SQL服务器获取数据?

    我需要执行以下查询 例如 SELECT c1 CustomerName FROM Customer as c1 INNER JOIN ExternalServer Database dbo Customer as c2 ON c2 RefI
  • 在 SQL 查询中执行正则表达式(替换)

    将所有 lt 替换为的最佳方法是什么 lt 在给定的数据库列中 基本上执行s lt lt gi Notes 必须工作于微软SQL服务器 http en wikipedia org wiki Microsoft SQL Server SQL
  • 如何引用名称中带有反斜杠 (\) 的 SQL Server?

    Givens 一台 SQL Server 的名称为 DevServerA 另一个名字叫 DevServerB 2K5 Problem From DevServerA 我如何编写引用的查询DevServerB 2K5 我尝试了一个示例虚拟查询
  • 如何在 SQL SERVER 中将 varchar 列转换为 bit 列

    Flag1 is a varchar值为 true 和 false 的列 我需要将其转换为位列 当我尝试这样做时 Convert Bit Flag1 它显示一个错误 Msg 245 Level 16 State 1 Line 2 Synta
  • sql服务器+VB 6.0

    我在 vb 6 0 中创建了一个数据库项目 我已经在 sql server 2000 中创建了数据库 我使用 adodc 和 odbc 连接到数据库 我想将我的 sql 服务器保留在一个系统中 将我的 vb 6 0 应用程序保留在另一个系统
  • 链接服务器查询中的参数从 varchar 转换为 nvarchar,导致索引扫描和性能不佳

    我们有以下设置 源服务器版本 12 或 15 排序规则 Latin1 General CI AS 在我们的责任范围内 我们可以更改此处的所有内容 链接服务器版本 13 排序规则 Latin1 General CI AS 不属于我们的责任 我
  • 是否有 RedGate 的“穷人”替代品来编写整个数据库模式的脚本? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我现在的情况是 我想为数据库生成一个脚本 我可以在另一台服务器上运行该脚本 并获得与原始数据库相同的数
  • T-SQL 列表表、列

    在 T SQL SQL Server 2000 中 如何列出数据库中的所有表和列 此外 在单独的查询中 有一种方法可以列出所有列以及数据类型和约束 NULL 等 谢谢 请查看信息图式 http learn microsoft com en
  • SQL Server 2000 实时数据镜像

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

    我有两张桌子 Table A ID 1 2 3 4 Table B ID 1 2 3 我有两个请求 我想选择表 A 中表 B 没有的所有行 在本例中是第 4 行 我想删除表 B 中没有的所有行 我正在使用 SQL Server 2000 你
  • SQL 其中日期时间列等于今天的日期?

    如何从创建日期是今天日期的数据库中获取记录 SELECT Title Firstname Surname Company name Interest FROM dbo EXTRANET users WHERE DATE Submission
  • 日期范围越小SQL查询时间越长?

    我有一个简单的 select 语句 它从 SQL Server 2000 这么旧 的表中选择数据 该表大约有 10 2000 万行 如下所示 startDate 2014 01 25 yyyy mm dd endDate 2014 02 2
  • 跨服务器SQL

    我想将数据从一台服务器的数据库移植到另一台服务器的数据库 这两个数据库都位于不同的 mssql 2005 服务器上 复制可能不是一个选项 因为目标数据库是按 时间间隔 从头开始生成的 我最好会做类似的事情 insert from db1 t
  • LINQ、Skip、OrderBy 和 SQL Server 2000

    我正在访问使用 LINQ to SQL 自动生成的数据上下文对象 SQL 数据库是一个SQL Server 2000 盒子 我正在使用的类是 SQL 视图 我有一个类似的声明 query context OrderDetails Where
  • 顺序或并行启动存储过程

    我们有一个每晚运行的存储过程 进而启动许多其他过程 其中一些程序在逻辑上可以与其他一些程序并行运行 我如何向 SQL Server 指示一个过程应该并行运行还是串行运行 即 异步启动还是阻塞运行 并行运行它们会产生什么影响 请记住 我已经确
  • 在 SQL 中添加额外的 Where 子句会严重影响性能

    我有一个运行多个视图和表的 SQL 查询 查询运行良好 但当我在 WHERE 子句中添加另一个条件时 它开始对性能产生巨大影响 查询的结构类似于 SELECT a FROM vw myView a LEFT OUTER JOIN tbl1
  • SQL Server Express 中的链接服务器

    我正在开发一个应用程序 其中我在 SQL Server Express 中有一个本地数据库 在本地数据库中工作期间 我们需要在另一个 SQL Server 实时服务器上执行查询 并返回一个值 并使用该值在本地服务器中执行查询 对 2 或 3
  • 在 SQL 中获取运行总计最大值的高性能方法

    我们有一个交易表 其结构如下 TranxID int PK and Identity field ItemID int TranxDate datetime TranxAmt money TranxAmt 可以是正数或负数 因此该字段 对于
  • 替换sql server 2000中的ntext(超过4000个字符)

    如何替换sql server 2000中ntext列中超过4000个字符的文本 转换为 nvarchar max 不起作用 因为它会截断值 使用 TEXT NTEXT 是一团糟 这是尽快摆脱这些字段的众多原因之一 您需要使用 READTEX

随机推荐