다음을 통해 공유


전체 텍스트 인덱스 채우기

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

전체 텍스트 인덱스를 만들고 유지 관리하려면 채우기(크롤링이라고도 함)라는 프로세스를 사용하여 인덱스를 채우는 작업이 포함됩니다.

모집단의 유형

전체 텍스트 인덱스는 다음과 같은 유형의 채우기를 지원합니다.

  • 전체 모집단
  • 변경 내용 추적 기반 자동 또는 수동 채우기
  • 타임스탬프 기반 증분 채우기

전체 모집단

전체 채우기 동안 인덱스 항목은 테이블 또는 인덱싱된 뷰의 모든 행에 대해 작성됩니다. 전체 텍스트 인덱스의 전체 채우기는 기본 테이블 또는 인덱싱된 뷰의 모든 행에 대한 인덱스 항목을 작성합니다.

기본적으로 SQL Server는 새 전체 텍스트 인덱스를 만드는 즉시 완전히 채웁니다.

  • 한편으로는 전체 채우기가 상당한 양의 리소스를 사용할 수 있습니다. 따라서 사용량이 많은 기간 동안 전체 텍스트 인덱스 생성 시, 특히 전체 텍스트 인덱스의 기본 테이블이 큰 경우 사용량이 많지 않은 시간까지 전체 채우기를 지연하는 것이 가장 좋습니다.
  • 반면 인덱스가 속한 전체 텍스트 카탈로그는 전체 텍스트 인덱스가 모두 채워질 때까지 사용할 수 없습니다.

전체 텍스트 인덱스를 즉시 채우지 않고 만들려면 CREATE FULLTEXT INDEX 문에 CHANGE_TRACKING OFF, NO POPULATION 절을 지정하세요. CHANGE_TRACKING MANUAL을 지정하는 경우 전체 텍스트 엔진은 START FULL POPULATION 또는 START INCREMENTAL POPULATION 절을 사용하여 ALTER FULLTEXT INDEX 문을 실행할 때까지 새 전체 텍스트 인덱스를 채웁니다.

예제 - 전체 채우기를 실행하지 않고 전체 텍스트 인덱스 만들기

다음 예에서는 Production.Document 예제 데이터베이스의 AdventureWorks 테이블에서 전체 텍스트 인덱스를 만듭니다. 이 예제에서는 WITH CHANGE_TRACKING OFF, NO POPULATION를 이용하여 초기 전체 채우기를 지연합니다.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

예제 - 테이블에서 전체 채우기 실행

다음 예에서는 AdventureWorks 예제 데이터베이스의 Production.Document 테이블에서 전체 채우기를 실행합니다.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

변경 내용 추적 기반 모집단

필요에 따라 변경 내용 추적을 사용하여 초기 전체 채우기 후에 전체 텍스트 인덱스 유지 관리할 수 있습니다. SQL Server는 마지막 채우기 이후 기본 테이블의 변경 내용을 추적하는 테이블을 유지 관리하므로 변경 내용 추적과 관련된 오버헤드가 적습니다. 변경 내용 추적을 사용할 때 SQL Server에서 업데이트, 삭제 또는 삽입에 의해 수정된 기본 테이블 또는 인덱싱된 뷰의 행 레코드를 유지 관리합니다. WRITETEXT 및 UPDATETEXT를 통해 나온 데이터 변경 내용은 전체 텍스트 인덱스에 반영되지 않고 변경 내용 추적 시 선택되지도 않습니다.

참고 항목

timestamp 열이 포함된 테이블에 대해서는 변경 내용 추적 대신 증분 채우기를 사용할 수 있습니다.

인덱스를 만드는 동안 변경 내용 추적을 사용하면 SQL Server에서 새 전체 텍스트 인덱스를 만드는 즉시 완전히 채웁니다. 그 후 변경 내용이 추적되고 전체 텍스트 인덱스로 전파됩니다.

변경 내용 추적 설정

다음과 같은 두 가지 유형의 변경 내용 추적이 있습니다.

  • 자동(CHANGE_TRACKING AUTO 옵션). 자동 변경 내용 추적이 기본 동작입니다.
  • 수동(CHANGE_TRACKING MANUAL 옵션).

