Tenho uma tabela de fatos que será executada com um plano apropriado durante nosso processamento matinal. Ocasionalmente, no final do dia, se eu for consultá-lo, ele terá um plano realmente estranho.
Ao consultar uma tabela particionada por data, você geralmente vê um predicado de busca como este:
Mas, por algum motivo, se transforma nisso:
Sim, estou ciente de que existem duas tabelas diferentes mostradas acima. Peguei o bom exemplo de uma tabela configurada de forma semelhante e ele exibe apropriadamente o predicado de busca que eu esperaria.
Ambos são operadores Clustered Index Seek. A atualização das estatísticas não parece ajudar, mas alguma parte dos scripts de manutenção de Ola parece corrigi-lo todas as manhãs.
alguém viu isso antes? Alguma dica sobre como restaurar o bom plano?
No segundo plano de execução, o predicado seek tem uma
CONVERT_IMPLICIT
função nele. Isso significa que o tipo de dados incorreto foi inserido e o SQL Server precisa converter o tipo de dados em outra coisa. Nesse caso, ele esperava umDATE
tipo de dados e algo diferente do queDATE
foi passado... provavelmente um valor(VAR)CHAR
ouN(VAR)CHAR
. A correção seria converter/converter explicitamente o valor antes de enviar a consulta ou corrigir o código para usar o tipo de dados adequado.Aqui estão alguns recursos adicionais sobre o assunto: