Устранение неполадок селективности фильтра по битовым картам

Битовая фильтрация может значительно повысить производительность запросов к хранилищу данных, использующих схемы «звезда», удаляя не соответствующие условию строки на раннем этапе плана запроса. Этим сокращается количество строк, проходящих через оператор соединения и все последующие операторы, что приводит к уменьшению времени выполнения запросов. В SQL Server 2008 битовой фильтрации можно ввести в план запроса после оптимизации или выполнить динамически с помощью оптимизатора запросов во время создания плана запроса. Если фильтр создается динамически, его называют оптимизированным фильтром по битовым картам. Дополнительные сведения о битовой фильтрации см. в разделе Оптимизация производительности запросов к хранилищу данных с помощью фильтрации по битовым картам.

Проблемы производительности, относящиеся к битовой фильтрации, возникают только при потере селективности фильтра по битовой карте. Фильтр по битовой карте с утраченной селективностью приводит к ненужным затратам при обработке запроса и вместо повышения производительности может привести к увеличению времени выполнения запроса.

Диагностика неселективных фильтров по битовым картам и разрешение проблем

Для диагностики фильтров по битовым картам и разрешения связанных с ними проблем выполните следующие действия:

  1. Определите запросы, вызывающие проблемы производительности.

    С помощью Приложение SQL Server Profiler определите медленный запрос или запросы. Дополнительные сведения см. в разделе Работа с приложением SQL Server Profiler. Можно также проанализировать производительность запроса, используя инструкцию Showplan, которая может отображать план выполнения запроса, созданного оптимизатором запроса, в формате текста, XML или графически. Дополнительные сведения см. в разделах SET SHOWPLAN_TEXT (Transact-SQL), Инструкции Showplan XML и Графическое отображение планов выполнения (SQL Server Management Studio).

  2. Убедитесь, что в запросах применяются фильтры по битовым картам.

    Можно получить планы запросов с помощью хранимых процедур sys.dm_exec_query_plan и sys.dm_exec_query_stats (Transact-SQL), чтобы убедиться, что в запросе действительно применяется фильтр по битовым картам. Кроме того, фильтры по битовым картам можно найти в XML Showplan или графическом представлении плана выполнения запросов. Дополнительные сведения см. в разделе Обработка планов выполнения, содержащих фильтры по битовым картам.

  3. Убедитесь, что источником неполадок является битовая фильтрация.

    Битовая фильтрация применяется только в планах параллельных запросов, в которых используется соединение слиянием или хэш-соединение. Оптимизированная битовая фильтрация применяется только в планах параллельных запросов с использованием хэш-соединений. Чтобы убедиться, что на производительность запроса влияет битовая фильтрация, отключите ее вручную, задав подсказку в соединении LOOP в инструкции запроса. Это заставляет оптимизатор выбирать указанный тип соединения вместо хэш-соединения. Битовую фильтрацию можно также отключить, задав подсказку в соединении MERGE в инструкции запроса. Дополнительные сведения об этих подсказках см. в разделах Подсказки в соединении (Transact-SQL) и Подсказки в запросах (Transact-SQL).

  4. Используйте событие трассировки Bitmap Warning, чтобы отслеживать запросы с отключенными фильтрами по битовым картам.

    По умолчанию оптимизатор запросов автоматически отключает неселективные фильтры по битовым картам. Если возникнет отслеживаемое событие, попытайтесь устранить причины, по которым фильтр по битовым картам утратил селективность. К потере селективности фильтров по битовым картам могут привести следующие причины:

    • Несоответствующая оценка количества элементов, выполненная оптимизатором запросов.

      SQL Server оценивает мощность, главным образом, на основе гистограмм, которые создаются автоматически или вручную после создания индексов или статистик. Устаревшая статистика и утерянные индексы могут привести к неверной оценке количества элементов, неточному вычислению затрат и не самым оптимальным планам запросов. Постройте индексы или статистику для столбцов, участвующих в запросе. Дополнительные сведения см. в разделе Диагностика низкой производительности запросов. Оценка мощности.

    • Нехватка памяти в системе.

      В сильно загруженной системе с ограниченными ресурсами памяти запросы, содержащие фильтры по битовым картам в плане запроса, могут удалить оператор битовой карты, если запрос не получил минимально необходимого объема оперативной памяти для создания растрового изображения. Для мониторинга производительности SQL Server можно использовать системный монитор, чтобы выявить компоненты, не относящиеся к SQL Server, которые могут вызывать дополнительную нагрузку в системе. Например, с помощью объекта диспетчера памяти можно отслеживать общую загрузку памяти на сервере. Дополнительные сведения см. в разделе Мониторинг использования ресурсов (системный монитор). Сведения об устранении неполадок с нехваткой памяти см. в разделе Устранение неполадок производительности в SQL Server 2005.

    • Нехватка потоков для запуска параллельных запросов.

      Фильтры по битовым картам применяются только в плане параллельного запроса. Когда требование потока параллельного плана для особой степени параллелизма не может быть удовлетворено, компонент Database Engine уменьшает степень параллелизма автоматически или полностью отказывается от параллельного плана в указанном контексте рабочей нагрузки. В таком случае начинается выполнение последовательного плана (один поток). Дополнительные сведения см. в разделе Степень параллелизма.