Beheben von Problemen mit der Selektivität von Bitmapfiltern

Durch das Filtern mithilfe einer Bitmap kann die Leistung von Data Warehouse-Abfragen, in denen Starschemas verwendet werden, gesteigert werden, indem nicht qualifizierende Zeilen zu einem frühen Zeitpunkt im Abfrageplan entfernt werden. Dadurch wird die Anzahl von Zeilen verringert, die durch den Verknüpfungsoperator und alle nachfolgenden Operatoren übergeben werden, wodurch eine verbesserte Abfrageantwortzeit erzielt werden kann. In SQL Server 2008 kann das Filtern mithilfe einer Bitmap nach der Optimierung in den Abfrageplan oder dynamisch durch den Abfrageoptimierer während des Generierens des Abfrageplans einbezogen werden. Wenn der Filter dynamisch einbezogen wird, wird dieser als optimierter Bitmapfilter bezeichnet. Weitere Informationen zum Filtern mithilfe einer Bitmap finden Sie unter Optimieren der Leistung von Data Warehouse-Abfragen durch das Filtern mithilfe einer Bitmap.

Leistungsprobleme in Bezug auf das Filtern mithilfe einer Bitmap treten nur auf, wenn ein Bitmapfilter unselektiv wird. Ein unselektiver Bitmapfilter führt beim Verarbeiten einer Abfrage zu unnötigem Aufwand, es kann also keine Leistungssteigerung erzielt werden, stattdessen wird die Abfrage möglicherweise verlangsamt.

Diagnostizieren und Auflösen von unselektiven Bitmapfiltern

Führen Sie die folgenden Schritte aus, um Leistungsprobleme in Bezug auf unselektive Bitmapfilter zu diagnotizieren und zu beheben:

  1. Identifizieren Sie die Abfragen, auf die das Leistungsproblem zurückzuführen ist.

    Verwenden Sie SQL Server Profiler, um die langsame(n) Abfrage(n) zu identifizieren. Weitere Informationen finden Sie unter Verwenden von SQL Server Profiler. Sie können die Abfrageleistung auch analysieren, indem Sie einen Showplan erstellen, bei dem es sich um eine Text-, XML- oder grafische Darstellung des vom Abfrageoptimierer generierten Abfrageausführungsplans handelt. Weitere Informationen finden Sie unter SET SHOWPLAN_TEXT (Transact-SQL), XML-Showplans und Anzeigen von grafischen Ausführungsplänen (SQL Server Management Studio).

  2. Überprüfen Sie, ob in den Abfragen Bitmapfilter verwendet werden.

    Mithilfe von sys.dm_exec_query_plan (Transact-SQL) und sys.dm_exec_query_stats (Transact-SQL) können Sie Abfragepläne aufzeichnen, um zu überprüfen, ob in der Abfrage tatsächlich Bitmapfilter verwendet werden. Sie können auch im XML-Showplan oder im grafischen Ausführungsplan der Abfragen nach Bitmapfiltern suchen. Weitere Informationen finden Sie unter Interpretieren von Ausführungsplänen mit Bitmapfiltern.

  3. Überprüfen Sie, ob das Filtern mithilfe einer Bitmap die Ursache für das Leistungsproblem ist.

    Das Filtern mithilfe einer Bitmap wird nur in parallelen Abfrageplänen mit Hash- oder Zusammenführungsverknüpfungen verwendet. Das optimierte Filtern mithilfe einer Bitmap wird nur in parallelen Abfrageplänen mit Hashverknüpfungen verwendet. Um zu überprüfen, ob sich ein Bitmapfilter negativ auf die Abfrageleistung auswirkt, können Sie das Filtern mithilfe einer Bitmap manuell deaktivieren, indem Sie in der Abfrageanweisung den LOOP-Verknüpfungshinweis angeben. Dadurch wird der Optimierer gezwungen, statt einer Hashverknüpfung den angegebenen Verknüpfungstyp auszuwählen. Sie können das optimierte Filtern mithilfe einer Bitmap auch durch Angeben des MERGE-Verknüpfungshinweises in der Abfrageanweisung deaktivieren. Weitere Informationen zum Verwenden dieser Hinweise finden Sie unter Joinhinweise (Transact-SQL) und Abfragehinweise (Transact-SQL).

  4. Verwenden Sie das Ablaufverfolgungsereignis Bitmap Warning, um die Abfragen zu verfolgen, in denen Bitmapfilter deaktiviert sind.

    Standardmäßig deaktiviert der Abfrageoptimierer unselektive Bitmapfilter automatisch. Versuchen Sie, die Ursachen zu beheben, auf die zurückzuführen ist, dass der Bitmapfilter unselektiv wurde, wenn das Ablaufverfolgungsereignis ausgelöst wird. Dass ein Bitmapfilter unselektiv wird, kann die folgenden Gründe haben:

    • Vom Abfrageoptimierer vorgenommene nicht geeignete Kardinalitätsschätzungen.

      SQL Server schätzt die Kardinalitäten in erster Linie mithilfe von Histogrammen, die erstellt werden, wenn Indizes oder Statistiken erstellt werden. Der Vorgang kann entweder manuell oder automatisch ausgeführt werden. Veraltete Statistiken und fehlende Indizes können falsche Kardinalitätsschätzungen verursachen. Dies führt zu ungenauen Kostenberechnungen, die wiederum nicht optimale Abfragepläne zur Folge haben. Erstellen Sie sinnvolle Indizes oder Statistiken für die Spalten, die von der Abfrage betroffen sind. Weitere Informationen finden Sie unter Problembehandlung bei schlechter Abfrageleistung: Schätzung der Kardinalität.

    • Ungenügend Arbeitsspeicher auf dem System.

      Bei einem stark ausgelasteten System mit ungenügendem Arbeitsspeicher können Abfragen mit Bitmapfiltern im Abfrageplan zum Löschen des Bitmap-Operators führen, wenn für die Abfragen nicht der zum Erstellen der Bitmap erforderliche minimale Arbeitsspeicher verfügbar ist. Der Systemmonitor kann zur Überwachung der Leistung von SQL Server-Komponenten und SQL Server-fremden Komponenten verwendet werden, die möglichweise die Ursache für ungenügenden Speicher auf dem System sind. Sie können beispielsweise das Speicher-Manager-Objekt verwenden, um die gesamte Speicherauslastung des Servers zu überwachen. Weitere Informationen finden Sie unter Überwachen der Ressourcenverwendung (Systemmonitor). Informationen zur Behebung von Problemen bei ungenügendem Arbeitsspeicher finden Sie unter Troubleshooting Performance Problems in SQL Server 2005.

    • Nicht genügen Threads für eine parallele Abfrageausführung.

      Bitmapfilter werden nur in einem parallelen Abfrageplan angewendet. Wenn die Threadanforderung des parallelen Plans für einen bestimmten Grad der Parallelität nicht erfüllt werden kann, reduziert Database Engine (Datenbankmodul) den Grad an Parallelität automatisch oder verwirft den parallelen Plan in dem angegebenen Arbeitsauslastungskontext. Stattdessen wird der serielle Plan (ein Thread) ausgeführt. Weitere Informationen finden Sie unter Grad der Parallelität.