如何避免Sql Query Timeout

R.D*_*R.D 20 sql sql-server

我在SQL视图上有RO访问权限.以下查询超时.怎么避免这个?

select  
  count(distinct Status)  
from 
  [MyTable]  with (NOLOCK)
where 
  MemberType=6
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

消息121,级别20,状态0,行0

从服务器接收结果时发生传输级错误(提供程序:TCP提供程序,错误:0 - 信号量超时期限已过期.)

cod*_*ike 25

你的查询可能没问题."信号量超时期限已过期"是网络错误,而不是SQL Server超时.

例如,请参阅http://support.microsoft.com/kb/325487

您和SQL Server之间显然存在某种网络问题.

编辑:但是,显然查询运行15-20分钟后才发出网络错误.这是一个很长的时间,因此网络错误可能与长执行时间有关.优化底层视图可能会有所帮助.

如果您的示例中的[MyTable]是View,您是否可以发布视图定义以便我们可以优化它?


Cad*_*oux 9

虽然显然存在某种网络不稳定或某种干扰您的连接的事情(15分钟可能会越过NAT边界或网络中的某些东西正在丢弃会话),我认为你想要这样一个简单的?)查询在任何预期的时间内(如1s)返回.

我会与您的DBA交谈并获取在MemberType,Status上的基础表上创建的索引.如果没有单个基础表或者这些更复杂并且由视图或UDF创建,并且您正在运行SQL Server 2005或更高版本,请让他考虑索引视图(基本上以索引方式实现视图).