Files
2026-05-18 06:40:19 +00:00

37 lines
1.3 KiB
SQL

---------------------------------------------------------------------------------------------------------------------------
-- Purpose: Find out how much SQL Server memory each index or heap is currently using. Run this in the user database.
-- More Information: https://www.mssqltips.com/sqlservertip/2393/determine-sql-server-memory-use-by-database-and-object/
-- Revision: 2019-05-21
--
;WITH src
AS (SELECT
[Object] = o.name,
[Type] = o.type_desc,
[Index] = COALESCE(i.name, ''),
[Index_Type] = i.type_desc,
p.[object_id],
p.index_id,
au.allocation_unit_id
FROM sys.partitions AS p
INNER JOIN sys.allocation_units AS au ON p.hobt_id = au.container_id
INNER JOIN sys.objects AS o ON p.[object_id] = o.[object_id]
INNER JOIN sys.indexes AS i ON o.[object_id] = i.[object_id] AND p.index_id = i.index_id
WHERE au.[type] IN (1, 2, 3)
AND o.is_ms_shipped = 0)
SELECT
src.[Object],
src.[Type],
src.[Index],
src.Index_Type,
buffer_pages = COUNT_BIG(b.page_id),
buffer_mb = COUNT_BIG(b.page_id) / 128
FROM src
INNER JOIN sys.dm_os_buffer_descriptors AS b ON src.allocation_unit_id = b.allocation_unit_id
WHERE b.database_id = DB_ID()
GROUP BY src.[Object],
src.[Type],
src.[Index],
src.Index_Type
ORDER BY buffer_pages DESC;