De tempos em tempos estamos recebendo erro do SQL Server:
Erro: 8623, Gravidade: 16, Estado: 1 O processador de consulta ficou sem recursos internos e não pôde produzir um plano de consulta. Este é um evento raro e esperado apenas para consultas extremamente complexas ou consultas que fazem referência a um número muito grande de tabelas ou partições. Por favor, simplifique a consulta. Se você acredita que recebeu esta mensagem por engano, entre em contato com o Atendimento ao Cliente para obter mais informações.
Para poder detectar o que está causando esse erro, criei uma sessão de evento estendido (XE) no evento XE error_reported. A sessão XE parece estar funcionando, pois outros erros são registrados, mas não 8623.
Minha sessão XE é criada assim:
CREATE EVENT SESSION [ErrorReported]
ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(sqlserver.database_id,sqlserver.database_name,sqlserver.sql_text,sqlserver.tsql_stack,sqlserver.username)
WHERE ([severity]> 15))
ADD TARGET package0.event_file(SET filename=N'C:\trace\ErrorReported.xel',max_file_size=(250),max_rollover_files=(4))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)
GO
Alguém que me ajude a fazer com que o XE registre também o erro 5623? Qualquer ajuda muito apreciada.
No momento, estamos executando o Microsoft SQL Server 2016 (SP2-CU10).
Graças a Ronen Ariely do MSDN e ao artigo de Jonathan Kehayias sobre SQL Performance, consegui resolver o problema. O problema era que o tamanho do evento era tão grande que foi descartado. Você pode verificar isso consultando sys.dm_xe_sessions como, por exemplo,
Se algum evento foi descartado, você verá o número de eventos descartados na coluna drop_event_count e o tamanho máximo de qualquer evento descartado em large_event_dropped_size. Se esse valor for maior que o regular_buffer_size, você precisará aumentar o tamanho do buffer regular.
Este foi o meu caso e quando alterei o tamanho máximo da memória do padrão para 64 MB, o tamanho normal do buffer aumentou tanto que consegui detectar o erro!
Como uma nota lateral, a consulta problemática era uma estrutura de entidade SELECT gerada com uma cláusula IN enorme (> 38.000 valores)! Não é de admirar que o mecanismo de banco de dados tenha o suficiente.
Muito obrigado Peter por dar o feedback sobre como seu problema foi resolvido. Estou na mesma situação ecaxt com muitos erros 8623 ocorrendo todas as noites e sem ideia do que os está causando. Como os eventos estendidos falharam, tentei com um rastreamento, mas nunca peguei a consulta real - apenas a mensagem de erro e todas as consultas antes e depois. Graças às suas informações, agora tenho uma maneira de prosseguir. terá que ser amanhã, pois já passei do tempo em que os erros ocorrem agora ...
Edit: verifiquei se há buffers descartados - e não havia nenhum. Gaaahh Edit2: Talvez eles não tenham aparecido porque eu deletei o evento. vai ver amanhã