Usuário com melhor resposta
Histórico de Consultas SQL SERVER

Pergunta
-
Bom Dia
Gostaria de saber se no sql server 2008 eu consigo via dmvs saber se em determinado momento houve excesso de conexões no banco de dados, blocking, qual foi o lider dos bloqueios, histórico de tempos de execução de uma procedure, memory grants, quais foram os planos de execução anteriores para o mesmo statement, existe este armazenamento no SQL SERVER 2008 R2, ou terei que criar um, existe um how to para isso? Criar um repositório com estas informações para posterior consulta e identificar cauza raiz para relatar em postmorten.
Grato,
Maurício
Respostas
-
Maumauboy,
Você já verificou nos logs no SQL Server?
Estou acreditando que seja falta de memória em cache para armazenar e posteriormente processar a sua query.
Por outro lado sei da existência de um bug na versão 2008 do SQL Server justamente similar ao seu cenário, veja se este post ajuda: https://support.microsoft.com/en-us/kb/982854
Você tem qual service pack instalado neste SQL Server?
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP, Moderator quinta-feira, 28 de abril de 2016 13:50
- Marcado como Resposta maumauboy sábado, 14 de maio de 2016 10:51
Todas as Respostas
-
Maumauboy,
Sim é possível através do uso de Extended Events em alguns cenários combinando com views e dmvs.
Veja neste exemplo, como obter informações sobre o tempo médio de uso de CPU:
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time], SUBSTRING(st.text, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st ORDER BY total_worker_time/execution_count DESC;
Neste outro como obter informações sobre transações em cache:
SELECT QT.text, QP.query_plan, QS.execution_count, QS.total_elapsed_time, QS.last_elapsed_time, QS.total_logical_reads FROM sys.dm_exec_query_stats as QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as QT CROSS APPLY sys.dm_exec_query_plan (QS.plan_handle) as QP ORDER BY QS.execution_count DESC
Este outro mesmo informações sobre as querys em execução:
SELECT DES.SESSION_ID, DES.CPU_TIME, DES.READS, DES.WRITES, DES.LOGICAL_READS, DES.ROW_COUNT, DER.SESSION_ID, DES.STATUS, DES.HOST_NAME, DES.PROGRAM_NAME, DES.LOGIN_NAME, DES.ORIGINAL_LOGIN_NAME, DEC.CLIENT_NET_ADDRESS, DEC.AUTH_SCHEME, DEC.NET_TRANSPORT, SUBSTRING(T.[TEXT], DER.[STATEMENT_START_OFFSET] / 2, COALESCE(NULLIF(DER.[STATEMENT_END_OFFSET], - 1) / 2, 2147483647)) AS COMANDO FROM SYS.DM_EXEC_SESSIONS AS DES INNER JOIN SYS.DM_EXEC_REQUESTS DER ON DER.BLOCKING_SESSION_ID = DES.SESSION_ID INNER JOIN SYS.DM_EXEC_CONNECTIONS DEC ON DEC.SESSION_ID = DES.SESSION_ID INNER JOIN SYS.DM_EXEC_REQUESTS DER2 ON DER2.SESSION_ID = DES.SESSION_ID CROSS APPLY SYS.DM_EXEC_SQL_TEXT(DER.[SQL_HANDLE]) AS T GO
Por último, um exemplo de como obter informações sobre a ocorrência de backups:
-- When SQL Server Backups Occurred -- DECLARE @path NVARCHAR(260) SELECT @path=path FROM sys.traces WHERE is_default = 1 --Security Audit: Audit Backup Event SELECT DatabaseName, TextData, Duration, StartTime, EndTime, SPID, ApplicationName, LoginName FROM sys.fn_trace_gettable(@path, DEFAULT) WHERE EventClass IN (115) and EventSubClass=1 ORDER BY StartTime DESC
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Bom Dia
O problema ocorreu no dia 22/04 entre 11:00 e 11:30 , o erro ocorrido foi o seguinte:
There is insufficient system in resource pool 'internal' to run this query.
Me parece que podem ter ocorrido dois problemas.
1- Falta de memória por excesso de conexões com memory grants específicos.
2- Falta de memória por consumo alto no buffer cache por uma determinada consulta.
Preciso do histórico entre 11:00 e 11:30 do dia 22 para saber se houve excesso de sessões com memory grants específicos ou uma só query que consumiu mais memória naquele horário, poderia ter sido até mesmo somente uma query ad-hoc.
Ou seja,
Como posso identificar a query entre 11:00 e 11:30 do dia 22 que supostamente poderia ter consumido mais memória?
Como posso saber se houve um número elevado de conexões simultaneas com determinados memory grants?
É necessária alguma implementação adicional para chegar a este objetivo?
Afinal, desde o dia 22 o problema não ocorreu mais e também não ocorreu antes do incidente, preciso saber qual é foi a possível mudança no Workload naquele horário para buscar identificar a causa raiz.
Grato,
Maurício
-
Maumauboy,
Você já verificou nos logs no SQL Server?
Estou acreditando que seja falta de memória em cache para armazenar e posteriormente processar a sua query.
Por outro lado sei da existência de um bug na versão 2008 do SQL Server justamente similar ao seu cenário, veja se este post ajuda: https://support.microsoft.com/en-us/kb/982854
Você tem qual service pack instalado neste SQL Server?
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP, Moderator quinta-feira, 28 de abril de 2016 13:50
- Marcado como Resposta maumauboy sábado, 14 de maio de 2016 10:51
-
Junior
Obrigado pela sua ajuda até o momento, peguei o erro no log
THERE IS INSUFFICIENT SYSTEM MEMORY IN RESOURCE POOL 'INTERNAL' TO RUN THIS QUERY.
Porém preciso de uma coleta onde eu possa encontrar esta query voltando no tempo. Neste caso no dia 22 entre 11 e 11:30.
Grato,
Maurício
-
Maumauboy,
Verifique se a system function fn_dblog não seria o possível solução.
Mas você tem ideia de qual seria esta query?
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
-