Làm thế nào để xem những gì được lưu trong bộ nhớ trong máy chủ SQL 2008?


12

Có cách nào để tìm hiểu những gì được lưu trong bộ nhớ cache trong SQL Server 2008 R2 không? Tôi đã tìm thấy bài viết hay sau đây: http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache . Tuy nhiên, tôi muốn biết có bao nhiêu dữ liệu (ví dụ: phần trăm và KB) được lưu trữ của mỗi bảng và chỉ mục. Có một số cách đơn giản làm thế nào để có được dữ liệu đó?

Câu trả lời:


16

Bạn có thể tìm thấy những gì được lưu trữ trong nhóm bộ đệm (bộ đệm dữ liệu) bằng cách sử dụng truy vấn bên dưới:

Từ đây :

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

Tài liệu tham khảo tuyệt vời: Bên trong Công cụ lưu trữ: Có gì trong vùng đệm? bởi Paul Randal.


5

Bạn có thể sử dụng chế độ xem quản lý động để liệt kê các trang hiện được lưu trong bộ nhớ cache và lọc chúng theo cơ sở dữ liệu:

   select top 100 * from sys.dm_os_buffer_descriptors

Sau đó, bạn có thể thấy DBCC PAGElệnh để liệt kê các trang của một đối tượng. Tài liệu tham khảo tốt: http://www.mssqltips.com/sqlservertip/1578/USE-dbcc-page-to-examine-sql-server-table-and-index-data/

Tuy nhiên, sẽ tùy thuộc vào bạn để kết hợp các kết quả và có vẻ như đó không phải là một nhiệm vụ dễ dàng :). Hãy cho chúng tôi biết khi bạn đưa ra cách hiệu quả để làm điều này.


0

Hãy thử truy vấn SQL này:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.