성능 튜닝 및 최적화(전체 텍스트 검색)

업데이트: 2006년 4월 14일

전체 텍스트 인덱싱 및 전체 텍스트 쿼리의 성능은 메모리, 디스크 속도 및 CPU 속도와 같은 하드웨어 리소스의 영향을 받습니다.

전체 텍스트 인덱싱 성능

전체 텍스트 인덱싱 성능이 저하되는 주요 원인으로는 다음과 같은 하드웨어 리소스 제한을 들 수 있습니다.

  • MSFTESQL 서비스 및 SQL Server에 의한 CPU 사용이 100%에 근접할 경우 CPU는 병목 상태입니다.
  • 평균 디스크 대기 큐 길이가 디스크 헤드 수보다 두 배 이상 많은 경우 디스크에 병목 상태가 존재합니다. 기본적인 해결 방법은 SQL Server 데이터베이스 파일 및 로그와 별개인 전체 텍스트 카탈로그를 만드는 것입니다. 로그, 데이터베이스 파일 및 전체 텍스트 카탈로그를 서로 다른 디스크에 저장합니다. 또한 더 빠른 디스크를 구입하고 RAID를 사용하면 인덱싱 성능을 향상시키는 데 도움이 될 수 있습니다.
  • 실제 메모리(3GB로 제한됨)가 부족하고 탐색 로그에 서비스 일시 중지 메시지가 나타난 경우 메모리는 병목 상태입니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 일시 중지된 MSFTESQL(SQL Server용 Microsoft 전체 텍스트 검색 엔진) 서비스를 참조하십시오. MSFTESQL 서비스는 AWE를 지원하지 않습니다. 4GB 이상의 메모리 추가는 SQL Server에만 도움이 됩니다.

시스템에서 하드웨어 병목 상태가 나타나지 않은 경우 시스템을 세밀하게 조정하여 하드웨어 용량을 극대화할 수 있습니다. 하드웨어 병목 상태가 존재하지 않을 경우 Microsoft SQL Server 2005에서 전체 텍스트 검색의 인덱싱 성능은 주로 다음 사항에 따라 달라집니다.

  • SQL Server에서 전체 텍스트 일괄 처리를 만드는 데 걸리는 시간
  • MSFTESQL 서비스에서 이러한 일괄 처리를 완료할 수 있는 시간

최적 성능에 도달하려면 SQL Server와 MSFTESQL 서비스 간의 상호 작용을 조정해야 합니다. SQL Server가 MSFTESQL 서비스에서 처리 가능한 양보다 많은 일괄 처리를 만들면 서비스가 일시 중지되고 이러한 일시 중지된 상태를 나타내는 탐색 로그 메시지가 생성됩니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 일시 중지된 MSFTESQL(SQL Server용 Microsoft 전체 텍스트 검색 엔진) 서비스를 참조하십시오.

반면 SQL Server가 MSFTESQL 서비스에서 처리 가능한 양보다 적은 전체 텍스트 일괄 처리를 만들면 서비스가 유휴 상태가 되어 효율적이지 않습니다. 실제로 이 사항이 인덱싱의 실행 속도가 느려지는 가장 일반적인 이유입니다. MSFTESQL 서비스의 사용을 최적화하려면 다음 카운터를 추적하고 미세 조정해야 합니다.

  • 진행 중인 일괄 처리 카운터: Microsoft 전체 텍스트 검색 엔진 필터 데몬(MSFTELFD)
    이 카운터는 시스템의 CPU 수와 같거나 두 배여야 합니다. 적은 CPU 사용량을 포함하여 값 0, 1, 2는 SQL Server가 효율적으로 작동하고 있지 않음을 나타냅니다. 예를 들어 4방향 컴퓨터에서는 이 숫자가 4에서 8 사이여야 합니다.
  • 준비 큐에 있는 일괄 처리: MSFTESQL 서비스

값은 탐색 범위 카운트의 10배에 가까워야 합니다. 테이블을 인덱싱하는 데 사용되는 범위 수를 확인하려면 sys.dm_fts_population_ranges에서 쿼리를 실행합니다.

