Buffer Pool extension is new feature in SQL 2014
We have two system tables to get information for buffer pool extension
1. sys.dm_os_buffer_pool_extension_configuration
SELECT * FROM sys.dm_os_buffer_pool_extension_configuration
Here we can see buffer pool extension is enabled or not
file_id = 0 means as of now no data is in buffer pool extension.
file_id is same column which is used to connect dm_os_buffer_descriptors to get which pages are assigned to buffer pool extension
Lets see example here
SELECT
COUNT(*) AS cached_pages_count
FROM
sys.dm_os_buffer_descriptors AS
bd
JOIN
sys.dm_os_buffer_pool_extension_configuration
AS bpec
ON bd.file_id = bpec.file_id
ORDER BY
cached_pages_count DESC;
This will give number of pages which are stored in buffer pool extension
This shows 0 as we have no data in buffer pool extension as of now.
2.sys.dm_os_buffer_descriptors
SELECT * FROM sys.dm_os_buffer_descriptors
Each cached data page has one row in buffer descriptor
It gives information for database, object, data_type , row_count and other information for catched page
Lets see some example here
To get number of pages group by database
Database_id 32767 is used for resource database.
SELECT
COUNT(*)AS cached_pages_count ,
CASE database_id
WHEN 32767 THEN 'ResourceDb'
ELSE db_name(database_id)
END AS
database_name
FROM
sys.dm_os_buffer_descriptors
GROUP BY
DB_NAME(database_id) ,
database_id
ORDER BY
cached_pages_count DESC;
To get count of pages group by type of allocation unit.
select
count(*)
cached_page_count,
type_desc
from
sys.dm_os_buffer_descriptors bd
join
sys.allocation_units au
on bd.allocation_unit_id
= au.allocation_unit_id
group by
type_desc
To get information object wise , here we will use objectproperty(<object_id>, 'isusertable')
to get idea which user tables are in cache
SELECT
COUNT(*)AS cached_pages_count ,
name ,
index_id
FROM
sys.dm_os_buffer_descriptors AS
bd
INNER JOIN
(
SELECT
object_name(object_id) AS name
,
index_id ,
allocation_unit_id,
object_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_name(object_id) AS name ,
index_id,
allocation_unit_id,
object_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
WHERE
database_id = DB_ID()
and OBJECTPROPERTY(object_id,'isusertable') = 1
GROUP BY
name,
index_id
ORDER BY
cached_pages_count DESC;
No comments:
Post a Comment