AI Search の増分インデックス作成パフォーマンスを最適化し、新規または更新されたレコードの検索可能性に影響する AIS Index Event Queue のバックログ問題に対処するIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } AI Search Index Event Processing は、AI Search によって不要に処理されているフィールドが原因で大量のイベントが生成される場合、高負荷時にパフォーマンスの問題を引き起こす可能性があります。 デフォルトでは、AI Search は Indexed Sources [ais_datasource] レコードとして構成されたテーブル内のレコードに存在するすべてのフィールドをインデックス化します。各 Indexed Source に対して、AI Search は ais_index キュー内に [sys_event] レコードを生成することで、レコードの増分インデックス作成を行います。これは、レコードに対するあらゆる INSERT、UPDATE、または DELETE アクションによってトリガーされ、その後、30 秒ごとに実行される単一の AIS Index Event Processor [sys_trigger] によって処理されます。この定期的な処理により、レコードへの変更が AI Search の検索結果へ迅速に反映されることが保証されます。 注: AIS Index Event Processor がイベントを処理するのに 30 秒を大幅に超える時間がかかる場合があります。これは通常、インデックス作成中、またはイベントのバックログが増加している際に見られます。 「Queue」フィールドは、インデックス化されたデータを保持する AIS Node 上で処理される AI Search(AIS)インデックスイベント用の AI Search 単一ノードインジェストキューであり、値は ais_index です。「Name」フィールドには AIS イベント名が含まれ、INSERT、UPDATE、または DELETE アクションの場合は ais_index です。「Instance」フィールドには、INSERT、UPDATE、または DELETE アクションが実行されたレコードの sys_id が含まれます。「Table」フィールドには、そのレコードに対して INSERT または UPDATE アクションが実行された table の名前が含まれます。「Parm1」フィールドには、INSERT または UPDATE された、インデックス化対象のすべてのフィールドが含まれます。DELETE アクションの場合、「Parm1」フィールドには、そのレコードが削除されたテーブル名が含まれます。「Parm2」フィールドにはアクションが含まれます。 テーブル全体のインデックス作成を実行すると、Indexed Source 上でインデックス化対象となるレコード 10,000 件ごとに ais_index.no_block イベントが作成されます。10,000 件のレコードをインデックス化すると、[sysevent] レコードの状態は「processed」に設定され、次の 10,000 件のレコードセットを処理するための新しい [sysevent] レコードが作成されます。 注: インデックス作成ジョブが開始されると、それをキャンセルまたは一時停止するオプションはなく、インデックス作成ジョブが完了するまで待つ必要があります。プラットフォームは同じ Indexed Source に対して複数のインデックス作成ジョブを開始することを防止しないため、イベント処理のパフォーマンス問題を引き起こす可能性があります。そのため、複数のインデックス作成ジョブを開始しないよう注意してください。インデックス作成ジョブがすぐに開始されない場合は、[sysevent] テーブルの「ais_index」キューにバックログが存在しているためです。イベントは「sys_created_on」フィールドに基づいて時系列順に処理されます。 [sys_trigger]のスケジュールジョブAIS Index Purge Stale Document および AIS Create Index Updatable Field Evenは毎日トリガーされ、スケジュールされた時刻に処理されるイベントを作成します。∗∗ais_index.purge_filtered_doc∗∗イベントは、IndexedSourceのRetentionPolicy設定を維持し、保持ポリシーの対象外となったレコードをインデックスから削除するためのものです。∗∗ais_index.updatable_fields∗∗イベントは、AISIndex内の動的に更新可能なフィールドの更新をサポートするためのものです。「ais_index」イベントが「processed」状態になると、AISNode上のインデックスが更新され、レコードに対して行われた変更がAISearchの検索結果に反映されます。sys\_trigger] のスケジュールジョブ **AIS Index Purge Stale Document** および **AIS Create Index Updatable Field Event** は毎日トリガーされ、スケジュールされた時刻に処理されるイベントを作成します。 **ais\_index.purge\_filtered\_doc** イベントは、Indexed Source の Retention Policy 設定を維持し、保持ポリシーの対象外となったレコードをインデックスから削除するためのものです。 **ais\_index.updatable\_fields** イベントは、AIS Index 内の動的に更新可能なフィールドの更新をサポートするためのものです。 「ais\_index」イベントが「processed」状態になると、AIS Node 上のインデックスが更新され、レコードに対して行われた変更が AI Search の検索結果に反映されます。 Symptoms<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 通常、新しいレコードが追加されてから 30 秒以内に検索できない場合、またはレコードが更新されても、その更新がかなり後になるまで検索結果に反映されない場合は、AIS Index Event Processor に根本的な問題があることを示している可能性があります。極端なケースでは、このプロセッサーによるイベントの処理に相当な時間がかかっています。これは通常、処理対象として生成されたイベントの大量流入、または非常に長時間実行されているインデックス作成ジョブが原因です。このイベントの流入または低速なインデックス作成ジョブによってイベントのバックログが蓄積し、これらのイベントを適時に処理する際に遅延が発生する可能性があります。その結果、検索機能がリアルタイムで更新されず、実際のデータとエンドユーザーに表示される検索結果の間に不一致が生じる可能性があります。 Facts<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } AIS Index Event Queue およびイベント処理を監視するためのツールがいくつかあります。 1. AIS Status Page - ページの末尾(5 分ごとに更新)。 https://INSTANCE_NAME.service-now.com/xmlstats.do?include=ais 2. AIS Index Queue stats(5 分ごとに更新)- Created [sys_created_on] フィールドをリストビューに追加し、そのフィールドで Sort z to a を使用して、Queue Size フィールドを確認します。 https://INSTANCE_NAME.service-now.com/ais_index_queue_stats_list.do 3. ais_index キュー上の System Event [sysevent] テーブル。Ready および Queued 状態の ais_index イベントの現在のバックログが表示されます。 https:/INSTANCE_NAME.service-now.com/sysevent_list.do?sysparm_query=queueSTARTSWITHais_index%5EstateNOT%20INprocessed%2Cerror%2Ctransferred 4. System Events と Scheduled Jobs ダッシュボードの監視 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } すべてのリリース Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } LDAP や SSO など、インデックス化された ServiceNow テーブルを頻繁に更新するサードパーティシステムとのインテグレーションによって、インデックス作成イベントが大幅に増加する可能性があります。これは、これらのインテグレーションが、検索対象ではないものの no_text_index 属性が設定されていない不要なフィールドを頻繁に更新するためです。その結果、不要なインデックス作成イベントが作成され、インデックス更新処理のパフォーマンス低下につながります。一括インポートまたは再帰的な Business Rule も、この属性が設定されていないフィールドを更新することでこの問題の一因となり、同様に不要なインデックス作成イベントを生成する可能性があります。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } この問題を軽減するには、インデックス作成を必要としないフィールドに no_text_index 属性が適切に設定されていることを確認します。これにより、不要なインデックス作成イベントが減少し、インデックス更新を処理する際のパフォーマンスが向上します。この属性を必要とするフィールドを特定するには、[sysevent] テーブルの ais_index キューを分析し、Table フィールドでグループ化して、どのテーブルが最も多くのインデックス作成イベントを生成しているかを確認する必要があります。Parm1 フィールドには、インデックス化されるレコード上で更新されたフィールドが含まれていますが、このフィールドでグループ化することはできません。可視性を高めるために、データを CSV または XLS にエクスポートし、スプレッドシートで分析することを推奨します。AIS Index Event Processor 向けイベントの生成を停止するには、イベント内のすべてのフィールドに no_text_index 属性を適用する必要があります。 [sysevent] テーブルはローテーションされるため、過去 6 日間に生成されたイベントのみが含まれ、処理済みのイベントは 6 日後に削除されます。そのため、たとえばイベントのバックログが一括インポートによって生成された場合は、6 日間の期間内に分析を実行する必要があります。 ais_index キュー上の System Event [sysevent] テーブル。過去 6 日間に生成されたすべてのイベントがテーブル別にグループ化されて表示されます。 https:/INSTANCE_NAME.service-now.com/sysevent_list.do?sysparm_query=queueSTARTSWITHais_index%5EGROUPBYtablesysevent_list.do?sysparm_query=queueSTARTSWITHais_index%5EGROUPBYtable また、datetime、currency、numerical など、不必要に処理されているすべてのフィールドに no_text_index 属性を追加するスクリプトもあります。 注: これらのスクリプトのいずれか、または両方を最初に非本番インスタンスでテストすることを推奨します。 AI Search [ais_index] の場合は、KB1644352 のスクリプトを使用して、AI Search によって不必要に処理されているフィールドを特定し、そのフィールドのインデックス作成を無効にします。 Zing Search [text_index] の場合は、KB0953781 のスクリプトを使用して、不必要にテキストインデックス化されているフィールドを特定します。 ベストプラクティス: イベントが大量に生成されている緊急時には、[ais_datasource] テーブルで Indexed Source を一時的に inactive にすることで、特定のテーブルに対するすべての AIS Index Update イベントの生成を停止できます。必要なすべてのフィールドに no_text_index 属性を適用した後、Indexed Source を再度 active にすると、再インデックス化が必要になります。どのフィールドに no_text_index 属性を適用できるかについての詳細は、Field settings のドキュメントを確認してください。この属性が適用されると、属性を作成したフィールドに対する AIS Index Update イベントの生成が自動的に停止します。保持ポリシーがあるため、[task] テーブルの sys_updated_on などのフィールドには注意してください。属性を追加した後、フィールドをインデックスから削除するためにテーブルを再インデックス化します。10,000 件を超えるレコードを含むテーブルについては、オフピーク時間帯に一度に 1 つのテーブルを再インデックス化することを推奨します。https://instance_name.service-now.com/ais_index_queue_stats_list.do および queue="ais_index" の [sysevent] テーブルを監視し、改善を検証します。一貫したパフォーマンスを確保するために、すべてのインスタンスに変更を適用します。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } }