百度空间 | 百度首页 
 
查看文章
 
SQL Server 中当前持有的所有锁的信息
2009-08-12 11:38
下面的示例显示   SQL   Server   中当前持有的所有锁的信息。  

USE   master  
EXEC   sp_lock  

其中"类型"列显示当前锁定的资源类型。  

资源类型   描述    
RID   用于锁定表中的一行的行标识符。    
KEY   索引中的行锁。用于保护可串行事务中的键范围。    
PAG   数据或索引页。    
EXT   相邻的八个数据页或索引页构成的一组。    
TAB   包括所有数据和索引在内的整个表。    
DB   数据库。    


如何查看当前锁(企业管理器)  

展开服务器组,然后展开服务器。  


展开"管理",然后展开"当前活动"。  


执行下列操作中的一种:    
展开"锁/进程   ID"以查看每个连接的当前锁。  


展开"锁/对象"以查看每个对象的当前锁。    
在控制台树中单击要查看的连接   (SPID)   或对象。    
该连接或对象的当前锁显示在详细信息窗格中。  

SQL   Server   使用以下资源锁模式。  

锁模式   描述    
共享   (S)   用于不更改或不更新数据的操作(只读操作),如   SELECT   语句。    
更新   (U)   用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。    
排它   (X)   用于数据修改操作,例如   INSERT、UPDATE   或   DELETE。确保不会同时对同一资源进行多重更新。    
意向   用于建立锁的层次结构。意向锁的类型为:意向共享   (IS)、意向排它   (IX)   以及与意向排它共享   (SIX)。    
架构   在执行依赖于表架构的操作时使用。架构锁的类型为:架构修改   (Sch-M)   和架构稳定性   (Sch-S)。      
大容量更新   (BU)   向表中大容量复制数据并指定了   TABLOCK   提示时使用。    

虽然   Microsoft®   SQL   Server™   2000   自动执行锁定,但它仍可以通过以下方法自定义应用程序中的锁定:    

处理死锁和设置死锁优先级。  

处理超时和设置锁超时持续时间。  

设置事务隔离级别。  

对   SELECT、INSERT、UPDATE   和   DELETE   语句使用表级锁定提示。  

配置索引的锁定粒度。    


可以使用   SELECT、INSERT、UPDATE   和   DELETE   语句指定表级锁定提示的范围,以引导   Microsoft®   SQL   Server™   2000   使用所需的锁类型。当需  

要对对象所获得锁类型进行更精细控制时,可以使用表级锁定提示。这些锁定提示取代了会话的当前事务隔离级别。  

说明     SQL   Server   查询优化器自动作出正确的决定。建议仅在必要时才使用表级锁定提示更改默认的锁定行为。禁止锁定级别反过来会影响并发  

。  

锁定提示   描述    
HOLDLOCK   将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。HOLDLOCK   等同于   SERIALIZABLE。    
NOLOCK   不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅  

应用于   SELECT   语句。    
PAGLOCK   在通常使用单个表锁的地方采用页锁。    
READCOMMITTED   用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL   Server   2000   在此隔离级别上操作。    
READPAST   跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放  

在这些行上的锁。READPAST   锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于   SELECT   语句。    
READUNCOMMITTED   等同于   NOLOCK。    
REPEATABLEREAD   用与运行在可重复读隔离级别的事务相同的锁语义执行扫描。      
ROWLOCK   使用行级锁,而不使用粒度更粗的页级锁和表级锁。    
SERIALIZABLE   用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于   HOLDLOCK。    
TABLOCK   使用表锁代替粒度更细的行级锁或页级锁。在语句结束前,SQL   Server   一直持有该锁。但是,如果同时指定   HOLDLOCK,那么在事务结束  

之前,锁将被一直持有。    
TABLOCKX   使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。    
UPDLOCK   读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK   的优点是允许您读取数据(不阻塞其它事务)并  

在以后更新数据,同时确保自从上次读取数据后数据没有被更改。    
XLOCK   使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。可以使用   PAGLOCK   或   TABLOCK   指定该锁,这种情况下排它锁适用于适当  

级别的粒度。    


例如,如果将事务隔离级别设置为   SERIALIZABLE,并且在   SELECT   语句中使用表级锁定提示   NOLOCK,则键范围锁通常用于维护不采用可串行事务  

。  
USE   pubs  
GO  
SET   TRANSACTION   ISOLATION   LEVEL   SERIALIZABLE  
GO  
BEGIN   TRANSACTION  
SELECT   au_lname   FROM   authors   WITH   (NOLOCK)  
GO  

类别:数据库 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu