what you can do is
Find out the database that consumes highest memory in buffer pool using below :
SELECT COUNT(*) AS cached_pages_count , ( COUNT(*) * 8.0 ) / 1024 AS MB , CASE database_id WHEN 32767 THEN 'ResourceDb' ELSE DB_NAME(database_id) END AS Database_name FROM sys.dm_os_buffer_descriptors GROUP BY database_id
Drill down the database using below query :
set nocount on; set transaction isolation level read uncommitted; select count(*)as cached_pages_count, (COUNT(*) * 8.0) / 1024 AS Total_MB_Occupied, -- convert pages into MB - the page size is 8 KB for sql server 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
Reference :
- A quick look at: sys.dm_os_buffer_descriptors
- What's swimming in your bufferpool?
- sys.dm_os_buffer_descriptors aggregations -- more detailed info - what objects/structures/files/etc. are consuming the largest amount of space at a given time (or over time) within the Sql Server buffer pool.