第二步,通过SQL语句分析锁定情况
由于SQL SERVER 2008相比SQL SERVER 2005中的“活动监视器”有了比较大的改变,所以下而我们通过SQL语句进行分析,使用SQL语句进行分析需要通过SP_WHO、SP_WHO2、SP_LOCK等系统存储过程、Master.sys.sysprocesses系统视图,或从SQL 2005(2008)新提供的动态视图管理(DMV)sys.dm_exec_session、sys.dm_tran_locks等获取相关信息。
通过master.sys.sysprocesses 视图找出最初锁住资源及导致后面一连串进程被迫停止的等待源头。
下面我们举一个例子来具体说明,以下代码在SQL SERVER 2005/2008中都可以使用:
在SQL SERVER 2005/2008中的Microsoft SQL Server Management Studio中打开一个新的查询界面,执行 exec SP_LOCK。结果如下图。
图1
从图1中可以观察到两个进程的相互作用,其中进程“53”要求模式为“独占(X)”,已经被获取允许“GRANT”;进程“56”要求模式为“共享(S)”正等候(WAIT)处理。
如上图1中进程“56”(执行SELECT语句的查询连接)被进程“53”(执行UPDATE语句的查询连接)封锁的现象,并从Book数据表锁定可以看出是因为“独占”锁定某一条索引键值(要求类型为KEY),导致进程“56”放置共享锁定(要求模式为“S”),而在等待状态(要求状态为WAIT)。
4. 在SQL SERVER 2005/2008中的Microsoft SQL Server Management Studio中打开一个新查询界面,通过另外一条连接来执行程序代码(例一),执行结果如下图。
图2
在上图2中可以看出例二查询代码开启事务之后,未关闭事务,因此状态(status)为sleeping,但并未被其他进程锁住(blk),所以“是否被锁住”列的数据为0,没有执行命令,也没有等待某种资源。另外由于该查询的数据库连接是Test,所以数据库名称为Test。
5. 查询sysprocesses系统视图呈现有问题的交易的现象可能有许多种,但最常见的一种就是status字段等于sleeping,waittype字段等于0x0000,last_batch字段表示离最后一次批处理执行的时候已经有一段距离了,以及open_tran字段大于0。例如,直接执行代码例二,这时事务已经开启,但是迟迟没有结束,就可能是程序没有做好事务管理。
可以在在SQL SERVER 2005/2008中的Microsoft SQL Server Management Studio中打开一个新查询界面中执行下面的语句,以查询有问题的连接
如下图。
图3
status字段等于sleeping表示没有指示符正在执行,waittype字段等于0x0000代表此连接没有等待任何资源,last_batch字段表示最后一次SQL语句执行的时间,如果此时间离现在有一段时间了,以及open_tran字段大于0,就有问题了。一段时间过去了,没有等待任何资源,也没有执行任何SQL语句,那么为什么还要开启事务?
除了上述查询sysprocesses系统视图之外,SQL SERVER 2005/2008 可以通过“sys.dm_tran_locks动态管理视图”呈现目前使用中相关的锁定信息。返回的每一条记录都代表一个已经授权或等待授权的锁定。在结果集的数据行中,主要分成“资源”与“请求”两类,其字段分别以resource与request为前缀。资源群组描述已经锁定或等待的资源,而请求群组则描述已经获取或等待中的锁定请求。
在Sql 2005 的TEST执行上面的代码,结果如下图。(这是针对Wbk_pde_list数据表)
图4
在Sql 2008 的TEST数据库上执行上面的代码,结果如下图。(这是针对BOOK数据表)
图5
备注:
以上第二步是通过在Microsoft SQL Server Management Studio中执行代码进行查询与分析加锁情况,而在SQL SERVER 2005中则可以通过Microsoft SQL Server Management Studio管理获取相当多的信息,方便让你决定当前应该采取什么样步骤。
上而第二步中获取的信息都可以在SQL SERVER 2005中通过Microsoft SQL Server Management Studio中的“活动监视器”获取。
例如通过“活动监视器--》按对象分类的锁”,下拉菜单中选择相应的对象。(如下图)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/23460.html