見出し画像

【第394回】 SQL クエリアクティビティ最適化ダッシュボードが新登場

Marketing Cloud Engagement の Winter ’26 新機能リリースでは、SQL クエリアクティビティの健全性を可視化・最適化するための 最適化ダッシュボード が新たに登場しました。この機能は Automation Studio の「オプティマイザー」タブ からアクセスできます。

ダッシュボードでは、当日分のデータから操作可能で、カレンダーで 過去 1 週間以内の期間 を指定して分析を行います。

指定期間の平均実行時間が表示され、その結果に応じて以下の 3 つのスコアに分類されます。

  • 🟥 アクションが必要

  • 🟨 注意

  • 🟩 良好

平均実行時間が 1 分未満でも「注意」と判定される場合があり、やや厳しめの基準となっています。とはいえ、環境やデータ量によって適切な基準は異なるため、ご自身の環境に合わせて確認・調整してみるとよいでしょう。

Salesforce の推奨では、実行時間が 10 分を超える場合は何らかの改善が必要とされています。今回のリリースに合わせて、SQL 最適化に関するヘルプドキュメントも更新されていますので、ぜひ一読をおすすめします。


考慮事項

いくつか注意すべきポイントがあります。

まず、この機能ではオートメーション全体の実行だけでなく、アクティビティ単体の実行やオートメーションの一回限りの実行も記録されます。
特にこれまでアクティビティの単一実行では、完了状況を確認する手段がなかったため、これはまさにゲームチェンジャーといえるでしょう。

ただし、単一実行時には「実行時間」が計測されません
そのため、平均実行時間も算出されず、「開始時刻」は確認できますが「終了時刻」は不明な点に注意が必要です。

リスト上にクエリ名が表示されれば、処理自体は完了していますが、エラーが発生していても表示される点にも気を付けましょう。
実行結果を確認する際は、リストからクエリ名を選択し、実行回数・成功数が存在し、成功率(100%であること)をチェックしてください。
下記の図の通り、もし実行されているのに成功率が 0% の場合は、単一実行が失敗しています

次に、タイムゾーンの扱いにも注意が必要です。
画面下部のリストに表示される実行時刻はアカウントのタイムゾーンで表示されますが、画面上部のグラフや抽出期間の指定はCST(Central Standard Time)基準となります。下記の図のようにズレが生じます。日本の場合は、CST を 15 時間の時差があるたので、午後 15 時までの処理は、前日分として記録されています。最終実行(開始・終了)時間は JST で表示されます。

最後に、各 SQL 名のリンクをクリックすると、そのクエリの内容に直接遷移するのではなく、パフォーマンスリスクスコア改善のための推奨事項リストが表示されます。修正の際の参考資料として活用してみてください。


いかがでしたでしょうか。

今回紹介したように、各 SQL の実行状況を簡単に可視化できる便利な機能が新たに追加されました。ただし、現時点では一部のクエリで実行時間が取得できないケースも確認されており、その仕組みについてはまだ不明な点があります。今後も引き続き調査を進めていく予定です。

なお、私が以前紹介した以下のクエリを利用し、Automation 名のみ差し替えて Query Studio で実行することで、オートメーション単位での当日実行分の実行時間を確認することも可能です。ぜひご活用ください。

SELECT TOP 10000 
    AutomationName COLLATE japanese_cs_as_ks_ws AS [AutomationName],
    ActivityName COLLATE japanese_cs_as_ks_ws AS [ActivityName],
    ActivityInstanceStep,
    CONVERT(VARCHAR(19), DATEADD(HH, 9, ActivityInstanceStartTime_UTC), 120) AS [ActivityInstanceStartTime],
    CONVERT(VARCHAR(19), DATEADD(HH, 9, ActivityInstanceEndTime_UTC), 120) AS [ActivityInstanceEndTime],
    FORMAT(DATEDIFF(S, ActivityInstanceStartTime_UTC, ActivityInstanceEndTime_UTC) / 60, '00') + ':' + 
    FORMAT(DATEDIFF(S, ActivityInstanceStartTime_UTC, ActivityInstanceEndTime_UTC) % 60, '00') AS [Duration]
FROM 
    _automationactivityinstance
WHERE 
    AutomationName = 'XXXXXXXXXXXXXXX'
    AND DATEADD(HH, 9, ActivityInstanceStartTime_UTC) >= CONVERT(DATE, DATEADD(HH, 15, GETDATE()), 111)
ORDER BY 
    CONVERT(DECIMAL, ActivityInstanceStep) ASC, 
    DATEDIFF(S, ActivityInstanceStartTime_UTC, ActivityInstanceEndTime_UTC) DESC

今回は以上です。


前回の記事はこちら

私の note のトップページはこちら