2016-08-03 135 views
1

感谢您花时间阅读我的问题。我们已经构建了一个使用T-SQL的系统来处理(大量)数据。当我们开始处理这些数据时,此操作通常需要大约15分钟才能完成。在此期间,出于某种原因,似乎数据库中的所有对象都存在锁定。在某种程度上,我明白我无法查询正在写入的表。但是,当我刷新表的列表(例如,在对象资源管理器的Tables节点上使用F5)时,SQL Server也会给我一个超时锁定消息。基于下面的模板SQL Server Large Transaction锁定所有表格

我的代码工作:

CREATE PROCEDURE Sample 

as 

SET NOCOUNT, XACT_ABORT ON 

BEGIN TRY 

BEGIN TRANSACTION 

... 

COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 
    BEGIN 
     PRINT 'STORED PROCEDURE - Returned errors while processing' 
     ROLLBACK TRANSACTION 
    END 
END CATCH 

现在,当我开始这个我可以执行SELECT WITH(NOLOCK)查询任何表。但我无法查看视图上的定义,存储过程或基本上在数据库中执行任何其他类型的操作。

我已经设置了READ UNCOMMITTED隔离级别设置,但这似乎没有什么区别。

欣赏此事的任何帮助。

亲切的问候,

+0

隔离级别会影响报表如何选择工作,这些都不会影响DDL,DML..Locking,填块是大主题,所以请有关如何解决锁定的阻塞搜索并从那里开始 – TheGameiswar

回答

0

是在try catch块中的代码进行数据更新的一个很大的数目。更改隔离级别不会解决锁定问题。

什么是最适合你的是做这些基本的检查/修改:

  • 尝试划分更新/插入较小的批处理;事情会更顺利地减少锁定。
  • 检查参与更新查询(ies)的表的索引,以便返回数据更快。
0

这个问题与隔离级别无关,它是Exclusive的问题。

这是数据库级锁Escalation的情况。

避免升级做小批量交易...