笔记21 Latch锁相关语句

笔记21 Latch锁相关语句

 1 --Latch锁相关语句
 2 --我们可以查询下面的语句了解一下具体的等待种类:
 3 -- Latch的等待主要有三种。
 4 -- 1.Buffer (BUF) Latch. 用来保护索引或数据页。也包括PFS, GAM, SGAM和IAM数据页。等待类型是PAGELATCH_*模式
 5 -- 2.Non-buffer(Non-BUF) Latch, 除了上述数据结构以外的其他内存结构。等待类型是LATCH_*模式
 6 -- 3.IO Latch, 保护数据从磁盘到页面的读写过程,等待类型是PAGEIOLATCH_*模式
 7 
 8 --SELECT * FROM sys.dm_os_wait_stats WHERE wait_type like '%Latch%'
 9 
10 
11 --A time-out occurred while waiting for buffer latch -- type 4, bp 000000097BFDEDC0, page 1:19239, stat 0xc00009, database id: 5, allocation unit Id: 72057615247867904, task 0x0000000005E594C8 : 0, waittime 300, flags 0x1018, owning task 0x0000000000169DC8. Not continuing to wait.
12 --
13 --这里,type 4 是等待的类型。通过下面的查询,我们可以知道, type为4的Latch是EX模式。
14 
15 SELECT * FROM sys.dm_xe_map_values where name = 'latch_mode'
16 
17 --使用以下一些列查询,我们可以通过Allocation Unit ID得到其对应的表名。(当然我们也可以通过Page的具体信息来获得表名。用DBCC PAGE命令)
18 
19 --结果中的container_id就是partition_id。
20 
21 SELECT * FROM sys.allocation_units where allocation_unit_id= '72057615247867904'
22 
23 --得到object_id
24 
25 SELECT * FROM sys.partitions where partition_id = xxxx
26 
27 --得到name
28 
29 SELECT * FROM sys.objects where object_id = yyyy
30 
31 
32 --要求每次碰到Latch Timeout,都要生成一个内存转储,我们可以用traceflag 838,如下面的命令:
33 dbcc traceon(838, -1)

 

posted @ 2013-08-02 21:44 桦仔 阅读(...) 评论(...)  编辑 收藏