在IT 专家中有一种普遍的误解,就是认为“锁定是不好的东西”,你必须尽一切可能保证数据库锁定不会使得进程无法正常运行。
在IT 专家中有一种普遍的误解,就是认为“锁定是不好的东西”,你必须尽一切可能保证数据库锁定不会使得进程无法正常运行。为了能够确保一个一致的数据库环境,在对资源进行修改时,数据库引擎必须利用一种机制来获得对资源的独占权。 Mw 6d"!
F Q/v)~-`
SQL Server中也用锁定,它们是指为了达到这种一致性,数据库引擎用来保证每一次只有一个线程同时访问同一个资源的对象。如果不用锁定的话,各个进程同时进行数据修改就可能发生,这就会使数据库处于一种不一致的状态。这样看来,锁定就成了好东西;但是,你应该以特定的方式来计划你的应用程序,让涉及的锁定的数量降到最少。在这篇文章中,我将讨论一个让你能够分析数据库锁定问题的存储过程。 ]c1@8Z4N8W
2Ex=*P6
找出什么被锁定了 qA !w"lTf
"xpm T%
系统的反应迟缓意味着你应该做一些调查了。你的查找最好从测定系统发生锁定的数量和频率开始。如果你的系统环境处理事务性很高的话,这样各个应用程序争夺资源就会很常见,从而引起锁定。解决这些问题的关键就在于能够确定被锁定的资源和争夺资源的进程。 A1ohr
b%9jmBh
sp_lock '' 0WZ
%#( WvqW"
sp_lock这个系统存储过程与SQL Server 2000 打包在一起,它将使你对在你系统中发生的锁定有深入的了解。这个程序会从主数据库中的syslockinfo中返回与锁定相关的大量信息,而主数据库是一个包括了所有允许、转换和等待锁定请求信息的系统工作台。 @v'b=J ^
Wm!)+w-}
让我们来看一下运行 sp_lock 程序之后,它会为我们提供什么信息: 0JZkUY]/
:Fz47
EXECUTE sp_lock wu#E!
在我的系统中,这是该存储过程返回的内容。sp_lock 返回的信息并不是一目了然的,要获得有用的数据,还需要做一些查找。但是,你也可以复制该存储过程的文本,然后创建一个新的,从而得到关于系统进程的更好的解释。(在这篇文章中,我们将集中讨论sp_lock返回的数据。) (F8uULf
YP?jD|