Avviso per statistiche mancanti nel piano di esecuzione


23

Ho una situazione che non riesco a capire. Il mio piano di esecuzione di SQL Server mi dice che ho delle statistiche mancanti nella tabella, ma le statistiche sono già state create:

avvertimento

Ma se guardiamo la tabella, vedremo che esiste una statistica che è stata creata automaticamente:

inserisci qui la descrizione dell'immagine

Qualcuno può aiutare a capire come può essere?

Le statistiche Auto_Update e Auto_Create sono attivate sul DB corrente.

Sto usando SQL Server 2014.

Risposte:


15

L'avviso non corrisponde sempre alle statistiche mancanti a colonna singola .

Non esiste un modo semplice per determinare con precisione l'esatta statistica che l'ottimizzatore ha cercato e non ha trovato in tutti i casi, ma è quasi sempre una statistica a più colonne che fornirebbe alcune informazioni di correlazione tra più predicati di uguaglianza nella query.

Forse nel tuo caso corrisponde esattamente ai predicati nel filtro dopo la scansione in cui appare l'avvertimento.

Sarebbe bello se SQL Server segnalasse tutte le colonne per l'avviso "statistica mancante", ma purtroppo non è così che funziona oggi.

Potrebbe essere necessario un certo numero di tentativi ed errori per identificare la statistica multi-colonna che è necessario creare per rimuovere l'avviso. Si noti che le statistiche multi-colonna non possono essere create automaticamente. Nonostante l'avvertimento, è possibile che la qualità della stima sia o meno migliorata anche se viene fornita la statistica mancante.


8

Poiché sembra chiaro che esiste già una statistica per la particolare colonna, offro due possibilità:

  1. Object Explorer è indirizzato a un database diverso - sono sospetto perché il database ha DEVil nome, quindi è possibile che in un caso tu stia guardando dev e in un altro no.
  2. Il piano in uso è precedente alla creazione della statistica (o è stata generata prima o, meno probabilmente, qualcosa ha impedito l'attivazione di una ricompilazione al momento della creazione della statistica).

Verifica che la risposta semplice (1) non sia il problema e prova a inviare la stessa query OPTION (RECOMPILE)per confermare o escludere (2).


1
Aaron Bertnand, grazie mille per la tua risposta. Ma Object Explorer è puntato al db corrente e l'aggiunta di OPTION (RECOMPILE) non risolve il problema. Voglio aggiungere anche che la mia query sta eseguendo una procedura memorizzata.
Artashes Khachatryan,

2

Ho appena notato che quando ricevi tali avvisi sulle statistiche, se esegui la tua query o procedura con le impostazioni seguenti:

SET SHOWPLAN_ALL ON

inserisci qui la descrizione dell'immagine

puoi vedere quali sono le statistiche mancanti:

inserisci qui la descrizione dell'immagine

e usando gli script qui puoi dare un'occhiata a quali statistiche sono attualmente in atto e se mancano puoi aggiungerle.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.