Sql Server Profiler一个很重要的应用场景就是监视分析死锁。
下面通过一个例子来学习Profiler是如何监视死锁的。
1. 创建测试数据模拟死锁, 创建表Table_A和Table_B并插入测试数据。
CREATE TABLE Table_A ( id int, num int ) CREATE TABLE Table_B ( id int, num int ) INSERT INTO Table_A VALUES(1,20) INSERT INTO Table_A VALUES(2,33) INSERT INTO Table_B VALUES(3,23) INSERT INTO Table_B VALUES(4,32)
2. 打开SQL Server Profiler, 新建跟踪监视死锁,在事件选择中选择要监视的事件,运行跟踪:
3. 新建两个查询窗口,按照步骤执行语句。
-- 查询窗口1 BEGIN TRANSACTION --step 1 UPDATE Table_A SET num = 55 WHERE id = 1 --step 1 SELECT * FROM Table_B --step 3 COMMIT TRANSACTION
-- 查询窗口2 BEGIN TRANSACTION --step 2 UPDATE Table_B SET num = 66 WHERE id = 4 --step 2 SELECT * FROM Table_A --step 4 COMMIT TRANSACTION
4. 执行完step 4之后会发现有死锁发生,但是只有一个不是太详细的错误消息。
5. 回到Profiler界面,选择Deadlock graph,可以看到比较详细的死锁原因,鼠标放到椭圆上还可以显示死锁的语句,通过这些信息我们就可以更快更准确的找到死锁原因。
时间: 2024-10-15 06:18:10