latch/lock 통계
SELECT
'Sum_Wait_Stat.' as [What],sum(page_lock_wait_in_ms) as page_lock_wait_in_ms,sum(row_lock_wait_in_ms) as row_lock_wait_in_ms,
sum(page_latch_wait_in_ms) as page_latch_wait_in_ms,sum(page_io_latch_wait_in_ms) as page_io_latch_wait_in_ms
FROM [sys].[dm_db_index_operational_stats](DB_ID(), NULL, NULL, NULL) iops
INNER JOIN [sys].[indexes] i
ON i.[object_id] = iops.[object_id] AND i.[index_id] = iops.[index_id]
object 별 latch/lock 통계
SELECT 'Wait_Stat.' as [What],DB_NAME([database_id]) AS [Database] ,OBJECT_NAME(iops.[object_id], [database_id]) AS [ObjectName]
,CASE WHEN i.[is_unique] = 1 THEN 'UNIQUE ' ELSE '' END + i.[type_desc] AS [IndexType],i.[name] AS [IndexName] ,
page_io_latch_wait_in_ms ,page_latch_wait_in_ms, page_lock_wait_in_ms, row_lock_wait_in_ms,
iops.[page_io_latch_wait_count], page_lock_wait_count, iops.[page_latch_wait_count],page_lock_count,row_lock_count,row_lock_wait_count,
leaf_allocation_count,leaf_insert_count,leaf_delete_count,leaf_update_count,
nonleaf_insert_count,nonleaf_delete_count,nonleaf_update_count,
nonleaf_allocation_count --,*
FROM [sys].[dm_db_index_operational_stats](DB_ID(), NULL, NULL, NULL) iops
INNER JOIN [sys].[indexes] i
ON i.[object_id] = iops.[object_id] AND i.[index_id] = iops.[index_id]
where i.[type_desc] !='HEAP' and OBJECT_NAME(iops.[object_id], [database_id]) not like 'sys%'
-- and OBJECT_NAME(iops.[object_id], [database_id])= ' '
ORDER BY iops.page_latch_wait_in_ms + iops.page_io_latch_wait_in_ms DESC
실시간 latch
SELECT 'RealTime_Latch ' as [What],wt.session_id, wt.wait_type, wt.wait_duration_ms
, s.name AS schema_name , o.name AS object_name , i.name AS index_name ,*
FROM sys.dm_os_buffer_descriptors bd
JOIN (
SELECT *
--resource_description
, CHARINDEX(':', resource_description) AS file_index
, CHARINDEX(':', resource_description, CHARINDEX(':', resource_description)+1) AS page_index
, resource_description AS rd
FROM sys.dm_os_waiting_tasks wt
WHERE wait_type LIKE 'PAGELATCH%' or wait_type LIKE 'PAGEIOLATCH%'
) AS wt
ON bd.database_id = SUBSTRING(wt.rd, 0, wt.file_index)
AND bd.file_id = SUBSTRING(wt.rd, wt.file_index+1, 1) --wt.page_index)
AND bd.page_id = SUBSTRING(wt.rd, wt.page_index+1, LEN(wt.rd))
JOIN sys.allocation_units au ON bd.allocation_unit_id = au.allocation_unit_id
JOIN sys.partitions p ON au.container_id = p.partition_id
JOIN sys.indexes i ON p.index_id = i.index_id AND p.object_id = i.object_id
JOIN sys.objects o ON i.object_id = o.object_id
JOIN sys.schemas s ON o.schema_id = s.schema_id
order by wt.wait_duration_ms desc;
'SQL Server > 스크립트' 카테고리의 다른 글
[스크립트] Adhoc/Proc 실시간or 통계 조회 (0) | 2022.03.23 |
---|---|
[스크립트] Audit Trace (0) | 2022.03.16 |
[스크립트] 백업 및 복구 스크립트 (0) | 2022.01.06 |
[스크립트] DBtoDB 참조관계 조회 (0) | 2022.01.05 |
[스크립트] DB 배치 정보 확인 (0) | 2022.01.05 |