Condividi tramite


Informazioni sulla funzionalità degli indici mancanti

La funzionalità degli indici mancanti utilizza oggetti a gestione dinamica e Showplan per fornire informazioni sugli indici mancanti che potrebbero migliorare le prestazioni delle query di SQL Server.

Componenti

Quando Query Optimizer genera un piano di query, vengono individuati gli indici più appropriati per una particolare condizione di filtro. Se questi non sono disponibili, in Query Optimizer viene generato un piano di query non ottimale e vengono archiviate le informazioni relative agli indici mancanti. La funzionalità degli indici mancanti consente di accedere alle informazioni su tali indici in modo da stabilire se è necessario implementarli.

Questa funzionalità include i componenti seguenti:

  • Un set di oggetti a gestione dinamica su cui eseguire una query per restituire le informazioni sugli indici mancanti.

  • L'elemento MissingIndexes negli Showplan XML, che consente di correlare gli indici considerati come mancanti in Query Optimizer alle query per cui questi non sono disponibili.

I componenti della funzionalità degli indici mancanti vengono illustrati in modo dettagliato nelle sezioni seguenti.

Oggetti a gestione dinamica

Dopo aver eseguito un carico di lavoro tipico in SQL Server, è possibile recuperare le informazioni sugli indici mancanti eseguendo una query sugli oggetti a gestione dinamica elencati nella tabella seguente. Questi oggetti a gestione dinamica vengono archiviati nel database master.

Oggetto a gestione dinamica

Informazioni restituite

sys.dm_db_missing_index_group_stats (Transact-SQL)

Restituisce informazioni di riepilogo sui gruppi di indici mancanti, ad esempio sui miglioramenti delle prestazioni che sarebbe possibile ottenere implementando un gruppo specifico di tali indici.

sys.dm_db_missing_index_groups (Transact-SQL)

Restituisce informazioni su un gruppo specifico di indici mancanti, ad esempio l'indicatore di gruppo e gli identificatori di tutti gli indici mancanti contenuti in tale gruppo.

sys.dm_db_missing_index_details (Transact-SQL)

Restituisce informazioni dettagliate su un indice mancante, ad esempio il nome e l'identificatore della tabella in cui l'indice non è presente e le colonne e i tipi di colonna che dovrebbero costituire l'indice mancante.

sys.dm_db_missing_index_columns (Transact-SQL)

Restituisce informazioni sulle colonne della tabella di database che non contengono un indice.

È possibile utilizzare le informazioni restituite da questi oggetti a gestione dinamica con strumenti o script per generare istruzioni DDL CREATE INDEX che consentano di implementare gli indici mancanti.

Consistenza delle transazioni

Le singole modifiche apportate alle righe degli oggetti a gestione dinamica non sono consistenti a livello di transazioni. Ciò significa che, se una query viene interrotta o se viene eseguito il rollback della transazione che la contiene, le righe che includono le informazioni sugli indici mancanti per tale query continueranno a essere disponibili.

Sono supportate solo le transazioni intere. I checkpoint e i rollback parziali non sono supportati.

[!NOTA]

Quando i metadati di una tabella vengono modificati, tutte le informazioni sugli indici mancanti relative a tale tabella vengono eliminate da questi oggetti a gestione dinamica. Le modifiche ai metadati della tabella possono verificarsi, ad esempio, quando vengono aggiunte o eliminate colonne da una tabella o quando viene creato un indice in una colonna di una tabella.

Elemento MissingIndexes di Showplan XML

Per correlare le query agli indici mancanti identificati nei risultati restituiti dagli oggetti a gestione dinamica, è possibile visualizzare l'elemento MissingIndexes negli Showplan XML. L'elemento MissingIndexes viene illustrato nell'esempio seguente:

<ShowPlanXML…>

 <BatchSequence>

  <Batch>

   <Statements>

    <StmtSimple…>

     <StatementSetOptions… />

      <QueryPlan…>

       <MissingIndexes>

        <MissingIndexGroup Impact="22.8764">

         <MissingIndex Database="[ADVENTUREWORKS]" Schema="[Person]" Table="[Address]">

          <ColumnGroup Usage="EQUALITY">

           <Column Name="[PostalCode]" ColumnId="4" />

          </ColumnGroup>

          <ColumnGroup Usage="INEQUALITY">

           <Column Name="[ModifiedDate]" ColumnId="5" />

          </ColumnGroup>

          <ColumnGroup Usage="INCLUDE">

           <Column Name="[AddressLine1]" ColumnId="2" />

           <Column Name="[AddressLine2]" ColumnId="3" />

           <Column Name="[StateProvinceID]" ColumnId="1" />

          </ColumnGroup>

         </MissingIndex>

        </MissingIndexGroup>

       </MissingIndexes>

Le informazioni contenute nell'elemento MissingIndexes consentono di stabilire quali indici potrebbero migliorare le prestazioni della query specifica descritta nell'elemento StmtSimple, che include l'istruzione Transact-SQL stessa. Utilizzando le informazioni restituite per questo elemento, è quindi possibile scrivere un'istruzione DDL CREATE INDEX.

Attivazione e disattivazione della funzionalità degli indici mancanti

La funzionalità degli indici mancanti è attivata per impostazione predefinita. Non sono disponibili controlli per disattivarla o per reimpostare le tabelle restituite quando si eseguono query sugli oggetti a gestione dinamica. Al riavvio di SQL Server, tutte le informazioni sugli indici mancanti vengono eliminate.

È possibile disattivare questa funzionalità solo se un'istanza di SQL Server viene avviata utilizzando l'argomento -x con l'utilità della riga di comando sqlservr. Per ulteriori informazioni, vedere Applicazione sqlservr.