Domande senza buon piano trovato


20

Ho un database di SQL Server 2012. Ho notato il valore di Reason for early termination of statement optimizationalcune domande e tutte hanno dato Good Enough Plan Found. Ora le mie domande sono:

  1. Quali sono tutti i possibili tipi di "Motivo della risoluzione anticipata dell'ottimizzazione delle dichiarazioni". Ho cercato questo in msdn ma non ho ottenuto un elenco completo di valori.
  2. Esiste un DMV o un evento esteso per elencare tutte le query per le quali è stata terminata l'ottimizzazione a causa di motivi diversi da Good Enough Plan Found? Ho fatto riferimento in seguito a due articoli che non elencano l'elenco completo delle possibilità. [Inoltre, mi danno risultati diversi nel mio database].

inserisci qui la descrizione dell'immagine


Risposte:


20
  • Limite di memoria superato

    L'ottimizzatore è stato costretto a smettere di cercare alternative di piano migliori a causa della pressione della memoria. Il motivo dovrebbe essere esaminato e corretto, quindi tentare di nuovo la compilazione della query. Il piano restituito potrebbe benissimo non essere quello che l'ottimizzatore avrebbe selezionato se la condizione di memoria insufficiente non esistesse.

  • Tempo scaduto

    Questo motivo è molto frainteso .

    Query Optimizer mira a trovare rapidamente un piano ragionevole . Non esegue una ricerca esaustiva per trovare il miglior piano possibile. In base alla progettazione, evita di dedicare più tempo all'ottimizzazione del necessario. Una di queste funzionalità che funziona per garantire questo è il "timeout" (non una misura del tempo).

    L'ottimizzatore si imposta un "budget di esplorazione" basato sulla complessità della query logica, sulle stime di cardinalità e sul costo stimato del piano più economico finora trovato (se presente). Query più complesse con cardinalità più elevata hanno un budget più elevato.

    Se questo budget viene superato durante una delle sue fasi di ricerca, la fase termina. Questo fa parte del design e del normale funzionamento dell'ottimizzatore. Le query che richiedono un maggiore sforzo di ottimizzazione lo ottengono; quelli che non lo fanno, no.

    Pensa a "Time Out" come a "Abbastanza buono piano trovato".

  • Buon piano trovato

    Ciò significa esattamente lo stesso di un motivo vuoto. È semplicemente una stranezza storica che i piani con un costo inferiore a 0.909090 ... (1 / 1.1) sono etichettati in questo modo. Nulla si ferma presto o è altrimenti gestito in modo speciale o diverso nel codice di ottimizzazione quando appare questo motivo.

A parte il limite di memoria superato, nessuno dei "motivi di risoluzione anticipata" significa molto (se non altro) per l'ottimizzazione delle query o l'analisi delle prestazioni. In genere li ignoro.

Consigli

Obiettivi di ottimizzazione delle query basati su metriche prestazionali reali (tempo trascorso, utilizzo di CPU / memoria, ... tutto ciò che è importante nel contesto). Se una query è troppo lenta per lo scopo previsto, dedica del tempo a renderla più veloce. Misura le prestazioni effettive, confrontale con la baseline e la cronologia e indirizza lo sforzo di ottimizzazione alle variazioni importanti.

Archivia i dati garantiti e puliti in uno schema relazionale adeguato, con statistiche e indici utili e query ben scritte e ottimizzabili.


10

Se vai su http://schemas.microsoft.com/sqlserver/2004/07/showplan/showplanxml.xsd (che è il link che vedrai se apri un piano di esecuzione come xml), vedrai il tre motivi elencati, che sono:

  • Tempo scaduto
  • MemoryLimitExceeded
  • GoodEnoughPlanFound

Gli articoli che dici sembrano ok per trovare questi eventi, stai riscontrando un problema specifico? L'unica cosa da tenere a mente è che questi DMV non acquisiscono tutti i comandi SQL mai eseguiti sul server e vengono ripristinati al riavvio del server. Potresti intrappolare showplan xml con Extended Events e interrogarlo, ma mi sembra eccessivo.

Neanche io mi preoccuperei troppo di GoodEnoughPlanFound, sembra che l'ottimizzatore stia facendo il suo lavoro (trovare rapidamente un buon piano) abbastanza bene.

HTH

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.