A menudo utilizamos multitud de consultas T-SQL y scripts cuando estoy solucionando problemas de memoria e incluso para supervisar el uso de memoria de SQL Server. Ahora publicaremos estos scripts aquí en el espíritu de compartir, como estoy seguro de que hay otras variaciones de estos mismos scripts. Estas secuencias de comandos sólo son útiles en la solución de problemas fuera de la memoria (OOM) y otras cuestiones en el Buffer Pool. Este blog no cubre Virtual Dirección / memoria virtual o la memoria de seguimiento fuera del Buffer Pool.


– Consulta para encontrar el uso de Buffer Pool para cada base de datos
– Cada una de estas páginas son mostradas en la cache del Buffe, esto significa que están en páginas IN_RAM.

DECLARE @total_buffer INT;
SELECT @total_buffer = cntr_value
FROM sys.dm_os_performance_counters
WHERE RTRIM([object_name]) LIKE’%Buffer Manager’
AND counter_name = ‘Total Pages’;

;WITH BufCount AS
(
SELECT
database_id, db_buffer_pages = COUNT_BIG(*)
FROM sys.dm_os_buffer_descriptors
WHERE database_id BETWEEN 5 AND 32766
GROUP BY database_id
)
SELECT
[Database_Name] = CASE [database_id] WHEN 32767
THEN’MSSQL System Resource DB’
ELSE DB_NAME([database_id]) END,
[Database_ID],
db_buffer_pages as [Buffer Count (8KB Pages)],
[Buffer Size (MB)] = db_buffer_pages / 128,
[Buffer Size (%)] = CONVERT(DECIMAL(6,3),
db_buffer_pages * 100.0 / @total_buffer)
FROM BufCount
ORDER BY [Buffer Size (MB)] DESC;


— Consulta que muestra las solicitudes concurrentes actuales, otorgada y solicitada para cada sesión activa.
— Esto muestra la memoria actualmente asignada para los niveles de instancia de sesión.
— Esto puede ser utilizado en un script para obtener el consumo a través del tiempo.

SELECT mg.session_id, mg.requested_memory_kb, mg.granted_memory_kb, mg.used_memory_kb, t.text, qp.query_plan
FROM sys.dm_exec_query_memory_grants AS mg
CROSS APPLY sys.dm_exec_sql_text(mg.sql_handle) AS t
CROSS APPLY sys.dm_exec_query_plan(mg.plan_handle) AS qp
ORDER BY 1 DESC OPTION (MAXDOP 1)


— SQL Server 2005/2008/R2
— Top de elementos ordenados por uso de memoria
SELECT TOP(20) [type] as [Memory Clerk Name], SUM(single_pages_kb) AS [SPA Memory (KB)],
SUM(single_pages_kb)/1024 AS [SPA Memory (MB)]
FROM sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC;

— SQL Server 2012 version
— Top clerks ordered by memory used
SELECT TOP(20) [type] as [Memory Clerk Name], SUM(pages_kb) AS [SPA Memory (KB)],
SUM(pages_kb)/1024 AS [SPA Memory (MB)]
FROM sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(pages_kb) DESC;

(Visitado 2.417 veces, 1 visitas hoy)