遅いトランザクションのトラブルシューティング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: ; } } UI トランザクションの完了に予想以上の時間がかかる場合、この記事では原因を特定するための 3 つのオプションを提供します。調査は、Filter Navigator > System Logs に記録されたタイミングを使用して、ACL、ビジネスルール、データベース、またはクライアント側など、プラットフォーム内の処理が遅い領域に焦点を当てることができます。 ユーザーが長時間実行されるトランザクションを開始した場合、トランザクションクォータルールによって、5 分後(デフォルト)にそのトランザクションがキャンセルされます。Your transaction has been cancelled と同様の警告メッセージが、理由として Maximum execution time exceeded とともに表示されることがあります。調査するには、次の手順を使用します。 Note: これらの手順は同じノード上で実施する必要があります(たとえば、遅いトランザクションの再現と、その後のノードログファイルの確認)。 レスポンスタイムが 100ms を超えるトランザクションのみがログに表示されます。すべてのデータベースクエリを表示するには、Filter Navigator > Debug SQL detailed で追加のデバッグを有効にしてください。 この記事では、低速パフォーマンスを調査するための 3 つのオプションについて説明します。 Option 1(最も簡単な方法): UI の Debug Module。特定のセッションまたはトランザクションを再現する場合の、迅速かつ簡単な方法です。このオプションから Index Suggestion Engine に進むこともできます。Option 2A: Node Log file browser。手順は多くなりますが、ログ内のあらゆるエントリを分析できる柔軟なアプローチです。Option 2B: localhost_log ファイルをローカルワークステーションにダウンロードし、テキストエディターを使用してログをさらに調査します。 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: ; } } 現在サポートされているすべてのバージョン 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: ; } } オプション 1:セッションのデバッグ (最も簡単な方法) 以下の手順を使用するか、この動画に従って Session Debug 機能を使用して遅いトランザクションのトラブルシューティングを行ってください。 1. Filter Navigator > System Diagnostics > Session Debug > Enable All に移動します(新しいウィンドウでデバッグツールが開きます) 2. トランザクションを再現します 3. セッションログウィンドウの出力を確認します セッションログには便利な機能が含まれています。ログはダウンロード、クリア、またはフィルタリングして、出力画面から不要な情報を除去できます。 ログ出力で EXCESSIVE という単語を検索してください。これらは調査が必要な低速クエリです。 コストの高い SQL クエリ(たとえば、8.459 秒かかるクエリ)が存在する場合は、インデックス提案機能を使用できます。 トランザクションを再現したメイン UI ウィンドウで、Query 見出しの下にあるデバッグ出力までスクロールします。コストの高いクエリのレコードを開きます。これにより、slow query モジュール内のレコードが開きます。KB0782916 の How to create indexes using the Index Suggestion Engine (ISE) の手順に従います。 オプション 2A:ノードログファイルブラウザ 遅いトランザクションを再現します。Filter Navigator > System Logs > Transactions (All user) に移動します。リストの列をパーソナライズします。追加すると便利な列は次のとおりです。 Browser timeBusiness rule timeClient network timeClient response timeClient script timeNetwork timeSemaphore wait timeSessionSession wait timeSession IDTotal wait timeTotal page load timeTotal wait timeTransaction NumberTransaction processing timeUI policy time リスト条件フィルタを created_by = <affected_user> に変更し、created の降順で並べ替えます。これにより不要な情報を除外し、影響を受けているユーザーのみに焦点を当てます。トランザクションログ内で遅いトランザクションを特定します。URL 列にトランザクションの種類が表示されます。遅いトランザクションはリストの上部付近に表示されるはずです。問題のトランザクションの SessionID(session 列)と Transaction Number をコピーします。Filter Navigator > Node Log File browser に移動します。Start time および End time フィールドを、問題のトランザクションが実行された時刻を含むように変更します。次のフィールドを設定します。 Session ID = (手順 6 の SessionID を貼り付けます)Max rows = 10000Message = (手順 6 の Transaction Number を貼り付けます) Submit を選択します。対象のトランザクションが表示されます。影響を受けたトランザクションログ出力から txid の値をコピーします。例: txid=81c8704bdbc7 SessionID のみではなく txid で検索すると、ユーザートランザクションに関するより詳細な情報が返されます。 ログファイルパラメータはそのままにして、message フィールド内の Transaction Number を txid の値に置き換えます。Submit を選択します。 上記の手順により、対象のトランザクションについて追加の詳細情報を取得できます。例: トランザクションは mytable_list.do でしたデータベースクエリ(SELECT)は 13.604 秒かかりました(Time:0:00:13.604)EXCESSIVE ***END を含むログエントリは、時間の大部分を占めているプラットフォーム部分を示しています。この例では、13.737 が 総時間 であり、SQL 時間 は 13.611 です。つまり、時間の大部分が SQL(データベースレイヤー)で費やされています。 クエリ自体を確認すると、問題は明らかです。このクエリには WHERE 句がありません。つまり、プラットフォームはテーブル内のすべてのレコードを取得する必要があります。これは大規模環境では効率的ではなく、データベースインデックスを使用できません。より小さな結果セットを取得するためのフィルタ条件を追加する必要があります。 次の例では、同じリストビューのトランザクションにフィルタ条件 mycolumn='ABCD' を使用しています。フィルタ条件があってもクエリは 15 秒かかっており、依然として低速です。これは、条件を有効に機能させるために mycolumn 列にインデックスが必要である可能性を示しています。 UI を使用して MyTable(MyColumn) にインデックスを追加した後、再度トランザクションを確認すると、SQL クエリはログに表示されなくなります。これは、実行時間が 100ms 未満となり、ログ記録されなくなったためです。SQL 時間は現在 73ms と非常に高速になっています。 オプション 2B:ノードログファイルのダウンロード 遅いトランザクションを再現します。Filter Navigator > Node Log File Download に移動します。Name が localhost で始まるレコードのみ表示されるようにリスト条件を変更します。Name を降順で並べ替えます。リストの最上部にあるファイルが本日の localhost ログファイルです。レコードを開きます。Download log を選択します。 任意のテキストエディターを使用してログを検索および調査します。関連するトランザクションを特定するには、SessionID(session 列)および Transaction Number を使用して検索します。利用可能な場合は、txid の値も検索に使用できます。 次のステップ 調査の焦点は、トランザクション時間の大部分が費やされている箇所に合わせる必要があります。ほとんどの時間が ACL の処理に費やされている場合は、その領域を重点的に調査する必要があります。UI Action の時間が長い場合は、UI Actions を調査する必要があります。SQL 時間が最も長い場合は、データベースクエリを確認する必要があります。 SQL 時間がトランザクション時間の大部分を占めている場合は、次の質問に回答してください。 クエリには条件フィルタ(WHERE 句)がありますか。 条件フィルタがある場合、それは効率的ですか。KB の追加情報セクションにある Performance Best Practice for Efficient Queries を参照してください。 データ結果セットは、小規模または限定されたデータサブセット(たとえば active=1 や日付範囲)にスコープされていますか。そうでない場合は、結果セットを小さくするために active=1 または日付範囲を追加することを検討してください。クエリは index hint または index の恩恵を受けますか。WHERE 句の後にある列および論理演算子によっては、インデックスが役立つ場合があります。 Option 1 に従った場合は、KB0782916 の Index Suggestion Engine article を使用して簡単にインデックスを試すことができます。 本番環境へ適用する前に、最近クローンされたインスタンスで新しいインデックスを必ずテストしてください。 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: ; } } セッションログの詳細については、 スクリプトデバッガーとセッションログの ServiceNow 製品ドキュメントを参照してください。インデックスの追加の詳細については、 テーブルの作成 ServiceNow 製品ドキュメント を参照してください。クライアントトランザクションタイミングの詳細については、 クライアントトランザクションタイミング ServiceNow 製品ドキュメントを参照してください。ServiceNow インスタンスの最も一般的で影響の大きいパフォーマンスの問題に関するリソースについては、「 KB0829067 - パフォーマンスランディングページ」を参照してください。KB0755706 - セッション待機/セッション同期とはKB0782916 - インデックス提案エンジン (ISE) を使用してインデックスを作成する方法KB0634588 - サービスポータルにおける 6 つの一般的なパフォーマンスの落とし穴とその回避方法ServiceNow コミュニティ:効率的なクエリのためのパフォーマンスのベストプラクティス:上位 10 のプラクティスServiceNow コミュニティ:最適なインスタンスパフォーマンスのための推奨事項