Querys do Dia a Dia: Como encontrar as conexões que mais ocupam espaço no Tempdb
Fala Pessoal,
Um certo dia, no meio do meu expediente normal de trabalho, recebi a notificação abaixo por e-mail:
T: Label:TempDB is 92 Percentage, threshold value for this monitor is 80 Percentage
Estava acabando o espaço em disco no drive T: onde o Tempdb está armazenado em um dos meus servidores SQL Server.
Na mesma hora, executei a query abaixo, que identifica o espaço que está sendo utilizado por cada conexão do SQL Server:
SELECT A.session_id,B.host_name, B.Login_Name ,
(user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128 as TotalalocadoMB,
D.Text
FROM sys.dm_db_session_space_usage A
JOIN sys.dm_exec_sessions B ON A.session_id = B.session_id
JOIN sys.dm_exec_connections C ON C.session_id = B.session_id
CROSS APPLY sys.dm_exec_sql_text(C.most_recent_sql_handle) As D
WHERE A.session_id > 50
and (user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128 > 100 — Ocupam mais de 100 MB
ORDER BY totalalocadoMB desc
COMPUTE sum((user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128)
Com essa query, identifiquei uma conexão de uma pessoa da nossa própria equipe de TI que estava ocupando 51.5 GB do Tempdb.
Na mesma hora matei a conexão e fui obrigado a executar um Shrink(Fui Obrigado!) para liberar espaço no drive do Tempdb. Caso você não consiga diminuir o espaço ocupado pelo TempDB executanto um shrink, que foi exatamente o meu caso, esse artigo é a solução para esse problema: tempdb, Please allow me to shrink you.
As duas variáveis que são somadas para contar o espaço alocado do Tempdb tem as seguintes propriedades:
User_objects_alloc_page_count – Número de páginas reservadas ou alocadas para objetos de usuários, tais como:
- Tabelas e Índices de Usuários
- Tabelas e Índices de Sistema
- Tabelas e Índices temporários globais
- Tabelas e Índices temporários locais
- Tabelas de variáveis
- Tabelas retornadas em uma Table-Function
Internal_objects_alloc_page_count – Número de páginas reservadas ou alocadas para objetos internos, tais como:
- Work Tables para cursor, Spool Operations e LOB storage
- Work Files para operações como Hash Join
- Sort Runs
Essa query de monitoramento do espaço alocado no TempDB, retorna apenas informações de consultas que já rodaram, portanto, as querys em execução não são consideradas. Para monitorar as querys que ainda estão em execução, aconselho a utilização da procedure Who_is_Active.
Abraços,
Fabrício França Lima
Fala Pessoal,
A algum tempo atrás, no meio do meu expediente recebi a notificação abaixo por e-mail:
T: Label:TempDB is 92 Percentage, threshold value for this monitor is 80 Percentage
O local onde o Tempdb se encontrava armazenado, estava acabando o espaço livre em disco.
Na mesma hora, executei a query abaixo, que identifica o espaço que está sendo utilizado por cada conexão do SQL Server:
SELECT A.session_id,B.host_name, B.Login_Name ,
(user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128 as totalalocadoMB,
D.Text
FROM sys.dm_db_session_space_usage A
JOIN sys.dm_exec_sessions B ON A.session_id = B.session_id
JOIN sys.dm_exec_connections C ON C.session_id = B.session_id
CROSS APPLY sys.dm_exec_sql_text(C.most_recent_sql_handle) As D
WHERE A.session_id > 50
and (user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128 > 100 — > 100 MB
ORDER BY totalalocadoMB desc
COMPUTE sum((user_objects_alloc_page_count + internal_objects_alloc_page_count)*1.0/128)
Com essa query identifiquei uma conexão que estava ocupando 51.5 GB do Tempdb.
Na mesma hora, matei a conexão e fui obrigado a executar um Shrink(Fui Obrigado!) para liberar espaço na letra do Tempdb. Caso não consiga liberar espaço no TempDB executanto um shrink, que foi exatamente o meu caso, esse artigo é a solução para esse problema: tempdb, Please allow me to shrink you.






Redes Sociais