Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2012:为什么where子句中的不同值会阻止select查询?_Sql_Sql Server_Sql Server 2012_Database Deadlocks - Fatal编程技术网

SQL Server 2012:为什么where子句中的不同值会阻止select查询?

SQL Server 2012:为什么where子句中的不同值会阻止select查询?,sql,sql-server,sql-server-2012,database-deadlocks,Sql,Sql Server,Sql Server 2012,Database Deadlocks,我们的应用程序执行以下两个查询: select A.* from LETTUREAPERTE A where IDAZIENDAOPERATORE=3 及 根据用户正在考虑的公司ID。 好的,虽然第二个查询被正确执行,但是第一个查询被阻塞并且永远不会执行。在LETTUREAPERTE表中,记录少于400条,有些记录带有IDAziendaOperator和2,有些记录带有3 我不知道为什么会发生这种情况,为什么第一个查询会被阻塞。。。我最终得到这个错误,我得到一个错误,说进程被选为死锁受

我们的应用程序执行以下两个查询:

select   A.* from   LETTUREAPERTE A
where IDAZIENDAOPERATORE=3

根据用户正在考虑的公司ID。 好的,虽然第二个查询被正确执行,但是第一个查询被阻塞并且永远不会执行。在
LETTUREAPERTE
表中,记录少于400条,有些记录带有
IDAziendaOperator
和2,有些记录带有3

我不知道为什么会发生这种情况,为什么第一个查询会被阻塞。。。我最终得到这个错误,我得到一个错误,说进程被选为死锁受害者

事务(进程ID 62)在另一个进程的锁资源上被死锁,并被选为死锁受害者。重新运行事务。


我甚至运行了一些查询来检测该表的一些记录上是否有更新锁,但没有。这一定是因为在整个项目中,我们从未在查询中使用UPDLOCK…

一种可能是在其中一行上使用
3
的未提交/未回滚事务

如果使用事务,则需要使用TRY/CATCH并提交或回滚

您可以尝试使用
(NOLOCK)


另一种选择是重新启动SQL server,看看这是否会解决问题,但很可能会再次发生。一种可能是在其中一行上有一个
3
的未提交/未回滚事务

如果使用事务,则需要使用TRY/CATCH并提交或回滚

您可以尝试使用
(NOLOCK)


另一个选项是重新启动SQL server,看看这是否解决了问题,但它很可能会再次出现,正如Gordon在评论添加选项重新编译中所建议的那样,如下所示

select   A.* from   LETTUREAPERTE A
where IDAZIENDAOPERATORE=2 OPTION (RECOMPILE)

正如Gordon在comment add选项中所建议的,重新编译如下

select   A.* from   LETTUREAPERTE A
where IDAZIENDAOPERATORE=2 OPTION (RECOMPILE)

尝试通过Adam Mechanical运行
sp_WhoIsActive
,并跟踪可能使用相同表源的事务。然后在
sp_lock
(系统一)中找到该对象。基于此,你应该知道为什么会出现僵局。
在执行期间,值2可能与值3不被相同的(锁定的)索引使用-这在表上使用筛选索引时是可能的

尝试由Adam Mechanical运行
sp_WhoIsActive
,并跟踪可能使用相同表源的事务。然后在
sp_lock
(系统一)中找到该对象。基于此,你应该知道为什么会出现僵局。
在执行期间,值2可能与值3不被相同的(锁定的)索引使用-这在表上使用筛选索引时是可能的

正如**Bartosz X**向我的建议,我为参与视图的每个表启动了以下命令:

UPDATE STATISTICS [Schema].[Table_Name] WITH FULLSCAN
大约花了一个小时才完成,但情况似乎有了很大改善。 因此,我添加了以下每周执行的维护计划:

如果有兴趣,这是我的看法:

