전체 텍스트 검색 인덱스 관리
테이블에 전체 텍스트 인덱스를 추가하는 구문은 CREATE FULLTEXT INDEX 구문입니다.
테이블에 전체 텍스트 인덱스를 생성할 때 NO POPULATION옵션을 설정하지 않는 경우 인덱스가 생성되면 즉시 전체 인덱스 채우기가 수행됩니다.
NO POPULATION옵션은 CHANGE_TRACKING옵션이 OFF일 경우에만 사용할 수 있습니다.
CHANGE_TRACKING옵션은 MANUAL, AUTO, OFF 플래그를 갖습니다.
CHANGE_TRACKING 옵션이 MANUAL일 경우 1)인덱싱은 SQL Server 에이전트를 사용하여 일정에 따라 수행되거나 사용자에 의해 수동으로 1)인덱스 채우기를 수행할 수 있습니다.
수동으로 인덱스 채우기를 수행하는 구문은 ALTER FULLTEXT INDEX 구문입니다.
AUTO일 경우 테이블에서 데이터가 수정될 때 전체 텍스트 인덱스를 자동으로 업데이트합니다.
OFF일 경우 인덱싱된 데이터의 변경 내용 목록을 유지하지 않습니다. 이 모드에서만 NO POPULATION옵션을 설정할 수 있는데 SQL Server에서 인덱스를 만든 후 전체 인덱스 채우기를 수행하지 않습니다. MANUAL 모드와 OFF 모드가 다른 부분이 바로 이 부분입니다.
인덱스를 생성한 후 전체 인덱스를 채우려면 ALTER FULLTEXT INDEX구문을 START {FULL | INCREMENTAL} POPULATION절과 함께 실행해야 합니다.
위에서 언급한 내용을 토대로 전체 텍스트 인덱싱을 관리하는 유형을 다음과 같이 정리해 볼 수 있습니다.
1. 변경 내용 자동 추적에 의한 인덱스 자동 채우기
인덱스를 생성할 때 CHANGE_TRACKING옵션을 AUTO로 설정합니다.
관련 테이블의 데이터가 변경될 경우 자동으로 인덱스를 채우게 됩니다.
하지만 즉시 반영되지 않는 경우도 있는데, 이럴 경우 전체 텍스트 인덱싱 프로세스를 모니터링하여 문제를 진단할 수 있습니다. 관련 정보는 다음 링크를 참조하세요.(Transact-SQL 함수를 사용하여 전체 텍스트 속성 값 얻기)
이 모드는 관련 데이터의 갱신이 빈번하지 않고 해당 데이터의 크기가 비교적 작을 경우에 설정하면 SQL Server에 부하를 주지 않고 인덱스를 관리할 수 있습니다.
2. SQL Server 에이전트의 일정에 의한 인덱스 채우기
인덱스의 CHANGE_TRACKING옵션이 MANUAL이거나 OFF일 경우 전체 텍스트 인덱스 채우기는 일정에 의해 관리할 수 있습니다.
SQL Server 에이전트의 일정은 전체 텍스트 카탈로그 단위로 수행됩니다.
따라서 전체 텍스트 카탈로그에 테이블이나 인덱싱된 뷰를 구성할 경우 데이터의 변경 빈도, 변경되는 데이터의 크기, 변경되는 데이터의 양이 많거나 적은 시간대(요일)등을 고려하여 구성해야 합니다.
이러한 정보가 유사한 테이블이나 뷰를 하나의 전체 텍스트 카탈로그에 구성하면 일정에 의해 수행되는 인덱스 채우기 작업으로 시스템에 부하를 주는 일을 최소화할 수 있습니다.
3. 수동으로 인덱스 채우기 수행(즉시 수행)
인덱스의 CHANGE_TRACKING옵션이 MANUAL이거나 OFF일 경우 관리자(사용자)가 직접 인덱스 채우기를 수행할 수 있습니다.
인덱스 채우기를 직접 실행할 경우 ALTER FULLTEXT INDEX 구문에 {START | STOP | PAUSE | RESUME } POPULATION 절을 사용하여 수동 인덱스 채우기를 수행합니다.
인덱스 채우기를 시작하려면 START {FULL | INCREMENTAL | UPDATE} POPULATION 절을 사용합니다.
FULL모드는 이미 인덱싱된 행을 포함해서 테이블의 모든 행을 검색합니다.
INCREMENTAL모드는 마지막 채우기 이후 수정된 행만 검색합니다.
단, 해당 테이블에 timestamp 유형의 열이 있는 경우에만 적용할 수 있습니다. timestamp 유형의 열이 없는 경우 FULL채우기를 수행합니다.
UPDATE모드는 해당 인덱스의 변경 내용 추적이 수동으로 설정되어 있을 때 마지막으로 업데이트된 후 모든 삽입, 업데이트 또는 삭제를 처리합니다. 주의할 것은 백그라운드 인덱스 업데이트(일정에 의한) 또는 변경 내용 추적이 자동으로 설정되어 있으면 안 됩니다.
STOP POPULATION은 START POPULATION에 의한 인덱스 채우기를 중지합니다. 백그라운드 인덱스 업데이트 또는 자동 변경 내용 추적을 중지하지 않습니다. 자동 변경 내용 추적을 중지하려면 SET CHANGE_TRACKING OFF절을 사용해야 합니다.
{PAUSE | RESUME} POPULATION 은 START FULL POPULATION에 의한 전체 채우기에만 사용할 수 있습니다.
이상으로 전체 텍스트 인덱스를 관리하는 방법에 대해서 알아보았습니다.
위의 내용을 기초로 전체 텍스트 인덱스를 관리하는 전략을 수립하면 됩니다.
단, 실제 운영하는 데이터베이스에서 전체 텍스트 인덱스를 변경 내용 자동 추적에 의한 채우기를 설정할 것인지 SQL Server 에이전트에 의한 일정으로 채우기를 수행할 것인지의 판단은 데이터의 양의 변화와 변경 빈도 및 접근 빈도를 지속적으로 모니터링하여 결정지어야 합니다.
1) 인덱스 채우기는 인덱싱과 같은 의미로 사용됩니다.
출처: https://devman.tistory.com/entry/SQL-Server-전체-텍스트-검색-3-전체-텍스트-인덱스-관리 [코딩하는 녀석]
'DB > MSSQL' 카테고리의 다른 글
[MSSQL] WHERE CASE WHEN 조건절에 조건문 (0) | 2020.06.17 |
---|---|
MSSQL) Full Text Search : Indexing 진행 현황 확인하기 (0) | 2020.06.12 |
MSSQL) Full Text Search(FREETEXTABLE) 관리 및 데이터 쿼리 모음 (0) | 2020.06.12 |
SQL SERVER 2016 Full-Text Search 세팅하기 (+ 한국어 설정까지) (0) | 2020.06.11 |
MS-SQL with (nolock) 란? (0) | 2020.06.03 |