Azure SQL Data Warehouse での統計の管理
Microsoft Japan Data Platform Tech Sales Team
高木 英朗
以前のエントリで統計の概要と作成方法について紹介しました。今回は統計の管理方法について紹介します。
統計はクエリの実行プランを作成するための情報を提供する重要な要素であることをお伝えしましたが、最適なパフォーマンスを得るためには、この統計情報を最新にしておくということも重要です。
統計の更新タイミング
統計を最新にしておくための最適なタイミングは、データの追加や更新の後です。これはデータの追加や更新時にテーブルのサイズや値の分布が変わる可能性が高いためです。
もし、すべての統計を管理するのは時間がかかりすぎる場合は、例えば新しい値が毎日追加されるような日付列だったり JOIN、GROUP BY、ORDER BY、DISTINCT 等に使われる列に限定すると良いでしょう。
統計が最新かどうかを判断する方法
統計が最新かどうかを判断するため、統計が最後に更新された日時を確認することができます。
確認するには、以下のクエリを実行します。
SELECT
sm.[name] AS [schema_name],
tb.[name] AS [table_name],
co.[name] AS [stats_column_name],
st.[name] AS [stats_name],
STATS_DATE(st.[object_id],st.[stats_id]) AS [stats_last_updated_date]
FROM
sys.objects ob
JOIN sys.stats st
ON ob.[object_id] = st.[object_id]
JOIN sys.stats_columns sc
ON st.[stats_id] = sc.[stats_id]
AND st.[object_id] = sc.[object_id]
JOIN sys.columns co
ON sc.[column_id] = co.[column_id]
AND sc.[object_id] = co.[object_id]
JOIN sys.types ty
ON co.[user_type_id] = ty.[user_type_id]
JOIN sys.tables tb
ON co.[object_id] = tb.[object_id]
JOIN sys.schemas sm
ON tb.[schema_id] = sm.[schema_id]
WHERE
st.[user_created] = 1;
最後に更新された日時以降にテーブルサイズや値の分布が変わっている場合(データの追加や更新等が行われている場合)は統計を更新する必要があります。
以前の記事でも触れましたが、現在 Azure SQL Data Warehouse では統計情報が自動的に作成されないため、手動で作成する必要があります(これは今後変更される予定です)が、データのサイズや分布が変更された場合には、統計を更新することも重要なポイントになりますので、是非ご活用ください。