Interpretar planes de ejecución que contienen filtros de mapas de bits
Los planes de ejecución de consultas paralelos que utilizan filtros de mapas de bits tienen el operador Bitmap en uno o varios subárboles de operadores. Un filtro de mapas de bits utiliza una representación compacta de un conjunto de valores de una tabla en una parte del árbol de operadores para filtrar filas de una segunda tabla en otra parte del árbol. Si se quitan las filas innecesarias de la consulta en una fase temprana, los operadores subsiguientes tienen menos filas con las que trabajar y el rendimiento global de la consulta mejora.
En SQL Server 2008, el filtrado de mapas de bits se puede insertar en el plan de consultas paralelo después de la optimización, como en SQL Server 2005. También lo puede insertar dinámicamente el optimizador de consultas durante la generación del plan de consultas. Cuando el filtro se inserta dinámicamente, se denomina filtro de mapas de bits optimizado. Un plan de consultas puede contener filtros de mapas de bits y filtros de mapas de bits optimizados. El optimizador de consultas determina cuando un filtro de mapas de bits o un filtro de mapas de bits optimizado es suficientemente selectivo para resultar útil y en qué operadores se aplica el filtro. Para obtener más información, vea Optimizar el rendimiento de las consultas del almacén de datos a través del filtrado de mapas de bits.
Al analizar un plan de ejecución que contiene filtros de mapas de bits, es importante entender cómo fluyen los datos por el plan y dónde se aplican los filtros. El filtro de mapas de bits y el filtro de mapas de bits optimizado se crean en el lado de entrada de generación (la tabla de dimensiones) de una combinación hash. Sin embargo, el filtrado en sí se hace normalmente en el operador Parallelism, que está en el lado de entrada del sondeo (la tabla de hechos) de la combinación hash. Con todo, cuando el filtro de mapas de bits se basa en una columna de enteros, se puede aplicar directamente a la tabla inicial o a la operación de recorrido del índice en lugar del operador Parallelism. Esta técnica se denomina optimización consecutiva.
Ver los filtros de mapas de bits en planes de presentación
Para ver los filtros de mapas de bits en el plan de consultas, utilice las opciones SET SHOWPLAN_ALL, SHOWPLAN_TEXT o SHOWPLAN_XML, o haga clic en Incluir plan de ejecución real en SQL Server Management Studio.
Si se genera un plan de presentación XML, los operadores de mapas de bits físicos y lógicos se enumeran de la manera siguiente:
<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">
El operador en el que se aplica un filtro de mapas de bits contiene el nombre del mapa de bits de la propiedad Probe Column.
El operador en que se aplica el filtro de mapas de bits optimizado contienen un predicado de mapa de bits con el formato PROBE([Opt_Bitmap1001], {[nombre_columna]} [, 'IN ROW']). El predicado de mapa de bits notifica la información siguiente:
El nombre del mapa de bits que corresponde al nombre escrito en el operador Bitmap Create. El prefijo 'Opt_' indica que se utiliza un filtro de mapas de bits optimizado.
La columna que se sondea. Es el punto desde el que los datos filtrados fluyen a través del árbol.
Si el sondeo del mapa de bits se realiza de forma consecutiva. Cuando se utiliza la optimización consecutiva, el sondeo del mapa de bits se invoca con el parámetro IN ROW. De lo contrario, este parámetro no aparece.
Ejemplo
En el ejemplo siguiente se muestra cómo se usa el filtrado de mapas de bits optimizado en un plan de ejecución. Los dos tablas de dimensiones DimProduct y DimCustomer se combinan con la tabla de hechos FactInternetSales utilizando una combinación de clave principal con clave externa en una única columna de enteros.
USE AdventureWorksDW;
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;
La ilustración siguiente muestra que se crea un filtro de mapas de bits optimizado en el subárbol del operador de ambas tablas de dimensiones una vez que se ha recorrido la tabla de dimensiones y se conoce la información necesaria para eliminar las filas que corresponda de la tabla de hechos. El filtro se aplica a continuación a la tabla de hechos en la primera ubicación posible, el operador Table Scan. La aplicación del filtro se muestra en la sección Predicate de las propiedades de Table Scan. La información que se muestra en el predicado indica que los dos filtros de mapas de bits optimizados, Opt_Bitmap1008 y Opt_Bitmap1009, se utilizan para limitar las filas devueltas de la tabla de hechos. Las columnas sondeadas en la tabla de hechos se enumeran como [F].[CustomerKey] y [F].[ProductKey]. Se muestra el parámetro IN ROW, que indica que se utiliza la optimización consecutiva en el proceso. Si no se puede realizar la optimización consecutiva, el filtrado de mapas de bits se aplica al operador Parallelism.
A partir de la ilustración, se pueden obtener las conclusiones siguientes:
Se crean filtros de mapas de bits optimizados en dos subárboles.
Los dos filtros se aplican dinámicamente a un operador único (Table Scan).
Primero se implementa el filtro de mapas de bits optimizado que se estima más selectivo.
Las columnas por las que se combinan las tablas de dimensiones con la tabla de hechos permiten el uso de la optimización consecutiva. Es decir, la combinación está basada en una única columna de enteros.
El filtro se aplica en el primer punto posible de la consulta, lo que produce un flujo de filas menor de la operación Table Scan al resto de los operadores del árbol.