监控锁的使用
锁的对象是数据库中的数据对象,如关系型数据库中的表、记录、属性、索引等, 对数据
对象在实际的生产系统中,
常见的锁问题包括锁等待、死锁等。我们通过
的输出可以查看到系统总体上锁的使用情况,包括锁申请数、锁等待数及死锁情况。可以进一
步通过
查看到每一个表的使用锁的情况。另外,可以通过
语句监控锁的使
用情况。
下面介绍一个常用的通过
命令找到锁的拥有者,解决对象被锁的实例。
1.
锁问题现象描述
计划对表
增加一个字段:
在执行该语句时,
返回表被锁的错误提示,尝试多次都不能成功。
!
:
"#$$
%%&'()'*+$
$
解决办法
按如下步骤找到对表
加锁的进程,然后杀掉进程,释放锁。
%$
查询表
在数据库中
%,
进制的
#-$
*.#--/*-011
返回值为:
2.2222%22
$
通过表的
#-
找到目前正在以锁定方式访问该表的用户线索。
34522%2246
/#-/789
!:%22&:,2!:%2;<=(22%2222
!:%%2 2&:,2!:%2 ;<=22%22%2 2
&$
通过锁的所有者
&,2
找到锁的
信息,
为
&>
的使用者
对表
加上了
:
个锁。通过
项可以看到由于
&,2
数据加锁导致了用户
?:&
等待。
3#45&:,246
@#/#
&:,2AB&> ?:&2::2
!$
通过
(&>
, 可以得到具体的对表上锁的
及相关信息。
3&>
和
C&>
我们可以查到该
的具体情况:由那个应用程序发起的
以及使用了哪些锁。
如果需要终止占用锁的
,则可以使用
-9
命令杀掉
:
-9
&>$
我们在
的使用中可能要快速打印当前对指定表进行加锁的
及
信
息,这时我们可以通过如下
*'$*
进行操作。
使用方法:
$*--
其中
-
设置为表所在的数据库名,
-
设置为表名。
$*
内容如下:
D*E#$#$-/F/-
评论