相关疑难解决方法(0)

跨链接服务器远程查询的 SQL 性能问题

这个程序

create proc dbo.Get_Accounts as
begin
  declare @current_date datetime
  set @current_date = dbo.fn_currdate()

  select [fields]
  into dbo.current_accounts
  from linkedserver.database.dbo.accounts
  where date = @current_date
end
Run Code Online (Sandbox Code Playgroud)

10 分钟后不断失败,并显示以下错误消息:

服务器:消息 7399,级别 16,状态 1,第 1 行 OLE DB 提供程序“SQLOLEDB”报告了错误。由于达到资源限制,提供程序终止了执行。[OLE/DB 提供程序返回消息:超时已过期] OLE DB 错误跟踪 [OLE/DB 提供程序 'SQLOLEDB' ICommandText::Execute 返回 0x80040e31:由于达到资源限制,提供程序终止执行。]。

但是,当我在具有硬编码日期的交互式查询窗口中从同一个数据库(不在远程数据库上)运行相同的查询时:

  select [fields]
  into dbo.current_accounts
  from linkedserver.database.dbo.accounts
  where date = '1/20/2012'
Run Code Online (Sandbox Code Playgroud)

它在 30 秒后返回。

本地服务器是 SQLSERVER 2008,远程服务器是 SQLSERVER 2000。

我们做了以下工作,但无济于事:

  • 重新创建了存储过程。
  • sp_recompile 在存储过程中
  • 更新 dbo.accounts 的统计信息
  • 删除并重新创建了 dbo.accounts 上的索引
  • 删除 dbo.accounts 上的索引并尝试
  • 本地和远程服务器上的 DBCC FREEPROCCACHE …

sql-server sql-server-2000

8
推荐指数
1
解决办法
5万
查看次数

标签 统计

sql-server ×1

sql-server-2000 ×1