วิธีดูสิ่งที่แคชในหน่วยความจำใน SQL Server 2008


13

มีวิธีหาแคชใน SQL Server 2008 R2 หรือไม่? ฉันได้พบบทความที่ดีต่อไปนี้: http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache อย่างไรก็ตามฉันต้องการทราบจำนวนข้อมูล (เช่นเป็นเปอร์เซ็นต์และ KB) ของแต่ละตารางและดัชนี มีวิธีง่ายๆในการรับข้อมูลดังกล่าวหรือไม่?

คำตอบ:


16

คุณสามารถค้นหาสิ่งที่เก็บไว้ในบัฟเฟอร์พูล (แคชข้อมูล) โดยใช้แบบสอบถามด้านล่าง:

จากที่นี่ :

select
       count(*)as cached_pages_count,
       obj.name as objectname,
       ind.name as indexname,
       obj.index_id as indexid
from sys.dm_os_buffer_descriptors as bd
    inner join
    (
        select       object_id as objectid,
                           object_name(object_id) as name,
                           index_id,allocation_unit_id
        from sys.allocation_units as au
            inner join sys.partitions as p
                on au.container_id = p.hobt_id
                    and (au.type = 1 or au.type = 3)
        union all
        select       object_id as objectid,
                           object_name(object_id) as name,
                           index_id,allocation_unit_id
        from sys.allocation_units as au
            inner join sys.partitions as p
                on au.container_id = p.partition_id
                    and au.type = 2
    ) as obj
        on bd.allocation_unit_id = obj.allocation_unit_id
left outer join sys.indexes ind 
  on  obj.objectid = ind.object_id
 and  obj.index_id = ind.index_id
where bd.database_id = db_id()
  and bd.page_type in ('data_page', 'index_page')
group by obj.name, ind.name, obj.index_id
order by cached_pages_count desc

การอ้างอิงที่ดีเยี่ยม: ภายในเครื่องมือจัดเก็บ: มีอะไรในบัฟเฟอร์พูล? โดย Paul Randal


5

คุณสามารถใช้มุมมองการจัดการแบบไดนามิกเพื่อแสดงรายการหน้าแคชปัจจุบันและกรองพวกเขาโดย database_id:

   select top 100 * from sys.dm_os_buffer_descriptors

จากนั้นคุณสามารถดูDBCC PAGEคำสั่งเพื่อแสดงรายการหน้าของวัตถุ การอ้างอิงที่ดี: http://www.mssqltips.com/sqlservertip/1578/using-dbcc-page-to-examine-sql-server-table-and-index-data/

อย่างไรก็ตามขึ้นอยู่กับคุณว่าจะรวมผลลัพธ์เข้าด้วยกันและดูเหมือนจะไม่ใช่เรื่องง่าย :) แจ้งให้เราทราบเมื่อคุณคิดวิธีที่มีประสิทธิภาพในการทำสิ่งนี้


0

ลองใช้แบบสอบถาม SQL นี้:

select count(*)*8/1024 AS 'Cached Size (MB)'        
,case database_id                
when 32767 then 'ResourceDB'                
else db_name(database_id)                
end as 'Database'
from sys.dm_os_buffer_descriptors
where page_type in
(
'INDEX_PAGE'
,'DATA_PAGE'
)
group by db_name(database_id), database_id
order by 'Cached Size (MB)' desc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.