Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Marketing Cloud - データビュー参照クエリのチューニング

公開日: Dec 2, 2024
説明

データビュー (Data View) を参照するクエリ (Query) がタイムアウト (Timeout) してしまう場合、効率的なクエリであるかどうかが重要な確認ポイントになります。
例えば、データビューを参照するクエリである場合、where 句のフィールド (EventDate等) に日付関数 (DATEADD 等) や 文字列関数 (CONVERT 等) を多用されている場合があります。

この場合、実行計画が最適化されにくくなり、結果的にリソースを消費し、最後はタイムアウトする傾向が高くなります。

解決策
以下の (1) から (5) までの where 句の指定は等しいですが、実際に効率的なクエリは (5) となります。
 
(1) EventDate フィールドに SysUtcDateTime() と BETWEEN 句にて評価を行う式だが、CONVERT() や DATEADD() が全項に含むクエリ
where CONVERT(nvarchar, DATEADD(hour,15,EventDate),120) BETWEEN CONVERT(nvarchar, DATEADD(day, -3, DATEADD(hour,9,SysUtcDateTime())),120) AND CONVERT(nvarchar, DATEADD(hour, 9, SysUtcDateTime()), 120)

(2) 上記 (1) の全項に使用されていた同一の CONVERT() をはずしたクエリ
where DATEADD(hour,15,EventDate) BETWEEN DATEADD(day -3, DATEADD(hour, 9, SysUtcDateTime())) AND DATEADD(hour, 9, SysUtcDateTime())
 
(3) 上記 (2) の全項に DATEADD(hour, -15, 値) を使用し、左辺の DATEADD(hour, 15, EventDate) を EventDate にしたクエリ
where EventDate BETWEEN DATEADD(day -3, DATEADD(hour, -6, SysUtcDateTime())) AND DATEADD(hour, -6, SysUtcDateTime())

(4) 上記 (3) の DATEADD(day, -3, 値) を DATEADD(hour, -72, 値) にしたクエリ
where EventDate BETWEEN DATEADD(hour -72, DATEADD(hour, -6, SysUtcDateTime())) AND DATEADD(hour, -6, SysUtcDateTime())

(5) 上記 (4) の DATEADD(hour, -72, DATEADD(hour, -6, 値)) を DATEADD(hour, -78, 値)) にしたクエリ
where EventDate BETWEEN DATEADD(hour -78, SysUtcDateTime()) AND DATEADD(hour, -6, SysUtcDateTime())​

クエリがタイムアウトしてしまうという場合には上記のポイントをご確認ください。 
ご利用のクエリによってはパフォーマンスが改善しない場合も発生します。
本内容はあくまでクエリ最適化の対策の1つとしてご承知ください。
ナレッジ記事番号

000384693

 
読み込み中
Salesforce Help | Article