Após configurar o XE em 23 de novembro de 2020 para capturar alguns erros, pude contar 2.163.665 ocorrências do mesmo erro provenientes de solicitações de um aplicativo legado (que provavelmente não será corrigido tão cedo). Os erros podem ser classificados na 1ª e 2ª etapas para Processamento de uma Instrução SQL :
- O DBMS primeiro analisa a instrução SQL. Ele divide a declaração em palavras individuais, chamadas tokens, garante que a declaração tenha um verbo válido e cláusulas válidas, e assim por diante. Erros de sintaxe e erros ortográficos podem ser detectados nesta etapa.
- O DBMS valida a instrução. Ele verifica a instrução no catálogo do sistema. Todas as tabelas nomeadas na instrução existem no banco de dados? Todas as colunas existem e os nomes das colunas são inequívocos? O usuário tem os privilégios necessários para executar a instrução? Certos erros semânticos podem ser detectados nesta etapa.
O documento também diz que Parsing uma instrução SQL não requer acesso ao banco de dados e pode ser feito muito rapidamente , mas a quantidade de solicitações disparadas no servidor me fez pensar que deveria verificar.
Eu gostaria de medir o impacto no consumo de recursos causado por essas solicitações erradas sendo rejeitadas nessas etapas. Tem algum jeito de fazer isso?
Vejo pelo seu comentário que os erros não estão acontecendo com tanta frequência a ponto de ser uma preocupação de desempenho.
Para responder à pergunta feita, você pode criar um rastreamento XE filtrado para capturar os eventos sql_batch_completed e rpc_completed detalhados em que result for Error. Os eventos podem ser resumidos por um intervalo de tempo para estatísticas agregadas.
O exemplo abaixo resume a CPU e as leituras lógicas em um intervalo de um minuto de um destino de arquivo de rastreamento.