Service Portal のパフォーマンス問題を分析するSummary<!-- /*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: ; } } Service Portal の特定のページが、ナビゲートした場合でも直接アクセスした場合でも、非常に遅く読み込まれます。これは一般的に、1 つまたは少数のウィジェットが読み込み時間の大部分を消費しているためです。この記事では、そのようなシナリオを特定する方法について説明します。 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: ; } } すべてのリリースに適用 Instructions<!-- /*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. どのページの読み込みが遅いかを特定します。これは問題の再現手順に従って確認できます。そうでない場合は、ページを読み込み、URL の id パラメーターの値を確認します(例: /sp?id=list)。 2. 特定した後、そのページの読み込みにどれだけ時間がかかっているかを確認します。これはブラウザーの開発者ツールの Network タブで確認できます。これにより、どの要素にどれだけ時間がかかっているかが分かります。 以下のユースケースのスクリーンショットでは、合計時間が 5.43 秒であり、その大部分が約 4 秒の待機時間であることに注目してください。 待機時間が大半を占めている場合、サーバーからの応答に時間がかかっていることを意味します。 3. サーバー時間が長いことが判明した場合、どのサーバー機能が原因なのかを確認します。考えられるシナリオは 3 つあります。 実行時間の長い ACL実行時間の長い Business Rule実行時間の長い SQL クエリー 4. これらのうちどれが最も時間を消費しているかを確認するには、System Diagnostics > Session Debug > Debug Log に移動します。 5. Debug Log を有効にした後、問題を再現し、jsdebugger ウィンドウまたは ui_page.do でログを取得します。このトランザクションに時間がかかっている場合、次のようなログが表示されます。キーワードは EXCESSIVE です。 log05:15:20 AM.771 EXCESSIVE *** End #2298398 /api/now/sp/page, user: admin, total time: 0:00:06.484, processing time: 0:00:06.484, SQL time: 0:00:05.209 (count: 887), business rule: 0:00:00.001 (count: 6), ACL time: 0:00:00.001, Cache build time: 0:00:00.007, source: 103.23.66.61 , type:rest, method:GET, api_name:now/sp, resource:now/sp/page, version:Default, user_id:admin, response_status:200 このログは、どのコンポーネントが最も時間を消費したかを示します。このユースケースでは、合計時間は約 6 秒でした。その内訳は SQL time = 5 秒、Business Rule = 1ms、ACL = 1ms です。これは SQL クエリーが最も時間を消費していることを意味します。 6. コンポーネントが判明したら、そのトランザクションに対応する具体的な機能を調べます。このトランザクションを開始したリクエスト URL を記録しておくことを忘れないでください。このユースケースでは、Network ログに表示されている API 呼び出し /api/now/sp/page です。 7. そのコンポーネントの Session Debug を有効にします。この場合は Debug SQL (detailed) を有効にします。詳細ログを有効にすると、クエリーのトレースが表示され、遅延の原因となっているウィジェットの sys_id が確認できます。 8. SQL Debug を有効にした状態で問題を再現し、その後 ui_page.do を再読み込みして新しいログを取得します。 9. API 名で検索し、以下のスクリーンショットのように Queries 配下のトランザクション名を探します。これにより、すべてのクエリーに要した時間がトランザクション単位で表示され、どのクエリーが全体時間の何パーセントを消費したかを確認できます。 10. 最も時間を消費しているクエリーが特定できたら(製品のデフォルトビューでは長時間実行されるものが先頭に表示されます)、以下の画像のようにログ内でそのクエリーを検索します。SQL 文では選択フィールドが通常非表示であるため、クエリーの後半部分をコピーして検索します。これにより正確な SQL ログエントリーが返され、その SQL ログを展開することで、どのウィジェットが遅延を引き起こしているかを確認できます。 11. ウィジェットを分析し、その分析結果に基づいてクエリーを修正します。 この例では、遅延の原因は Query です。Business Rule または ACL が原因である場合は、それぞれ対応する Session Debug を有効にしてください。これにより、どのトランザクションが最も時間を消費しているかを特定できます。その後、それらを調査し、適切に解決できます。 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: ; } } Script Debugger and Session LogSession Debug