전체 텍스트 인덱스 채우기Populate Full-Text Indexes

전체 텍스트 인덱스를 만들고 유지 관리하려면 채우기 ( 탐색이라고도 함)라는 프로세스를 사용하여 인덱스를 채워야 합니다.Creating and maintaining a full-text index involves populating the index by using a process called a population (also known as a crawl).

Types of population Types of population

전체 텍스트 인덱스는 다음 유형의 채우기를 지원합니다.A full-text index supports the following types of population:

  • 전체 채우기Full population
  • 변경 내용 추적 기반 자동 또는 수동 채우기Automatic or manual population based on change tracking
  • 타임스탬프 기반 증분 채우기Incremental population based on a timestamp

전체 채우기Full population

전체 채우기 중에는 테이블 또는 인덱싱된 뷰의 모든 행에 대해 인덱스 항목이 작성됩니다.During a full population, index entries are built for all the rows of a table or indexed view. 전체 텍스트 인덱스의 전체 채우기는 기본 테이블 또는 인덱싱된 뷰의 모든 행에 대해 인덱스 항목을 작성합니다.A full population of a full-text index, builds index entries for all the rows of the base table or indexed view.

기본적으로 SQL ServerSQL Server 는 새 전체 텍스트 인덱스를 만드는 즉시 채웁니다.By default, SQL ServerSQL Server populates a new full-text index fully as soon as it is created.

  • 한편 전체 채우기는 많은 양의 리소스를 사용할 수 있습니다.On the one hand, a full population can consume a significant amount of resources. 따라서 리소스 사용량이 많을 때 전체 텍스트 인덱스를 만들 경우, 특히 전체 텍스트 인덱스의 기본 테이블이 클 경우 리소스 사용량이 많지 않을 때까지 전체 채우기를 지연시키는 것이 좋습니다.Therefore, when creating a full-text index during peak periods, it is often a best practice to delay the full population until an off-peak time, particularly if the base table of an full-text index is large.
  • 반면 인덱스가 속한 전체 텍스트 카탈로그는 전체 텍스트 인덱스가 모두 채워질 때까지 사용할 수 없습니다.On the other hand, the full-text catalog to which the index belongs is not usable until all of its full-text indexes are populated.

전체 텍스트 인덱스를 즉시 채우지 않고 만들려면 CREATE FULLTEXT INDEX 문에서 CHANGE_TRACKING OFF, NO POPULATION 절을 지정합니다.To create a full-text index without populating it immediately, specify the CHANGE_TRACKING OFF, NO POPULATION clause in the CREATE FULLTEXT INDEX statement. CHANGE_TRACKING MANUAL을 지정하는 경우 전체 텍스트 엔진은 START FULL POPULATION 또는 START INCREMENTAL POPULATION 절을 사용하는 ALTER FULLTEXT INDEX 문을 실행한 다음에야 새 전체 텍스트 인덱스를 채웁니다.If you specify CHANGE_TRACKING MANUAL, the Full-Text Engine doesn't populate the new full-text index until you execute an ALTER FULLTEXT INDEX statement using the START FULL POPULATION or START INCREMENTAL POPULATION clause.

예제 - 전체 채우기를 실행하지 않고 전체 텍스트 인덱스 만들기Example - Create a full-text index without running a full population

다음 예에서는 Production.Document 예제 데이터베이스의 AdventureWorks 테이블에서 전체 텍스트 인덱스를 만듭니다.The following example creates a full-text index on the Production.Document table of the AdventureWorks sample database. 이 예제에서는 WITH CHANGE_TRACKING OFF, NO POPULATION을 사용하여 초기 전체 채우기를 지연합니다.This example uses WITH CHANGE_TRACKING OFF, NO POPULATION to delay the initial full 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  

예제 - 테이블에서 전체 채우기 실행Example - Run a full population on a table

다음 예에서는 Production.Document 예제 데이터베이스의 AdventureWorks 테이블에 대해 전체 채우기를 실행합니다.The following example runs a full population on the Production.Document table of the AdventureWorks sample database.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

변경 내용 추적 기반 채우기Population based on change tracking

경우에 따라 초기 전체 채우기 후에 변경 내용 추적을 사용하여 전체 텍스트 인덱스를 유지 관리할 수도 있습니다.Optionally, you can use change tracking to maintain a full-text index after its initial full population. SQL ServerSQL Server 에서는 마지막 채우기 후에 기본 테이블의 변경 내용을 추적하는 테이블을 유지 관리하기 때문에 변경 내용 추적을 사용할 경우 약간의 오버헤드가 발생합니다.There is a small overhead associated with change tracking because SQL ServerSQL Server maintains a table in which it tracks changes to the base table since the last population. 변경 내용 추적을 사용하는 경우 SQL ServerSQL Server는 업데이트, 삭제 또는 삽입에 의해 수정된 기본 테이블 또는 인덱싱된 뷰의 행 레코드를 유지 관리합니다.When you use change tracking, SQL ServerSQL Server maintains a record of the rows in the base table or indexed view that have been modified by updates, deletes, or inserts. WRITETEXT 및 UPDATETEXT를 통한 데이터 변경 내용은 전체 텍스트 인덱스에 반영되지 않고 변경 내용 추적 시 선택되지도 않습니다.Data changes made through WRITETEXT and UPDATETEXT are not reflected in the full-text index, and are not picked up with change tracking.

참고

timestamp 열이 포함된 테이블에 대해서는 변경 내용 추적 대신 증분 채우기를 사용할 수 있습니다.For tables containing a timestamp column, you can use incremental population instead of change tracking.

인덱스를 만드는 동안 변경 내용 추적을 설정하면 SQL ServerSQL Server는 새 전체 텍스트 인덱스를 만드는 즉시 완전히 채웁니다.When you enable change tracking during index creation, SQL ServerSQL Server fully populates the new full-text index immediately after it is created. 그 이후에는 변경 내용이 추적되고 전체 텍스트 인덱스로 전파됩니다.Thereafter, changes are tracked and propagated to the full-text index.

변경 내용 추적 설정Enable change tracking

