一、sys.dm_os_memory_clerks
1. 查詢dmv
sys.dm_os_memory_clerks返回sql server例項中當前處於活動狀態的全部記憶體clerk的集合。跟蹤這個dmv,可以看到記憶體是如何被sql server消耗。
select type,
sum(virtual_memory_reserved_kb) as virtual_memory_reserved_sum,
sum(virtual_memory_committed_kb) as virtual_memory_committed_sum,
sum(awe_allocated_kb) as awe_allocated_sum,
sum(shared_memory_reserved_kb) as shared_memory_reserved_sum,
sum(shared_memory_committed_kb) as shared_memory_committed_sum,
sum(multi_pages_kb) as multi_pages_sum,
sum(single_pages_kb) as single_pages_sum
from sys.dm_os_memory_clerks
group by type
order by type
2. 各列的解釋
(1)type
momery clerk的名稱。大致可以根據名稱猜出記憶體的用途。
(2)virtual_memory_reserved_sum 和 virtual_memory_committed_sum
virtual_memory_reserved_sum 是記憶體clerk reserve的虛擬記憶體量。這是由使用此clerk的元件直接保留的記憶體量。在多數情況下,只有使用buffer pool的記憶體clerk才會有這種機制。
virtual_memory_committed_sum 是記憶體clerk commit的虛擬記憶體量。這是clerk提交的記憶體量。提交的記憶體量應始終小於保留的記憶體量。這部分記憶體,主要來自database pages。
(3)awe_allocated_sum
記憶體clerk使用awe分配的記憶體量。
(4)shared_memory_reserved_sum 和 shared_memory_committed_sum
shared_memory_reserved_sum 是記憶體clerk保留的共享記憶體量。保留以供共享記憶體和檔案對映使用的記憶體量。
shared_memory_committed_sum 是記憶體clerk提交的共享記憶體量。
這2個列的值,可以追蹤shared memory的大小。一般shared memory的值都很小。
(5)multi_pages_sum 和 single_pages_sum
multi_pages_sum 是分配的多頁記憶體量。此內存在緩衝池外面分配,也就是傳統意義上sql server自己的**使用的multi-page的大小。
single_pages_sum 是通過stolen page分配的單頁記憶體量。也就是說,是buffer pool裡的stolen memory的大小。
3. 估算不同記憶體的大小
(1)reserved 和 commit
即 sum(virtual_memory_reserved_kb) 和 sum(virtual_memory_committed_kb) 。
(2)stolen
等於 sum(single_pages_kb) + sum(multi_pages_kb)
(3)buffer pool(single page)
等於 sum(virtual_memory_committed_kb) + sum(single_pages_kb)
(4)multi-page
即 sum(multi_pages_kb)
4. 侷限性
通過這個dmv可以看到所有buffer pool(或者稱為single page)的使用,以及multi-page裡被sql server**用掉的記憶體。執行在multi-page裡面的第三方**所申請的記憶體是不能被這個檢視跟蹤的。
二、檢視sql server快取的資料頁面資訊
通過sys.dm_os_buffer_descriptors,可以檢視sql server緩衝池中當前所有資料頁的資訊。
use db01
select b.database_id ,db=db_name(b.database_id) , p.object_id , p.index_id ,
buffer_count = count(*)
from sys.allocation_units a,
sys.dm_os_buffer_descriptors b,
sys.partitions p
where a.allocation_unit_id = b.allocation_unit_id
and a.container_id = p.hobt_id
and b.database_id = db_id()
group by b.database_id ,p.object_id ,p.index_id
order by b.database_id , buffer_count desc
三、檢視sql server快取的執行計畫資訊
可以通過sys.dm_exec_cached_plans檢視執行計畫都快取了哪些內容。
select cacheobjtype,objtype
from sys.dm_exec_cached_plans
group by cacheobjtype,objtype
通常快取的執行計畫的物件有:proc(儲存過程)、prepared(預定義語句)、adhoc(動態查詢)、replproc(複製篩選過程)、trigger、view、default(預設值)、usrtab(使用者表)、systab(系統表)、check(check約束)、rule(規則)等。
通過下面的查詢,可以看到各種物件占用了多少記憶體。
select cacheobjtype,objtype, sum(size_in_bytes) as sum_size_in_bytes,
sum(bucketid) as cache_counts
from sys.dm_exec_cached_plans
group by cacheobjtype,objtype
通過dmv檢視的消耗情況,以及快取的資訊。
七 記憶體優化(3)使用DMV
一 sys.dm os memory clerks 1.查詢dmv sys.dm os memory clerks返回sql server例項中當前處於活動狀態的全部記憶體clerk的集合。跟蹤這個dmv,可以看到記憶體是如何被sql server消耗。select type,sum virtual...
七 記憶體優化(3)使用DMV
一 sys.dm os memory clerks 1.查詢dmv sys.dm os memory clerks返回sql server例項中當前處於活動狀態的全部記憶體clerk的集合。跟蹤這個dmv,可以看到記憶體是如何被sql server消耗。select type,sum virtual...
有關鎖和記憶體使用的DMV
檢視連線當前資料庫的spid所加的鎖 set transaction isolation level read uncommitted select db name resource database id as databasename request session id resource ty...