비트맵 필터 선택도 문제 해결

비트맵 필터링은 쿼리 계획에서 조건에 맞지 않는 행을 초기에 제거함으로써 별모양 스키마를 사용하는 데이터 웨어하우스 쿼리의 성능을 크게 향상시킵니다. 이로 인해 조인 연산자를 통해 전달되는 행이 줄어들므로 이어지는 모든 연산에서 쿼리 응답 시간이 단축됩니다. SQL Server 2008에서 비트맵 필터링은 쿼리 계획에서 최적화 후 적용되거나 쿼리 계획 생성 중에 쿼리 최적화 프로그램에 의해 동적으로 적용될 수 있습니다. 필터가 동적으로 사용되는 경우 이를 최적화된 비트맵 필터라고 합니다. 비트맵 필터링에 대한 자세한 내용은 비트맵 필터링을 통한 데이터 웨어하우스 쿼리 성능 최적화를 참조하십시오.

비트맵 필터링에 관련된 성능 문제는 비트맵 필터가 비선택적인 경우에만 발생합니다. 비선택적 비트맵 필터는 쿼리 처리 성능을 향상시키는 것이 아니라 불필요한 오버헤드를 발생시키므로 쿼리의 처리 속도가 느려지게 됩니다.

비선택적 비트맵 필터의 진단 및 해결

비선택적 비트맵 필터에 관련된 쿼리 성능을 진단하고 해결하려면 다음 단계를 따르십시오.

  1. 성능 문제를 일으키는 쿼리를 확인합니다.

    SQL Server 프로파일러를 사용하면 실행 속도가 느린 쿼리를 확인할 수 있습니다. 자세한 내용은 SQL Server 프로파일러 사용을 참조하십시오. 쿼리의 성능은 실행 계획을 만듦으로써 분석할 수 있습니다. 실행 계획은 쿼리 최적화 프로그램이 생성하며 쿼리 실행 계획을 텍스트, XML 또는 그래픽으로 나타낸 것입니다. 자세한 내용은 SET SHOWPLAN_TEXT(Transact-SQL), XML 실행 계획그래픽 실행 계획 표시(SQL Server Management Studio)를 참조하십시오.

  2. 비트맵 필터를 사용하는 쿼리를 확인합니다.

    sys.dm_exec_query_plan(Transact-SQL)을 사용하여 쿼리 계획을 캡처할 수 있으며 sys.dm_exec_query_stats(Transact-SQL)를 사용하여 쿼리가 실제로 비트맵 필터를 사용하는지 확인할 수 있습니다. 또는 쿼리의 XML 실행 계획이나 그래픽 실행 계획에서 비트맵 필터를 찾을 수도 있습니다. 자세한 내용은 비트맵 필터를 포함하는 실행 계획 해석을 참조하십시오.

  3. 비트맵 필터가 성능 문제의 원인인지 확인합니다.

    비트맵 필터링은 해시 또는 병합 조인이 사용되는 병렬 쿼리 계획에만 적용되며 최적화된 비트맵 필터링은 해시 조인이 사용되는 병렬 쿼리 계획에만 적용됩니다. 비트맵 필터가 쿼리 성능에 영향을 주는지 확인하려면 쿼리 문 내에 조인 힌트 LOOP를 지정하여 수동으로 비트맵 필터링을 해제합니다. 이렇게 하면 최적화 프로그램이 해시 조인을 사용하지 않고 지정한 조인 유형을 선택하게 됩니다. 최적화된 비트맵 필터링의 경우는 쿼리 문 내에 조인 힌트 MERGE를 지정하여 해제할 수 있습니다. 힌트 사용에 대한 자세한 내용은 조인 힌트(Transact-SQL)쿼리 힌트(Transact-SQL)를 참조하십시오.

  4. 추적 이벤트인 Bitmap Warning을 사용하여 비트맵 필터가 해제된 쿼리를 추적합니다.

    기본적으로 쿼리 최적화 프로그램은 비선택적 비트맵 필터를 자동으로 해제합니다. 추적 이벤트가 발생하면 비트맵 필터가 비선택적이 된 원인을 제거하십시오. 비트맵 필터가 비선택적이 되는 원인에는 다음과 같은 것이 있습니다.

    • 쿼리 최적화 프로그램이 생성한 카디널리티 예측이 적절하지 않은 경우

      SQL Server에서는 수동 또는 자동으로 인덱스나 통계를 만들 때 생성되는 히스토그램을 사용하여 주로 카디널리티를 예측합니다. 오래된 통계나 누락된 인덱스가 있을 경우 카디널리티 예측이 잘못될 수 있으며, 이로 인해 비용 계산이 부정확해지고 만족스럽지 못한 쿼리 계획이 만들어질 수 있습니다. 쿼리에 관련된 열에 대해 유용한 인덱스나 통계를 작성하십시오. 자세한 내용은 쿼리 성능 저하 문제 해결: 카디널리티 예측을 참조하십시오.

    • 시스템의 메모리 부족

      사용량이 많고 메모리가 부족한 시스템에서는 쿼리 계획 내의 비트맵 필터가 있는 쿼리가 비트맵을 만들기 위한 최소 메모리를 얻지 못할 경우 비트맵 연산자를 삭제할 수 있습니다. 시스템 모니터를 사용하여 시스템의 메모리 부족을 일으키는 SQL Server 구성 요소 및 SQL Server 이외의 구성 요소에 대한 성능을 모니터링할 수 있습니다. 예를 들어 Memory Manager 개체를 사용하여 전체 서버 메모리 사용량을 모니터링할 수 있습니다. 자세한 내용은 리소스 사용 모니터링(시스템 모니터)을 참조하십시오. 메모리 부족 문제를 해결하는 방법은 SQL Server 2005의 성능 문제 해결을 참조하십시오.

    • 쿼리를 병렬로 실행하기에 스레드가 충분하지 않은 경우

      비트맵 필터는 병렬 쿼리 계획에만 적용됩니다. 특정 병렬 처리 수준에 대한 병렬 계획의 스레드 요구 사항이 충족되지 않는 경우에는 데이터베이스 엔진에서 병렬 처리 수준을 자동으로 낮추거나 지정된 작업 컨텍스트의 병렬 계획을 완전히 중단합니다. 그런 다음 하나의 스레드만 사용되는 직렬 계획을 실행합니다. 자세한 내용은 병렬 처리 수준을 참조하십시오.