다음과 같은 두 가지 유형의 변경 내용 추적이 있습니다.There are two types of change tracking:

  • 자동(CHANGE_TRACKING AUTO 옵션).Automatic (CHANGE_TRACKING AUTO option). 자동 변경 내용 추적이 기본 동작입니다.Automatic change tracking is the default behavior.
  • 수동(CHANGE_TRACKING MANUAL 옵션).Manual (CHANGE_TRACKING MANUAL option).

    변경 내용 추적의 유형에 따라 전체 텍스트 인덱스가 채워지는 방법이 다음과 같이 결정됩니다.The type of change tracking determines how the full-text index is populated, as follows:

  • 자동 채우기Automatic population

    기본적으로 또는 CHANGE_TRACKING AUTO를 지정한 경우 전체 텍스트 엔진은 전체 텍스트 인덱스에 대해 자동 채우기를 사용합니다.By default, or if you specify CHANGE_TRACKING AUTO, the Full-Text Engine uses automatic population on the full-text index. 초기 전체 채우기가 완료된 후 기본 테이블의 데이터가 수정되면 변경 내용이 추적되고 추적된 변경 내용이 자동으로 전파됩니다.After the initial full population completes, changes are tracked as data is modified in the base table, and the tracked changes are propagated automatically. 그러나 전체 텍스트 인덱스가 백그라운드에서 업데이트되기 때문에 전파된 변경 내용은 인덱스에 즉시 반영되지 않을 수도 있습니다.The full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.

    자동 채우기를 사용하는 변경 내용 추적을 시작하려면To start tracking changes with automatic population

    예제 - 자동 변경 내용 추적을 사용하도록 전체 텍스트 인덱스 변경Example - Alter a full-text index to use automatic change tracking
    다음 예에서는 자동 채우기와 함께 변경 내용 추적을 사용하도록 HumanResources.JobCandidate 예제 데이터베이스의 AdventureWorks 테이블에 대한 전체 텍스트 인덱스를 변경합니다.The following example changes the full-text index of the HumanResources.JobCandidate table of the AdventureWorks sample database to use change tracking with automatic population.

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

    CHANGE_TRACKING MANUAL을 지정한 경우 전체 텍스트 엔진에서는 전체 텍스트 인덱스에 대해 수동 채우기를 사용합니다.If you specify CHANGE_TRACKING MANUAL, the Full-Text Engine uses manual population on the full-text index. 초기 전체 채우기가 완료된 후 기본 테이블의 데이터가 수정되면 변경 내용이 추적됩니다.After the initial full population completes, changes are tracked as data is modified in the base table. 그러나 추적된 변경 내용은 ALTER FULLTEXT INDEX…를 실행할 때까지 전체 텍스트 인덱스로 전파되지 않습니다.However, they are not propagated to the full-text index until you execute an ALTER FULLTEXT INDEX … START UPDATE POPULATION 문을 사용하여 수동으로 변경 내용을 적용할 수 있습니다.START UPDATE POPULATION statement. SQL ServerSQL Server 에이전트를 사용하여 이 Transact-SQLTransact-SQL 문을 주기적으로 호출할 수 있습니다.You can use SQL ServerSQL Server Agent to call this Transact-SQLTransact-SQL statement periodically.

    수동 채우기가 있는 변경 내용 추적을 시작하려면To start tracking changes with manual population

    예제 - 수동 변경 내용 추적이 있는 전체 텍스트 인덱스 만들기Example - Create a full-text index with manual change tracking
    다음 예에서는 HumanResources.JobCandidate 예제 데이터베이스의 AdventureWorks 테이블에 대해 수동 채우기가 있는 변경 내용 추적을 사용하는 전체 텍스트 인덱스를 만듭니다.The following example creates a full-text index that will use change tracking with manual population on the HumanResources.JobCandidate table of the AdventureWorks sample database.

    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  
    

    예제 - 수동 채우기 실행Example - Run a manual population
    다음 예에서는 HumanResources.JobCandidate 예제 데이터베이스의 AdventureWorks 테이블에서 변경 내용 추적이 설정된 전체 텍스트 인덱스에 대해 수동 채우기를 실행합니다.The following example runs a manual population on the change-tracked full-text index of the HumanResources.JobCandidate table of the AdventureWorks sample database.

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

변경 내용 추적 해제Disable change tracking

타임스탬프 기반 증분 채우기Incremental population based on a timestamp

증분 채우기는 전체 텍스트 인덱스를 수동으로 채우는 대체 메커니즘으로,An incremental population is an alternative mechanism for manually populating a full-text index. 테이블에서 대량 삽입이 발생하는 경우 증분 채우기를 사용하는 것이 수동 채우기를 사용하는 것보다 효율적일 수 있습니다.If a table experiences a high volume of inserts, using incremental population can be more efficient that using manual population.

CHANGE_TRACKING이 MANUAL 또는 OFF로 설정된 전체 텍스트 인덱스에 대해 실행할 수 있습니다.You can run an incremental population for a full-text index that has CHANGE_TRACKING set to MANUAL or OFF.

증분 채우기를 사용하려면 인덱싱된 테이블에 timestamp 데이터 형식의 열이 있어야 합니다.The requirement for incremental population is that the indexed table must have a column of the timestamp data type. timestamp 열이 없으면 증분 채우기를 수행할 수 없습니다.If a timestamp column does not exist, incremental population cannot be performed.

SQL ServerSQL Server 에서는 timestamp 열을 사용하여 마지막 채우기 후에 변경된 행을 식별합니다. uses the timestamp column to identify rows that have changed since the last population. 그러면 증분 채우기는 마지막 채우기 후 또는 마지막 채우기를 진행 중인 동안 추가, 삭제 또는 수정된 행에 대해 전체 텍스트 인덱스를 업데이트합니다.The incremental population then updates the full-text index for rows added, deleted, or modified after the last population, or while the last population was in progress. 채우기 완료 시 전체 텍스트 엔진은 새 timestamp 값을 기록합니다.At the end of a population, the Full-Text Engine records a new timestamp value. 이 값은 SQL Gatherer에서 찾은 가장 큰 timestamp 값입니다.This value is the largest timestamp value that SQL Gatherer has found. 이 값은 후속 증분 채우기가 시작될 때 사용됩니다.This value will be used when the next incremental population starts.

