LoginSignup
4

More than 1 year has passed since last update.

posted at

SQL Server 統計情報更新の動作とSQLまとめ

概要

SQL

統計情報の自動作成

設定状況確認

select
  name 
  ,is_auto_create_stats_on
  ,is_auto_create_stats_incremental_on
  ,is_auto_update_stats_on
  ,is_auto_update_stats_async_on
from sys.databases order by name
列名 データ型 説明
is_auto_create_stats_on bit 1 = AUTO_CREATE_STATISTICS は ON です。
is_auto_create_stats_incremental_on bit 自動統計の増分オプションの既定の設定を示します。
0 = 自動作成の統計は非増分です。
1 = 可能な場合は、自動作成の統計情報は増分されます。
適用対象: SQL Server 2014 (12.x) 以降。
is_auto_update_stats_on bit 1 = AUTO_UPDATE_STATISTICS は ON です。
is_auto_update_stats_async_on bit 1 = AUTO_UPDATE_STATISTICS_ASYNC は ON です。

設定変更

ALTER DATABASE データベース名 SET AUTO_CREATE_STATISTICS ON|OFF
ALTER DATABASE データベース名 SET AUTO_UPDATE_STATISTICS_ASYNC ON|OFF

トレースフラグ2371

  • 確認
    DBCC TRACESTATUS(2371)

  • 有効化
    DBCC TRACEON(2371)

  • 無効化
    DBCC TRACEOFF(2371)

統計情報の操作

更新の実行

EXEC sp_updatestats

オブジェクトの統計情報更新状況確認

SELECT
    so.name
    , ss.name
    , ss.auto_created
    , ss.user_created
    , ss.no_recompute
    , STATS_DATE(ss.object_id, ss.stats_id)
FROM
    sys.objects AS so
    LEFT JOIN
        sys.stats AS ss
    ON
        ss.object_id = so.object_id
WHERE
    type = ‘U’
ORDER BY
    so.name

最終更新日時・更新回数の確認

SELECT
    OBJECT_NAME(dsp.object_id) 
    , dsp.object_id 
    , ss.name
    , dsp.last_updated 
    , dsp.rows
    , dsp.rows_sampled 
    , dsp.steps 
    , dsp.unfiltered_rows 
    , dsp.modification_counter 
FROM
    sys.stats AS ss 
    CROSS APPLY 
    sys.dm_db_stats_properties(ss.object_id, ss.stats_id) AS dsp 
WHERE
    OBJECT_SCHEMA_NAME(dsp.object_id, DB_ID()) <> ‘sys’

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4