SELECT        
  IDOPERATORE, 
  COGNOMENOMEOPERATORE, 
  IDAZIENDAOPERATORE,
  (SELECT
     SUM(LETTURERIMASTE) AS Expr1
   FROM dbo.LETTURERIMASTE AS B
   WHERE (IDLOTTOLETTURISTA IN
           (SELECT IDLOTTOLETTURISTA
            FROM dbo.LOTTILETTURISTA AS C
            WHERE (DATAFINELOTTOLETTURISTA >= CONVERT(datetime, ROUND(CONVERT(float, GETDATE()), 0, 1))) AND (IDLETTURISTALOTTOLETTURISTA = A.IDOPERATORE)))) 
   AS LETTURERIMASTE

正如**Bartosz X**向我的建议,我为参与视图的每个表启动了以下命令:

UPDATE STATISTICS [Schema].[Table_Name] WITH FULLSCAN
大约花了一个小时才完成,但情况似乎有了很大改善。 因此,我添加了以下每周执行的维护计划:

如果有兴趣,这是我的看法:

SELECT        
  IDOPERATORE, 
  COGNOMENOMEOPERATORE, 
  IDAZIENDAOPERATORE,
  (SELECT
     SUM(LETTURERIMASTE) AS Expr1
   FROM dbo.LETTURERIMASTE AS B
   WHERE (IDLOTTOLETTURISTA IN
           (SELECT IDLOTTOLETTURISTA
            FROM dbo.LOTTILETTURISTA AS C
            WHERE (DATAFINELOTTOLETTURISTA >= CONVERT(datetime, ROUND(CONVERT(float, GETDATE()), 0, 1))) AND (IDLETTURISTALOTTOLETTURISTA = A.IDOPERATORE)))) 
   AS LETTURERIMASTE


添加带有选项(重新编译)的
,查看您是否获得了更好的执行计划。嗯,我应该在哪里添加带有选项(重新编译)
?这是什么语句?
从LETTUREAPERTE A中选择一个*,其中IDaziendOperatore=2,并带有选项(重新编译)
。但我认为这不会影响包含400条记录的表。您能在死锁后绘制图以获得相同的结果吗?执行有时需要80秒。还有一些时候,正如我之前所说的,它被中止了……如果您愿意,您可以将执行计划粘贴到这里来共享它:添加带有选项(重新编译)的
,以查看您是否获得了更好的执行计划。嗯,我应该在哪里添加带有选项(重新编译)
?这是什么语句?
从LETTUREAPERTE A中选择一个*,其中IDaziendOperatore=2,并带有选项(重新编译)
。但我认为这不会影响包含400条记录的表。您能在死锁后绘制图以获得相同的结果吗?执行有时需要80秒。还有一些时候,正如我之前所说的那样,它被中止了……如果您愿意,您可以将执行计划粘贴到这里来共享它:我得到了相同的结果……执行有时需要80秒。还有一些时候,正如我之前所说的,它被中止了……你错过了
选项之前带有
关键字的
,不确定它是可选的,是吗?!从10分钟前开始,我就再也没有任何错误了……执行起来真的花了太多时间。总是在70/80秒左右,每个人都在抱怨我的应用程序太慢了…@Tanner这是可选的,正如你提到的那样。你能分享执行计划吗?我得到了同样的结果…有时执行需要80秒。还有一些时候,正如我之前所说的,它被中止了……你错过了
选项之前带有
关键字的
,不确定它是可选的,是吗?!从10分钟前开始,我就再也没有任何错误了……执行起来真的花了太多时间。总是在70/80秒左右,每个人都在抱怨我的应用程序太慢了…@Tanner您提到过它是可选的。您可以共享执行计划吗?即使我在查询中使用
(NOLOCK)
,我也会得到相同的结果。。。我不知道是否有被阻止的交易应该被删除。有办法得到这个吗?谢谢你的帮助。我已经尝试过该查询,并且我已经检查过没有打开的事务…即使我在查询中使用
(NOLOCK)
,我也会得到相同的结果。。。我不知道是否有被阻止的交易应该被删除。有办法得到这个吗?谢谢你的帮助。我已经尝试过这个查询,并且检查过没有打开的事务…请原谅,我无法从文档中理解如何使用t