경우에 따라 증분 채우기를 요청하면 전체 채우기가 수행됩니다.In some cases, the request for an incremental population results in a full population.

  • timestamp 열이 없는 테이블에 대해 증분 채우기를 요청하면 전체 채우기 작업이 수행됩니다.A request for incremental population on a table without a timestamp column results in a full population operation.
  • 전체 텍스트 인덱스에 대해 처음으로 실행하는 채우기가 증분 채우기이면 모든 행이 인덱싱되므로 그 결과가 전체 채우기의 경우와 같습니다.If the first population on a full-text index is an incremental population, it indexes all rows, making it equivalent to a full population.
  • 테이블의 전체 텍스트 인덱스에 영향을 주는 메타데이터가 마지막 채우기 후에 변경된 경우 증분 채우기 요청은 전체 채우기로 구현됩니다.If any metadata that affects the full-text index for the table has changed since the last population, incremental population requests are implemented as full populations. 여기에는 열, 인덱스 또는 전체 텍스트 인덱스 정의의 변경으로 인한 메타데이터 변경 내용이 포함됩니다.This includes metadata changes caused by altering any column, index, or full-text index definitions.

증분 채우기 실행Run an incremental population

증분 채우기를 실행하려면 START INCREMENTAL POPULATION 절을 사용하는 ALTER FULLTEXT INDEX 문을 실행합니다.To run an incremental population, execute an ALTER FULLTEXT INDEX statement using the START INCREMENTAL POPULATION clause.

증분 채우기 일정 만들기 또는 변경 Create or change a schedule for incremental population

  1. Management Studio의 개체 탐색기에서 서버를 확장합니다.In Management Studio, in Object Explorer, expand the server.

  2. 데이터베이스를 확장한 다음 전체 텍스트 인덱스가 포함된 데이터베이스를 확장합니다.Expand Databases, and then expand the database that contains the full-text index.

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

    전체 텍스트 인덱스가 정의된 테이블을 마우스 오른쪽 단추로 클릭하고 전체 텍스트 인덱스를 선택한 다음 전체 텍스트 인덱스 상황에 맞는 메뉴에서 속성을 클릭합니다.Right-click the table on which the full-text index is defined, select Full-Text index, and on the Full-Text index context menu, click Properties. 그러면 전체 텍스트 인덱스 속성 대화 상자가 열립니다.This opens the Full-text index Properties dialog box.

    중요

    기본 테이블이나 뷰에 timestamp 데이터 형식의 열이 포함되어 있지 않으면 증분 채우기를 수행할 수 없습니다.If the base table or view does not contain a column of the timestamp data type, incremental population is not possible.

  4. 페이지 선택 창에서 일정을 선택합니다.In the Select a page pane, select Schedules.

    이 페이지를 사용하여 전체 텍스트 인덱스의 기본 테이블 또는 인덱싱된 뷰에 대한 증분 테이블 채우기를 시작하는 SQL Server 에이전트 작업의 일정을 만들거나 관리할 수 있습니다.Use this page to create or manage schedules for a SQL Server Agent job that starts an incremental table population on the base table or indexed view of the full-text index.

    다음과 같은 옵션이 있습니다.The options are as follows:

    • 새 일정을 만들려면 새로 만들기를 클릭합니다.To create a new schedule, click New.

      그러면 일정을 만들 수 있는 새 전체 텍스트 인덱싱 테이블 일정 대화 상자가 열립니다.This opens the New Full-Text Indexing Table Schedule dialog box, where you can create a schedule. 일정을 저장하려면 확인을 클릭합니다.To save the schedule, click OK.

      중요

      전체 텍스트 인덱스 속성대화 상자를 닫으면 SQL Server 에이전트 작업(database_name. table_name 에 대한 증분 테이블 채우기 시작)이 새 일정에 연결됩니다.A SQL Server Agent job (Start Incremental Table Population on database_name.table_name) is associated with a new schedule after you exit the Full-Text Index Properties dialog box. 동일한 전체 텍스트 인덱스에 대해 일정을 여러 개 만들 경우 모두 동일한 작업을 사용합니다.If you create multiple schedules for the same full-text index, they all use the same job.

    • 기존 일정을 변경하려면 기존 일정을 선택하고 편집을 클릭합니다.To change an existing schedule, select the existing schedule and click Edit.

      그러면 일정을 수정할 수 있는 새 전체 텍스트 인덱싱 테이블 일정 대화 상자가 열립니다.This opens the New Full-Text Indexing Table Schedule dialog box, where you can modify the schedule.

      참고

      SQL Server 에이전트 작업 수정에 대한 자세한 내용은 작업 수정을 참조하세요.For information about modifying a SQL Server Agent job, see Modify a Job.

    • 기존 일정을 제거하려면 기존 일정을 선택하고 삭제를 클릭합니다.To remove an existing schedule, select the existing schedule and click Delete.

  5. 확인을 클릭합니다.Click OK.

