Interpretieren von Ausführungsplänen mit Bitmapfiltern

Pläne für die parallele Abfrageausführung, in denen das Filtern mithilfe einer Bitmap genutzt wird, weisen in mindestens einer Operatorunterstruktur einen Bitmap-Operator auf. Ein Bitmapfilter verwendet eine kompakte Darstellung einer Gruppe von Werten aus einer Tabelle in einem Bereich der Operatorstruktur, um Zeilen aus einer zweiten Tabelle in einem anderen Bereich der Struktur zu filtern. Durch das Entfernen unnötiger Zeilen zu einem frühen Zeitpunkt in der Abfrage müssen nachfolgende Operatoren weniger Zeilen verarbeiten, wodurch eine Steigerung der Gesamtleistung der Abfrage erzielt werden kann.

In SQL Server 2008 kann das Filtern mithilfe einer Bitmap wie in SQL Server 2005 nach der Optimierung in den parallelen Abfrageplan oder aber dynamisch durch den Abfrageoptimierer während des Generierens des Abfrageplans einbezogen werden. Wenn der Filter dynamisch einbezogen wird, wird dieser als optimierter Bitmapfilter bezeichnet. Ein Abfrageplan kann sowohl Bitmapfilter als auch optimierte Bitmapfilter enthalten. Der Abfrageoptimierer bestimmt, wann ein optimierter Bitmapfilter eine ausreichende Selektivität aufweist, damit er verwendet werden kann, und auf welche Operatoren der Filter angewendet wird. Weitere Informationen finden Sie unter Optimieren der Leistung von Data Warehouse-Abfragen durch das Filtern mithilfe einer Bitmap.

Beim Analysieren eines Ausführungsplans, in dem mithilfe einer Bitmap gefiltert wird, ist es wichtig, nachvollziehen zu können, wie die Daten den Plan durchfließen und an welchen Stellen gefiltert wird. Der Bitmapfilter und der optimierte Bitmapfilter werden auf der Seite der Erstellungseingabe (der Dimensionstabelle) einer Hashjoin erstellt; allerdings erfolgt der tatsächliche Filtervorgang innerhalb des Parallelism-Operators, der sich auf der Seite der Untersuchungseingabe (der Faktentabelle) des Hashjoin befindet. Wenn jedoch der Bitmapfilter auf einer Spalte mit ganzen Zahlen basiert, kann der Filter direkt auf den ursprünglichen Tabellen- oder Indexscanvorgang statt auf den Parallelism-Operator angewendet werden. Diese Technik wird als <newTerm>In-Row-Optimierung</newTerm> bezeichnet.

Anzeigen von Bitmapfiltern in Showplänen

Um Bitmapfilter im Abfrageplan anzuzeigen, verwenden Sie die SET-Option SHOWPLAN_ALL, SHOWPLAN_TEXT oder SHOWPLAN_XML, oder klicken Sie in SQL Server Management Studio auf Tatsächlichen Ausführungsplan einschließen.

Wenn ein XML-Showplan generiert wird, werden der physische und der logische Bitmap-Operator auf folgende Weise aufgeführt:

<RelOp NodeId="2" PhysicalOp="Bitmap" LogicalOp="Bitmap Create" EstimateRows="88" EstimateIO="0" EstimateCPU="0.0718125" AvgRowSize="6893" EstimatedTotalSubtreeCost="0.229385" Parallel="1" EstimateRebinds="0" EstimateRewinds="0">

Der Operator, in dem ein Bitmapfilter angewendet wird, enthält den Namen der Bitmap in der Eigenschaft Einfügespalte.

Der Operator, in dem der optimierte Bitmapfilter angewendet wird, enthält ein Bitmapprädikat im folgenden Format: PROBE([Opt_Bitmap1001], {[column_name]} [, 'IN ROW']). Das Bitmapprädikat gibt Aufschluss über Folgendes:

  • Den Bitmapnamen, der dem im Bitmap Create-Operator eingeführten Namen entspricht. Das Präfix Opt_ gibt an, dass ein optimierter Bitmapfilter verwendet wird.

  • Die untersuchte Spalte. Dies ist der Punkt, ab dem die gefilterten Daten durch die Struktur fließen.

  • Ob die Bitmapuntersuchung in Row ausgeführt wird. Wenn dies der Fall ist, wird die Bitmapuntersuchung mit dem IN ROW-Parameter aufgerufen. Andernfalls fehlt dieser Parameter.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie das optimierte Filtern mithilfe einer Bitmap in einem Ausführungsplan verwendet wird. Die beiden Dimensionstabellen DimProduct und DimCustomer werden mithilfe eines Primärschlüssel-zu-Fremdschlüssel-Joins über eine einzelne ganzzahlige Spalte mit der Faktentabelle FactInternetSales verknüpft.

USE AdventureWorksDW2008R2;
GO
SELECT * 
FROM dbo.FactInternetSales AS F
INNER JOIN dbo.DimProduct AS D1 ON F.ProductKey = D1.ProductKey
INNER JOIN dbo.DimCustomer AS D2 ON F.CustomerKey = D2.CustomerKey
WHERE D1.StandardCost <= 30 AND D2.YearlyIncome <= 50000;

In der folgenden Abbildung wird deutlich, dass ein optimierter Bitmapfilter in der Operatorunterstruktur beider Dimensionstabellen erstellt wird, nachdem die Dimensionstabelle durchsucht wurde, und die zum Entfernen nicht qualifizierender Zeilen aus der Faktentabelle erforderlichen Informationen bekannt sind. Der Filter wird dann an der frühestmöglichen Stelle auf die Faktentabelle angewendet, nämlich beim Table Scan-Operator. Die Anwendung des Filters wird im Predicate-Abschnitt der Table Scan-Eigenschaften angezeigt. Die darin enthaltenen Informationen weisen darauf hin, dass mithilfe der beiden optimierten Bitmapfilter Opt_Bitmap1008 und Opt_Bitmap1009 die Anzahl von aus der Faktentabelle zurückgegebenen Zeilen beschränkt wird. Die untersuchten Spalten in der Faktentabelle werden als [F].[CustomerKey] und [F].[ProductKey] aufgeführt. Der IN ROW-Parameter wird angezeigt. Das bedeutet, dass im Prozess die In-Row-Optimierung verwendet wird. Wenn die In-Row-Optimierung nicht möglich ist, wird das Filtern mithilfe einer Bitmap auf den Parallelism-Operator angewendet.

SQL Server-Abfrageplan mit Bitmapfiltern

Ausgehend von der Abbildung können die folgenden Schlüsse gezogen werden:

  • Optimierte Bitmapfilter werden in zwei Unterstrukturen erstellt.

  • Beide Filter werden dynamisch auf einen einzelnen Operator (Table Scan) angewendet.

  • Der optimierte Bitmapfilter, der als der selektivste bewertet wird, wird zuerst implementiert.

  • Die Spalten, über die die Dimensionstabellen mit der Faktentabelle verknüpft werden, ermöglichen die In-Row-Optimierung. Das bedeutet, dass der Join auf einer einzelnen ganzzahligen Spalte basiert.

  • Der Filter wird am frühestmöglichen Punkt in der Abfrage angewendet. Das führt dazu, dass weniger Zeilen vom Table Scan-Operator durch die verbleibenden Operatoren in der Struktur fließen.