Compartir a través de


Solucionar problemas de selectividad de filtro de mapas de bits

El filtrado de mapas de bits puede mejorar significativamente el rendimiento de las consultas del almacén de datos que utilizan los esquemas en estrella, al quitar las filas innecesarias temprano en el plan de consultas. Esto reduce las filas que se pasan por el operador de combinación y todos los operadores subsiguientes, lo que produce mejores tiempos de respuesta de la consulta. En SQL Server 2008, el filtrado de mapas de bits se puede insertar en el plan de consultas después de la optimización. También lo puede insertar dinámicamente el optimizador de consultas durante la generación del plan de consultas. Cuando el filtro se insertar dinámicamente, se denomina filtro de mapas de bits optimizado. Para obtener más información acerca de las opciones del filtro de mapas de bits, vea Optimizar el rendimiento de las consultas del almacén de datos a través del filtrado de mapas de bits.

Sólo se producen problemas de rendimiento específicos del filtro de mapas de bits cuando un filtro de mapas de bits se convierte en no selectivo. Un filtro de mapas de bits no selectivo crea sobrecarga innecesaria en el procesamiento de una consulta y, en lugar de mejorar el rendimiento, puede hacer que la consulta se realice más lentamente.

Diagnosticar y resolver problemas de los filtros de mapas de bits no selectivos

Para diagnosticar y resolver problemas de rendimiento de consultas relacionados con los filtros de mapas de bits no selectivos, siga estos pasos:

  1. Identifique las consultas que producen el problema de rendimiento.

    Utilice el SQL Server Profiler como ayuda para identificar las consultas lentas. Para obtener más información, vea Usar el Analizador de SQL Server. También puede analizar el rendimiento de las consultas produciendo un plan de presentación, que puede ser un texto, XML o una representación gráfica del plan de ejecución que genera el optimizador de consultas. Para obtener más información, vea SET SHOWPLAN_TEXT (Transact-SQL), Planes de presentación XML y Mostrar planes de ejecución gráficos (SQL Server Management Studio).

  2. Compruebe que las consultas utilizan filtros de mapas de bits.

    Puede capturar planes de consultas utilizando sys.dm_exec_query_plan (Transact-SQL) y sys.dm_exec_query_stats (Transact-SQL) para comprobar si la consulta utiliza realmente los filtros de mapas de bits. También puede buscar los filtros de mapas de bits en el plan de presentación de XML o en el plan de ejecución gráfico de las consultas. Para obtener más información, vea Interpretar planes de ejecución que contienen filtros de mapas de bits.

  3. Compruebe que el filtrado de mapas de bits es la causa del problema de rendimiento.

    El filtrado de mapas de bits sólo se aplica en planes de consultas paralelos en los que se utilizan combinaciones de hash o de mezcla. El filtrado de mapas de bits optimizado sólo se aplica en planes de consultas paralelos en los que se utilizan combinaciones de hash. Para comprobar que un filtro de mapas de bits está afectando al rendimiento de las consultas, deshabilite de forma manual el filtro de mapas de bits especificando la sugerencia de combinación LOOP en la instrucción de la consulta. Esto fuerza que el optimizador elija el tipo de combinación especificado en lugar de una combinación hash. También puede deshabilitar el filtro de mapas de bits optimizado especificando la sugerencia de combinación MERGE en la instrucción de consulta. Para obtener más información sobre cómo utilizar estas sugerencias, vea Sugerencias de combinación (Transact-SQL) y Sugerencias de consulta (Transact-SQL).

  4. Utilice el suceso de seguimiento Bitmap Warning para realizar el seguimiento de las consultas en que están deshabilitados los filtros de mapas de bits.

    De manera predeterminada, el optimizador de consultas deshabilita automáticamente los filtros de mapas de bits no selectivos. Si se activa el suceso de seguimiento, intente eliminar las causas que hicieron que el filtro de mapas de bits se convirtiera en no selectivo. La no selectividad de filtro de mapas de bits se puede deber a:

    • Estimaciones de cardinalidad inadecuadas realizadas por el optimizador de consultas.

      SQL Server calcula la cardinalidad principalmente a partir de histogramas que se crean al crear, manual o automáticamente, índices o estadísticas. Las estadísticas anticuadas e índices que faltan pueden producir estimaciones de cardinalidad incorrectas, y generar cálculos de costos inexactos que pueden producir planes de consultas no óptimos. Genere índices o estadísticas útiles en las columnas que intervienen en la consulta. Para obtener más información, vea Solucionar problemas de bajo rendimiento de consultas: estimación de cardinalidad.

    • Memoria insuficiente en el sistema.

      En un sistema con mucha carga y mucha presión de la memoria, las consultas con filtros de mapas de bits en el plan de consulta pueden quitar el operador de mapa de bits si no obtienen la memoria mínima necesaria para crear el mapa de bits. El Monitor del sistema se puede utilizar para supervisar el rendimiento de SQL Server y los componentes que no son de SQL Server y podrían estar produciendo presión sobre la memoria del sistema. Por ejemplo, puede utilizar el objeto Memory Manager para supervisar la utilización global de la memoria del servidor. Para obtener más información, vea Supervisar el uso de recursos (Monitor de sistema). Para obtener información sobre cómo solucionar problemas de presión sobre la memoria, vea Solucionar problemas de rendimiento en SQL Server 2005.

    • No hay suficientes subprocesos para ejecutar la consulta en paralelo.

      Los filtros de mapas de bits sólo se aplican en un plan de consultas en paralelo. Si no es posible cumplir el requisito de subproceso del plan en paralelo para un grado de paralelismo específico, el Database Engine (Motor de base de datos) reduce automáticamente el grado de paralelismo o abandona por completo el plan en paralelo en el contexto de carga de trabajo especificado. Es entonces cuando ejecuta un plan en serie (un subproceso). Para obtener más información, vea Grado de paralelismo.