Compartilhar via


Solucionando problemas de seletividade de filtro de bitmap

A filtragem de bitmap pode melhorar significativamente o desempenho de consultas de data warehouse que usam esquemas de estrela removendo anteriormente as linhas não-qualificadas no plano de consulta. Isso reduz as linhas que passam pelo operador de junção e todos os operadores subseqüentes, o que resulta em tempos de resposta de consulta aprimorados. No SQL Server 2008, a filtragem de bitmap pode ser introduzida no plano de consulta depois da otimização ou pode ser introduzida dinamicamente pelo otimizador de consulta durante a geração de plano de consulta. Quando o filtro é introduzido dinamicamente, é chamado de um filtro de bitmap otimizado. Para obter mais informações sobre a filtragem de bitmap, consulte Otimizando o desempenho de consulta de data warehouse por filtragem de bitmap.

Problemas de desempenho específicos a filtragem de bitmap só acontecem quando um filtro de bitmap se tornar não-seletivo. Um filtro de bitmap não seletivo cria sobrecarga desnecessária no processamento de uma consulta e em lugar de melhorar o desempenho, pode tornar a execução da consulta mais lenta.

Solucionando problemas e resolvendo filtros de bitmap não seletivos

Para solucionar problemas e resolver problemas de desempenho de consulta relacionados a filtros de bitmap não seletivos, siga estas etapas:

  1. Identifique as consultas que causam o problema de desempenho.

    Use o SQL Server Profiler para ajudar a identificar a consulta ou as consultas lentas. Para obter mais informações, consulte Usando o SQL Server Profiler. Você também pode analisar o desempenho de consulta produzindo um plano de execução que pode ser texto, XML ou representação gráfica do plano de execução de consulta que o otimizador de consulta gera. Para obter mais informações, consulte SET SHOWPLAN_TEXT (Transact-SQL), Planos de Execução XML e Exibindo planos de execução gráfica (SQL Server Management Studio).

  2. Verifique se as consultas usam filtros de bitmap.

    Você pode capturar planos de consulta usando sys.dm_exec_query_plan (Transact-SQL) e sys.dm_exec_query_stats (Transact-SQL) para verificar se a consulta realmente usa filtros de bitmap. Alternativamente, você pode procurar filtros de bitmap no plano de execução do XML ou plano de execução gráfico das consultas. Para obter mais informações, consulte Interpretando planos de execução que contêm filtros de bitmap.

  3. Verifique se filtragem de bitmap é a causa do problema de desempenho.

    A filtragem de bitmap só é aplicada em planos de consulta paralelos nos quais junções de hash ou de mesclagem são usadas. A filtragem de bitmap otimizada só é aplicada em planos de consulta paralelos nos quais junções de hash são usadas. Para verificar manualmente se um filtro de bitmap está causando impacto no desempenho de consulta, desabilite a filtragem de bitmap especificando a dica de junção LOOP na instrução de consulta. Isso força o otimizador a escolher o tipo de junção especificada em lugar de uma junção de hash. Você pode também desabilitar a filtragem de bitmap otimizada especificando a dica de junção MERGE na instrução de consulta. Para obter mais informações sobre como usar essas dicas, consulte dicas de junção (Transact-SQL) e dicas de consulta (Transact-SQL).

  4. Use o evento de rastreamento Bitmap Warning para localizar as consultas nas quais os filtros de bitmap estão desabilitados.

    Por padrão, o otimizador de consulta desabilita automaticamente os filtros de bitmap não-seletivos. Se o evento de rastreamento acionar, tente eliminar as razões que tornaram o filtro de bitmap não-seletivo. A não seletividade do filtro de bitmap pode ter as seguintes causas:

    • Estimativas de cardinalidade inadequadas feitas pelo otimizador de consulta.

      O SQL Server calcula cardinalidades principalmente a partir de histogramas criados quando índices ou estatísticas são criados, manual ou automaticamente. Estatísticas desatualizadas e índices perdidos podem causar estimativas de cardinalidade incorretas, resultando em cálculos de custo inexatos que podem causar planos de consulta abaixo do ideal. Crie índices ou estatísticas nas colunas envolvidas na consulta. Para obter mais informações, consulte Solucionando problemas de desempenho ruim de consulta: estimativa de cardinalidade.

    • Pressão de memória no sistema.

      Em um sistema extremamente carregado com pressão de memória, as consultas com filtros de bitmap no plano de consulta podem cancelar o operador de bitmap quando as consultas não adquirirem a memória mínima necessária para criar o bitmap. O Monitor de Sistema pode ser usado para monitorar o desempenho do SQL Server e componentes que não sejam do SQL Server que possam estar causando pressão de memória no sistema. Por exemplo, você pode usar o Objeto do Gerenciador de Memória para monitorar o uso global de memória de servidor. Para obter mais informações, consulte Monitorando o uso de recursos (Monitor do Sistema). Para obter informações sobre solução de problemas de pressão de memória , consulte Troubleshooting Performance Problems in SQL Server 2005 (em inglês).

    • Não há threads suficientes para executar a consulta em paralelo.

      Filtros de bitmap são apenas aplicados em um plano de consulta paralelo. Quando o requisito de thread do plano paralelo de um grau específico de paralelismo não puder ser atendido, o Mecanismo de Banco de Dados diminuirá automaticamente o grau de paralelismo ou abandonará completamente o plano paralelo no contexto de carga de trabalho especificado. Depois, ele executará o plano consecutivo (um thread). Para obter mais informações, consulte Grau de paralelismo.