按特定值筛选时,SQL Server查询永远不会完成

按特定值筛选时,SQL Server查询永远不会完成,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,在SQL Server 2008 R2生产环境中,我有一个名为inventory\u transaction的表。表和索引以及维护它们的维护包由专业供应商开发。自从实现使用该表的程序以来,我们已经有将近10年没有问题了,并且该表的任何索引都没有超过8%的碎片 然而,我现在遇到了一些麻烦。当我尝试按一个特定值筛选此表时,查询将不会完成。任何其他值都将使查询在

在SQL Server 2008 R2生产环境中,我有一个名为
inventory\u transaction
的表。表和索引以及维护它们的维护包由专业供应商开发。自从实现使用该表的程序以来,我们已经有将近10年没有问题了,并且该表的任何索引都没有超过8%的碎片

然而,我现在遇到了一些麻烦。当我尝试按一个特定值筛选此表时,查询将不会完成。任何其他值都将使查询在<1秒内执行

以下是无法完成的特定查询:

DECLARE @BASE_ID VARCHAR(30) = 'W46873'    

SELECT * 
FROM PROD.DBO.INVENTORY_TRANS  
WHERE WORKORDER_BASE_ID = @BASE_ID

我让它运行了35分钟,然后取消了它。我从未收到错误消息。如果我在
@BASE\u ID
中输入任何其他值,它将在中执行,您的查询可能已被另一个进程阻止。在SQLServerManagementStudio(SSMS)中运行查询时,请检查选项卡标题。末尾括号中的数字是服务器进程ID(SPID):

当查询仍在执行时,在另一个窗口中执行以下命令以检查查询是否被阻止:

/* Replace 70 with actual SPID */
SELECT * FROM sys.sysprocesses WHERE spid = 70
如果阻塞列包含正数,则这是阻塞查询的进程的SPID。有关此过程的详细信息,请执行以下命令:

/* Replace 62 with the actual SPID of the process in question */
DBCC INPUTBUFFER(62)
SELECT * FROM sys.sysprocesses WHERE spid = 62

EventInfo可能会提示您此连接中正在执行的操作,而
登录时间
主机名
程序名
和其他列可能会精确定位连接的用户。例如,另一个事务可能仍处于活动状态。

是表还是视图?它有多大?我会删除并重新创建索引。它是一个表。数据空间约为80MB,索引空间约为55MB。大约350k行。无论如何,我都会显式地删除并创建索引。另外,您是否尝试通过重新编译运行查询?“从PROD.DBO.INVENTORY\u TRANS中选择*,其中WORKORDER\u BASE\u ID=@BASE\u ID选项(重新编译)”在100mb表上35分钟听起来像是阻塞。未指定的事务可能在谓词值需要读取的某一行上有一个锁。当它挂起时,查看等待任务DMV,看看它是否在等待什么,如果在等待什么。这就是问题所在!它正被另一个被阻止的进程阻止。。。。我杀死了根进程,所有的事情都立刻被清除了。感谢您的清晰解释和指导!对于任何担心我只是终止进程的人来说,它是由于另一个问题而挂起的,这个问题已经解决了,所以不应该再发生了。
/* Replace 62 with the actual SPID of the process in question */
DBCC INPUTBUFFER(62)
SELECT * FROM sys.sysprocesses WHERE spid = 62