Risoluzione dei problemi di selettività del filtro bitmap

L'applicazione di filtri bitmap può migliorare significativamente le prestazioni delle query del data warehouse che utilizzano gli schemi star rimuovendo le righe non risultanti all'inizio del piano di query. Ciò riduce le righe che passano attraverso l'operatore di join e tutti gli operatori successivi il che porta al miglioramento dei tempi di risposta delle query. In SQL Server 2008, l'applicazione del filtro bitmap può essere introdotta nel piano di query dopo l'ottimizzazione oppure introdotta dinamicamente da Query Optimizer durante la generazione del piano di query. Quando il filtro è introdotto dinamicamente, viene denominato filtro bitmap ottimizzato. Per ulteriori informazioni sull'applicazione di filtri, vedere Ottimizzazione delle prestazioni di esecuzione delle query del data warehouse tramite l'applicazione di filtri bitmap.

I problemi relativi alle prestazioni specifici dell'applicazione di filtri bitmap si verificano solo quando un filtro bitmap diviene non selettivo. Un filtro bitmap non selettivo crea un inutile overhead nell'elaborazione di una query e invece di migliorare le prestazioni, può rallentare l'esecuzione di una query.

Diagnosi e risoluzione dei problemi relativi ai filtri bitmap non selettivi

Per diagnosticare e risolvere i problemi di prestazioni nell'esecuzione delle query correlate ai filtri bitmap non selettivi, eseguire la procedura seguente:

  1. Identificare le query che provocano il problema di prestazioni.

    Per individuare le query lente utilizzare SQL Server Profiler. Per ulteriori informazioni, vedere Utilizzo di SQL Server Profiler. È possibile inoltre analizzare le prestazioni delle query generando un piano Showplan, il quale può essere una rappresentazione di testo, XML o grafica del piano di esecuzione delle query generato da Query Optimizer. Per ulteriori informazioni, vedere SET SHOWPLAN_TEXT (Transact-SQL), Showplan XML e Visualizzazione dei piani di esecuzione grafici (SQL Server Management Studio).

  2. Verificare che le query utilizzino i filtri bitmap.

    È possibile acquisire piani di query utilizzando sys.dm_exec_query_plan (Transact-SQL) e sys.dm_exec_query_stats (Transact-SQL) per verificare se la query utilizza veramente i filtri bitmap. In alternativa, è possibile cercare filtri bitmap nello Showplan XML o nel piano di esecuzione grafico delle query. Per ulteriori informazioni, vedere Interpretazione dei piani di esecuzione che contengono filtri bitmap.

  3. Verificare se il filtro bitmap è la causa del problema di prestazioni.

    L'applicazione di filtri bitmap viene effettuata solamente nei piani di query paralleli nei quali sono utilizzati hash join o merge join. L'applicazione di filtri bitmap viene effettuata solamente nei piani di query paralleli nei quali sono utilizzati hash join. Per verificare se un filtro bitmap sta avendo un impatto sulle prestazioni di esecuzione delle query, disattivare manualmente l'applicazione del filtro bitmap specificando l'hint di join LOOP nell'istruzione della query. Ciò forza Query Optimizer a scegliere il tipo di join specificato invece di un hash join. È anche possibile disattivare l'applicazione di filtri bitmap ottimizzati specificando l'hint di join MERGE nell'istruzione della query. Per ulteriori informazioni su questi hint, vedere Hint di join (Transact-SQL) e Hint per la query (Transact-SQL).

  4. Utilizzare l'evento traccia Bitmap Warning per tenere traccia delle query nelle quali sono disattivati i filtri bitmap.

    Per impostazione predefinita, Query Optimizer disattiva automaticamente i filtri bitmap non selettivi. Se viene generato un evento di traccia, tentare di eliminare le cause che portano il filtro bitmap a diventare non selettivo. La non selettività del filtro bitmap può essere dovuta alle seguenti cause:

    • Stima non corretta della cardinalità da parte di Query Optimizer.

      In SQL Server SQL Server la cardinalità viene valutata principalmente sulla base di istogrammi creati al momento della creazione di indici o statistiche, in modo manuale o automatico. Statistiche non aggiornate e indici mancanti possono provocare stime della cardinalità non corrette, il che risulta in calcoli del costo imprecisi che a loro volta possono provocare piani di query non ottimali. Creare statistiche o indici utili nelle colonne coinvolte nella query. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi alle prestazioni delle query: stima della cardinalità.

    • Richieste di memoria sul sistema.

      In un sistema con carichi elevati e con un numero eccessivo di richieste di memoria, le query con filtri bitmap nel piano di query possono eliminare l'operatore bitmap quando non ottengono la memoria minima necessaria per creare il bitmap. Il Monitor di sistema può essere utilizzato per controllare le prestazioni di SQL Server e dei componenti non-SQL Server che potrebbero essere all'origine delle richieste di memoria sul sistema. Ad esempio, è possibile utilizzare l'oggetto Gestione memoria per controllare l'utilizzo della memoria per il server. Per ulteriori informazioni, vedere Monitoraggio dell'utilizzo delle risorse (Monitor di sistema). Per informazioni sulla diagnosi di problemi relative alle richieste di memoria, vedere Risoluzione dei problemi di prestazioni in SQL Server 2005.

    • Numero di thread insufficiente per eseguire la query in parallelo.

      I filtri bitmap sono applicati solo in un piano di query parallelo. Se non è possibile rispettare i requisiti di thread del piano parallelo per un grado di parallelismo specifico, Motore di database aumenta automaticamente il grado di parallelismo o annulla completamente il piano parallelo nel contesto del piano di lavoro specificato ed esegue il piano seriale (un thread). Per ulteriori informazioni, vedere Grado di parallelismo.