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;

実行結果
SQLDW_STATS_UPDATE_DATE

最後に更新された日時以降にテーブルサイズや値の分布が変わっている場合(データの追加や更新等が行われている場合)は統計を更新する必要があります。

以前の記事でも触れましたが、現在 Azure SQL Data Warehouse では統計情報が自動的に作成されないため、手動で作成する必要があります(これは今後変更される予定です)が、データのサイズや分布が変更された場合には、統計を更新することも重要なポイントになりますので、是非ご活用ください。