通过工具确定阻塞会话,并且确定发生阻塞的表和操作该表的sql语句。

环境准备

Microsoft Windows XP Professional 32位机

双核CPU

2G内存

创建表并插入数据

create table shi(a int,b int);

insert into shi values(1,1);

案例现场

通过 insert into shi select * from shi; 插入 33554432 条形如(1, 1)的数据时发现等待较长时间后插入语句仍在运行。 (为了模拟环境需要在插入16777216条数据的同时,插入33554432条数据)

问题确认

打开运行时诊断工具查看等待链选项卡:发现当前存在两条等待链,并且通过等待关系图可以得出发生僵死的会话(1,1)(会话id、会话序列号)正在等待会话(0、1)。如图:

../../../../../../_images/image1342.png

图20-22等待链功能图

此时可以看到有多个事务正在执行,并且可以查看该事务的阻塞情况,如图:

../../../../../../_images/image1352.png

图20-23 事务功能图

查看lock锁选项卡发现当前被操作的表为shi。

../../../../../../_images/image1362.png

图20-24 lock锁功能图

通过等待链关系得出造成阻塞的最终会话为会话id为0,会话序列号为1的会话。进一步查看会话管理功能界面查找到该会话的详细信息,如图:

../../../../../../_images/image1372.png

图20-25会话详细信息功能图

../../../../../../_images/image1382.png

图20-26会话中执行的sql查看功能图

由此可以看出此时会话(0、1)的具体情况,并且查看会话正在执行的sql语句(如图20-20会话中执行的sql查看功能图),可以看出该会话正在执行的sql语句为insert into shi select * from shi;由此确认造成僵死的原因为用户物理地址为10-78-93-43-38,操作系统机器名为PJYXHDTWHEYZZK2的机器正在通过isql向表shi插入数据。