전체 텍스트 채우기의 오류 문제 해결(탐색) Troubleshoot errors in a full-text population (crawl)

탐색 중에 오류가 발생하면 전체 텍스트 검색 탐색 로깅 기능은 일반 텍스트 파일인 탐색 로그를 만들고 유지 관리합니다.When an error occurs during a crawl, the Full-Text Search crawl logging facility creates and maintains a crawl log, which is a plain text file. 각 탐색 로그는 특정 전체 텍스트 카탈로그에 해당합니다.Each crawl log corresponds to a particular full-text catalog. 기본적으로 지정된 인스턴스(이 예제에서는 기본 인스턴스)에 대한 크롤링 로그는 %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG 폴더에 있습니다.By default, crawl logs for a given instance (in this example, the default instance) are located in %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG folder.

탐색 로그 파일은 다음 명명 구성표를 따릅니다.The crawl log file follows the following naming scheme:

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

크롤링 로그 파일 이름의 변수 부분은 다음과 같습니다.The variable parts of the crawl log file name are the following.

  • <DatabaseID> - 데이터베이스의 ID입니다.<DatabaseID> - The ID of a database. <dbid>는 앞에 오는 0을 사용하는 5자리 숫자입니다. <dbid> is a five digit number with leading zeros.
  • <FullTextCatalogID> - 전체 텍스트 카탈로그 ID입니다.<FullTextCatalogID> - Full-text catalog ID. <catid>는 앞에 오는 0을 사용하는 5자리 숫자입니다. <catid> is a five digit number with leading zeros.
  • <n> - 동일한 전체 텍스트 카탈로그의 탐색 로그가 하나 이상 있음을 나타내는 정수입니다.<n> - Is an integer that indicates one or more crawl logs of the same full-text catalog exist.

    예를 들어 SQLFT0000500008.2는 데이터베이스 ID = 5, 전체 텍스트 카탈로그 ID = 8인 데이터베이스의 탐색 로그 파일입니다.For example, SQLFT0000500008.2 is the crawl log file for a database with database ID = 5, and full-text catalog ID = 8. 파일 이름 끝에 있는 2는 이 데이터베이스/카탈로그 쌍의 탐색 로그 파일이 두 개 있음을 나타냅니다.The 2 at the end of the file name indicates that there are two crawl log files for this database/catalog pair.

참고 항목See Also

sys.dm_fts_index_population(Transact-SQL) sys.dm_fts_index_population (Transact-SQL)
전체 텍스트 검색 시작 Get Started with Full-Text Search
전체 텍스트 인덱스 만들기 및 관리 Create and Manage Full-Text Indexes
CREATE FULLTEXT INDEX(Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX(Transact-SQL)ALTER FULLTEXT INDEX (Transact-SQL)