Getting your Trinity Audio player ready...
|
Em sua maioria, a memória utilizada pelo SQL Server é utilizada para armazenar dados (buffer) e planos de execução (cache de procedure). Nesse post vou mostrar quanta memória está alocada para cache de procedures
O SQL Server armazena o cache usando 8kb por página de dados. Usando a dynamic view sys.dm_os_memory_cache_counters podemos ver um resumo do que está alocado:
SELECT TOP 6 LEFT([name], 20) as [NOME], LEFT(]TYPE], 20) as [TIPO], [single_pages_kb] + [multi_pages_kb] as [cache_kb], [entries_count] FROM sys.dm_os_memory_cache_counters order by single_pages_kb + multi_pages_kb DESC |
Vou focar nos 3 principais resultados dessa query:
- CACHESTORE_OBJCP – Esse são planos compilados para stored procedures, triggers e functions
- CACHESTORE_SQLCP – São os planos que não fazem parte de procedures, functions e triggers, inclui basicamente SQL dinâmico.
- CACHESTORE_PHDR – Esse é responsável por verificar a sintaxe de views, constrains, também resolve o nome de tabelas e colunas
Você pode monitorar o numero de páginas no cache usando o Performance Monitor usando SQLServer:Plan Cache que armazena os contadores de Páginas de Cache. SQL Plans (CACHESTORE_SQLCP), Object Plans (CACHESTORE_OBJCP) e Bound Trees (CACHESTORE_PHDR).
Nos podemos ver individualmente as entradas no cache usando a dynamic view sys.dm_exec_cached_plans
SELECT usercounts, cacheobjtype, objtype, plan_handle FROM sys.dm_exec_cached_plans |
A query lista os planos de execução mais utilizados. Ela inclui os planos para stored procedures, adhoc ou SQL dinâmico, triggers, views. Se você quiser ver o SQL associado ao plano (que no final das contas é o que realmente queremos) será necessário usar o sys.dm_exec_sql_text:
SELECT TOP 100 objtype, p.size_in_bytes LEFT(., 150) as [SQL] from sys.dm_exec_cached_plans p outer apply sys.dm_exec_sql_text (p.plan_handle) sql order by usercount desc |