변경 내용 추적의 유형에 따라 전체 텍스트 인덱스가 채워지는 방법이 다음과 같이 결정됩니다.

  • 자동 채우기

    기본적으로 또는 CHANGE_TRACKING AUTO를 지정한 경우 전체 텍스트 엔진은 전체 텍스트 인덱스에 대해 자동 채우기를 사용합니다. 초기 전체 채우기가 완료된 후 기본 테이블의 데이터가 수정되면 변경 내용이 추적되고 추적된 변경 사항이 자동으로 전파됩니다. 그러나 전체 텍스트 인덱스는 백그라운드에서 업데이트되므로 전파된 변경 내용이 인덱스 바로 반영되지 않을 수 있습니다.

    자동 채우기를 사용하는 변경 내용 추적을 시작하려면

    예제 - 자동 변경 내용 추적을 사용하도록 전체 텍스트 인덱스 변경
    다음은 자동 채우기에서 변경 내용 추적을 사용하도록 AdventureWorks 샘플 데이터베이스의 HumanResources.JobCandidate 테이블의 전체 텍스트 인덱스 변경 예제입니다.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • 수동 채우기

    CHANGE_TRACKING MANUAL을 지정하는 경우 전체 텍스트 엔진은 전체 텍스트 인덱스 수동 채우기를 사용합니다. 초기 전체 채우기가 완료된 후 기본 테이블의 데이터가 수정되면 변경 내용이 추적됩니다. 그러나 ALTER FULLTEXT INDEX를 실행할 때까지 전체 텍스트 인덱스로 전파되지 않습니다. START UPDATE POPULATION 문입니다. SQL Server 에이전트를 사용하여 이 Transact-SQL 문을 주기적으로 호출할 수 있습니다.

    수동 채우기를 사용하는 변경 내용 추적을 시작하려면

    예제 - 수동 변경 내용 추적이 있는 전체 텍스트 인덱스 만들기
    다음 예제에서는 AdventureWorks 샘플 데이터베이스의 HumanResources.JobCandidate 테이블에 수동 채우기와 함께 변경 내용 추적을 사용하는 전체 텍스트 인덱스 만들기.

    USE AdventureWorks;  
    GO  
    CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);  
    CREATE FULLTEXT CATALOG ft AS DEFAULT;  
    CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)   
       KEY INDEX ui_ukJobCand   
       WITH CHANGE_TRACKING=MANUAL;  
    GO  
    

    예제 - 수동 채우기 실행
    다음 예제에서는 AdventureWorks 샘플 데이터베이스의 HumanResources.JobCandidate 테이블의 변경 추적된 전체 텍스트 인덱스에서 수동 채우기를 실행합니다.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
    GO  
    

변경 내용 추적 설정

타임스탬프 기반 증분 채우기

증분 채우기는 전체 텍스트 인덱스를 수동으로 채우기 위한 대체 메커니즘입니다. 테이블에 많은 양의 삽입이 발생하는 경우 증분 채우기를 사용하는 것이 수동 채우기를 사용하는 것이 더 효율적일 수 있습니다.

CHANGE_TRACKING이 MANUAL 또는 OFF로 설정된 전체 텍스트 인덱스에 대해 실행할 수 있습니다.

증분 채우기의 요구 사항은 인덱싱된 테이블에 타임스탬프 데이터 형식의 열이 있어야 한다는 것입니다. 타임스탬프 열이 없으면 증분 채우기를 수행할 수 없습니다.

SQL Server에서는 타임스탬프 열을 사용하여 마지막 채우기 후에 변경된 행을 식별합니다. 그런 다음 증분 채우기는 마지막 채우기 이후 또는 마지막 채우기가 진행 중인 동안 추가, 삭제 또는 수정된 행에 대한 전체 텍스트 인덱스를 업데이트합니다. 채우기의 끝에서 전체 텍스트 엔진은 새 타임스탬프 값을 기록합니다. 이 값은 SQL Gatherer에서 찾은 가장 큰 타임스탬프 값입니다. 이 값은 다음 증분 채우기가 시작될 때 사용됩니다.

경우에 따라 증분 모집단에 대한 요청으로 전체 채우기가 발생합니다.

  • 타임스탬프 열이 없는 테이블의 증분 채우기에 대한 요청은 전체 채우기 작업을 생성합니다.
  • 전체 텍스트 인덱스에 대해 처음으로 실행하는 채우기가 증분 채우기이면 모든 행이 인덱싱되므로 그 결과가 전체 채우기의 경우와 같습니다.
  • 테이블의 전체 텍스트 인덱스에 영향을 주는 메타데이터가 마지막 채우기 이후 변경된 경우 증분 채우기 요청이 전체 채우기로 구현됩니다. 여기에는 열, 인덱스 또는 전체 텍스트 인덱스 정의를 변경하여 발생하는 메타데이터 변경이 포함됩니다.