카운터가 낮은 경우 다음 방법으로 향상시킬 수 있습니다.

  • 테이블에 다중 탐색 범위가 있는지 확인합니다. 확인하려면 sys.dm_fts_population_ranges를 쿼리합니다. 탐색 범위 카운트가 CPU 수의 두 배가 되는 것이 이상적입니다. 탐색 범위는 테이블의 행 수, CPU 수 및 max full-text crawl range 구성 옵션에 의해 제한됩니다. 이 옵션을 적용하려면 탐색 작업을 다시 시작해야 합니다.

    [!참고] 이 카운터는 전체 탐색에만 적용됩니다.

  • 기본 테이블에 클러스터형 인덱스가 있는지 확인합니다. 클러스터형 인덱스의 첫 번째 열에 정수 데이터 형식을 사용합니다. 클러스터형 인덱스의 첫 번째 열에 GUID를 사용하지 않아야 합니다. 클러스터형 인덱스에 다중 범위 탐색이 있을 경우 탐색 속도가 가장 빨라질 수 있습니다.

  • UPDATE STATISTICS 문을 사용하여 기본 테이블의 통계를 업데이트합니다. 더욱 중요한 것은 전체 탐색에 대한 클러스터형 인덱스 또는 전체 텍스트 키의 통계를 업데이트하는 것입니다. 이렇게 하면 다중 범위 탐색에서 테이블에 적절한 파티션을 생성하는 데 도움이 됩니다.

  • 증분 채우기의 성능을 향상시키려면 타임스탬프 열에 보조 인덱스를 빌드합니다.

[!참고] 전체 탐색과 달리 증분, 수동 및 자동 변경 내용 추적 채우기는 하드웨어 리소스를 극대화하여 더 빠른 속도를 실현하도록 디자인되지 않았습니다. 따라서 이러한 튜닝 제안이 전체 텍스트 인덱싱의 성능을 향상시키지 않을 수도 있습니다.

전체 텍스트 쿼리 성능 향상을 위한 권장 사항

다음은 전체 텍스트 쿼리 성능 향상에 도움이 될 권장 사항 목록입니다.

  • ALTER INDEX REORGANIZE를 사용하여 기본 테이블의 인덱스를 조각 모음합니다.
  • ALTER FULLTEXT CATALOG REORGANIZE를 사용하여 전체 텍스트 카탈로그를 다시 구성합니다. 이 문을 실행하면 해당 카탈로그에 있는 전체 텍스트 인덱스의 마스터 병합이 수행되므로 성능 테스트 전에 실행해야 합니다.
  • 작은 열을 전체 텍스트 키 열로 선택합니다. 900바이트 열도 지원되지만 이 크기의 키 열을 사용하여 전체 텍스트 인덱스를 빌드하는 것은 바람직하지 않습니다.
  • 여러 CONTAINS 조건자를 하나의 CONTAINS 조건자에 결합합니다. SQL Server에서는 CONTAINS 쿼리에 열 목록을 지정할 수 있습니다.
  • 전체 텍스트 키 또는 순위 정보만 필요한 경우 CONTAINS 또는 FREETEXT를 각각 사용하는 대신 CONTAINSTABLE 또는 FREETEXTTABLE을 사용합니다.
  • 결과를 제한하고 성능을 증가시키려면 FREETEXTTABLE 및 CONTAINSTABLE 구문의 TOP_N_BY_RANK 옵션을 사용합니다. 일치하는 모든 항목을 찾는 경우가 아니면 이 옵션을 사용합니다.
  • 전체 텍스트 쿼리 계획을 검사하여 적절한 조인 계획이 선택되었는지 확인합니다. 필요한 경우 조인 힌트 또는 쿼리 힌트를 사용합니다. 전체 텍스트 쿼리에서 매개 변수가 사용될 경우 매개 변수의 첫 번째 값이 쿼리 계획을 결정합니다. OPTIMIZE FOR 쿼리 힌트를 사용하여 원하는 값으로 컴파일하도록 쿼리를 강제 적용할 수 있습니다. 이렇게 하면 결정적 쿼리 계획 및 향상된 성능을 실현하는 데 도움이 됩니다.

참고 항목

개념

전체 텍스트 검색 관리

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 4월 14일

변경된 내용
  • 성능 튜닝 제안을 수정했습니다.