Full Text Catalog 의 변경 내용 추적을 AUTO 로 운영중인데 서버 재기동 이후 채우기가 동작하지 않는 상황 발생 하였다.
검색해서 찾은 해결 방법은
1. rebuild
2. 변경 내용 추적을 MANUAL 로 변경했다 AUTO 로 변경
3. 서버 재기동
rebuild 는 시간 및 부하 이슈가 있으니 변경 내용 추적을 MANUAL 로 변경했다 AUTO 로 변경했다.
이후 주기적으로 잘 수집되는것을 확인하였다.
# Full Text Catalog 상태 확인
declare @id int
select @id = id FROM sys.sysobjects where [Name] = 'TableName'
select 'TableFullTextBackgroundUpdateIndexOn' as 'Property', objectpropertyex(@id, 'TableFullTextBackgroundUpdateIndexOn') as 'Value'
union
select 'TableFullTextChangeTrackingOn', objectpropertyex(@id, 'TableFullTextChangeTrackingOn')
union
select 'TableFulltextDocsProcessed', objectpropertyex(@id, 'TableFulltextDocsProcessed')
union
select 'TableFulltextFailCount', objectpropertyex(@id, 'TableFulltextFailCount')
union
select 'TableFulltextItemCount', objectpropertyex(@id, 'TableFulltextItemCount')
union
select 'TableFulltextKeyColumn', objectpropertyex(@id, 'TableFulltextKeyColumn')
union
select 'TableFulltextPendingChanges', objectpropertyex(@id, 'TableFulltextPendingChanges')
union
select 'TableHasActiveFulltextIndex', objectpropertyex(@id, 'TableHasActiveFulltextIndex')
union
select 'TableFulltextPopulateStatus', objectpropertyex(@id, 'TableFulltextPopulateStatus')
# 아래 쿼리의 Command 에서 생성된 쿼리로 변경 내용 추적을 MANUAL 로 변경했다 AUTO 로 변경한다.
# 주의할 점은 crawl_end_date가 없는 경우 전체를 다시 수집한다.
SELECT [t].[name] [table_name],
[i].[name] [index_name],
[fi].[change_tracking_state_desc],
[fi].[has_crawl_completed],
[fi].[crawl_type_desc],
[fi].[crawl_end_date],
[ius].[last_user_update],
[ius].[last_user_seek],
(SELECT [name]+',' FROM [sys].[fulltext_index_columns] [fc] INNER JOIN [sys].[columns] [c] ON [c].[object_id] = [fc].[object_id] AND [c].[column_id] = [fc].[column_id] WHERE [fc].[object_id] = [fi].[object_id] FOR XML PATH('')) [columns],
(CASE WHEN [fi].[crawl_end_date] < ISNULL([ius].[last_user_update], [ius].[last_user_seek]) THEN 'ALTER FULLTEXT INDEX ON ['+[t].[name]+'] SET CHANGE_TRACKING MANUAL; ALTER FULLTEXT INDEX ON ['+[t].[name]+'] SET CHANGE_TRACKING AUTO' ELSE '' END) [Command]
FROM [sys].[fulltext_indexes] [fi]
INNER JOIN [sys].[indexes] [i] ON [i].[index_id] = [fi].[unique_index_id] AND [i].[object_id] = [fi].[object_id]
INNER JOIN [sys].[tables] [t] ON [t].[object_id] = [fi].[object_id]
LEFT JOIN [sys].[dm_db_index_usage_stats] [ius] ON [ius].[index_id] = [fi].[unique_index_id] AND [ius].[object_id] = [fi].[object_id] AND [ius].[database_id] = DB_ID()
ORDER BY [table_name], [index_name]
참고 :
'SQL Server' 카테고리의 다른 글
Always Encrypted char, nchar 데이터 타입 공백 검색 이슈 (0) | 2022.09.02 |
---|---|
Always Encrypted (0) | 2022.09.02 |
set ansi_padding off (0) | 2022.09.02 |