증분 채우기 실행

증분 채우기를 실행하려면 START INCREMENTAL POPULATION절을 사용하여 ALTER FULLTEXT INDEX문을 실행합니다.

증분 채우기에 대한 일정 만들기 또는 변경

  1. 개체 탐색기에서 마스터 서버를 확장합니다.

  2. 데이터베이스를 확장한 다음 전체 텍스트 인덱스가 포함된 데이터베이스를 확장합니다.

  3. 테이블을 확장합니다.

    전체 텍스트 인덱스가 정의된 테이블을 마우스 오른쪽 단추로 클릭하고 전체 텍스트 인덱스를 선택한 다음 전체 텍스트 인덱스 상황에 맞는 메뉴에서 속성을 클릭합니다. 그러면 전체 텍스트 인덱스 대화 상자가 열립니다.

    Important

    기본 테이블이나 뷰에 timestamp 데이터 형식의 열이 포함되어 있지 않으면 증분 채우기를 수행할 수 없습니다.

  4. 페이지 선택 창에서 일정을 선택합니다.

    이 페이지를 사용하여 기본 테이블 또는 전체 텍스트 인덱스의 인덱싱된 뷰에서 증분 테이블 채우기를 시작하는 SQL Server 에이전트 작업에 대한 일정을 만들거나 관리할 수 있습니다.

    옵션은 다음과 같습니다.

    • 새 일정을 만들려면새로 만들기를 클릭합니다.

      그러면 일정을 만들 수 있는 새 전체 텍스트 인덱싱 테이블 일정 대화 상자가 열립니다. OK를 클릭하여 테스트를 예약합니다.

      Important

      전체 텍스트 인덱스 속성 대화 상자를 닫으면 SQL Server 에이전트 작업(database_name.table_name)에 대한 증분 테이블 채우기 시작)이 새 일정에 연결됩니다. 동일한 전체 텍스트 인덱스에 대해 여러 일정을 만드는 경우 모두 동일한 작업을 사용합니다.

    • 기존 일정을 변경하려면 기존 일정을 선택하고 편집을 클릭합니다.

      그러면 일정을 수정할 수 있는 새 전체 텍스트 인덱싱 테이블 일정 대화 상자가 열립니다.

      참고 항목

      SQL Server 에이전트 작업을 수정하는 방법은 작업 수정을 참조하세요.

    • 기존 일정을 제거하려면 기존 일정을 선택하고 삭제를 클릭합니다.

  5. 확인을 선택합니다.

전체 텍스트 채우기의 오류 문제 해결(크롤링)

탐색 중에 오류가 발생하면 전체 텍스트 검색 탐색 로깅 기능은 일반 텍스트 파일인 탐색 로그를 만들고 유지 관리합니다. 각 크롤링 로그는 특정 전체 텍스트 카탈로그에 해당합니다. 기본적으로 지정된 인스턴스(이 예제에서는 기본 인스턴스)에 대한 크롤링 로그는 %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG 폴더에 있습니다.

크롤링 로그 파일은 다음 명명 체계를 따릅니다.

SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]

크롤링 로그 파일 이름의 변수 부분은 다음과 같습니다.

  • <DatabaseID> - 데이터베이스의 ID입니다. <dbid>는 앞에 0이 오는 5자리 숫자입니다.
  • <FullTextCatalogID> - 전체 텍스트 카탈로그 ID입니다. <catid>는 앞에 0이 오는 5자리 숫자입니다.
  • <n> - 동일한 전체 텍스트 카탈로그의 하나 이상의 크롤링 로그가 있음을 나타내는 정수입니다.

예를 들어, SQLFT0000500008.2는 데이터베이스 ID가 5이고 전체 텍스트 카탈로그 ID가 8인 데이터베이스의 크롤링 로그 파일입니다. 파일 이름의 끝에 있는 2는 이 데이터베이스/카탈로그 쌍에 대해 크롤링 로그 파일이 두 개 있음을 나타냅니다.

참고 항목

sys.dm_fts_index_population(Transact-SQL)
전체 텍스트 검색 시작
전체 텍스트 인덱스 만들기 및 관리
CREATE FULLTEXT INDEX(Transact-SQL)
ALTER FULLTEXT INDEX(Transact-SQL)