スポンサーリンク
SQL Server

SQL Server 2017 Standard Editionでは自動チューニングは非対応だった話

SQL Server
この記事は約5分で読めます。

― Query Store の設定・見方・バージョン別対応表つき ―

SQL Server のパフォーマンス改善を進める中で、「自動チューニング(Automatic Tuning)」という機能が気になっていました。 実行計画が悪化したときに自動で元の良いプランに戻してくれる――そんな便利な機能があるなら使ってみたいと思い、実際に設定を試してみました。

ところが今回の検証で、SQL Server 2017 Standard Edition では自動チューニングは非対応であることがはっきり分かりました。

この記事では、

  • 実際に設定した内容
  • Query Store の見方(日本語表記)
  • 2017 / 2019 / 2022 のエディション別対応表

をまとめておきます。

■ 自動チューニングを設定してみた結果…

まずは Automatic Tuning を有効化しようとして、次の設定を実行しました。

ALTER DATABASE userDB
SET AUTOMATIC_TUNING (
    FORCE_LAST_GOOD_PLAN = ON,
    CREATE_INDEX = OFF,
    DROP_INDEX = OFF
);

しかし返ってきたのはこのメッセージ。

自動チューニングを利用できるのは、エンタープライズをご利用のお客様のみです。

つまり、Standard Edition では Automatic Tuning の構文自体が受け付けられないということです。

調べてみると、Automatic Tuning(FORCE_LAST_GOOD_PLAN / CREATE_INDEX / DROP_INDEX)は Enterprise 限定機能で、Standard Edition では完全に非対応。 今回のエラーはまさにその仕様通りの動きでした。

■ Query Store は Standard Edition でも使える

Automatic Tuning は使えませんが、Query Store 自体は Standard Edition でもフル機能で利用できます。

そこで、Query Store を有効化する設定を実行しました。

ALTER DATABASE userDB SET QUERY_STORE = ON;

ALTER DATABASE userDB
SET QUERY_STORE (
    OPERATION_MODE = READ_WRITE,
    QUERY_CAPTURE_MODE = AUTO,
    MAX_STORAGE_SIZE_MB = 500,
    SIZE_BASED_CLEANUP_MODE = AUTO
);

これで Query Store が有効になり、データベースのプロパティにも「クエリ ストア」タブが表示されるようになりました。

■ 最初は Query Store のフォルダが表示されなかった

最初に戸惑ったのはここでした。

  • プロパティには「クエリ ストア」がある
  • でも SSMS の左側ツリーに「クエリ ストア」フォルダが出てこない

原因は単純で、Query Store にまだ 1 件もデータが記録されていなかったためでした。

QUERY_CAPTURE_MODE = AUTO の場合、軽いクエリは記録されません。 少し重めのクエリを実行したところ、ようやく Query Store フォルダが表示されました。

■ Query Store の見方(日本語表記)

SSMS(日本語版)では、Query Store の各レポートが日本語で表示されます。

データベース
└─ userDB
      └─ クエリ ストア
           ├─ 後退したクエリ
           ├─ リソース消費の多いクエリ
           ├─ 追跡されたクエリ
           └─ 全体的なリソース消費

それぞれの意味は次の通りです。

● 後退したクエリ(Regressed Queries)

昨日まで速かったのに、急に遅くなったクエリを自動で検出。

● リソース消費の多いクエリ(Top Resource Consuming Queries)

CPU や実行時間が重いクエリをランキングで表示。

● 追跡されたクエリ(Tracked Queries)

特定のクエリの実行計画の変化を追跡。

● 全体的なリソース消費(Overall Resource Consumption)

データベース全体の負荷傾向を可視化。

GUI が非常に分かりやすく、実行計画の比較も簡単にできます。

■ Query Store の状態確認(SQL で見る場合)

Query Store が ON か確認

SELECT name, is_query_store_on
FROM sys.databases
WHERE name = 'userDB';

Query Store の設定確認

SELECT *
FROM sys.database_query_store_options;

データが記録されているか確認

SELECT COUNT(*) FROM sys.query_store_query;

■ SQL Server 2017 / 2019 / 2022 のエディション別対応表

● Query Store 対応表

機能201720192022
Query Store(基本機能)✔ Standard / Enterprise✔ Standard / Enterprise✔ Standard / Enterprise
手動プラン強制✔ Standard / Enterprise✔ Standard / Enterprise✔ Standard / Enterprise

● Automatic Tuning 対応表

機能2017 Std2017 Ent2019 Std2019 Ent2022 Std2022 Ent
FORCE_LAST_GOOD_PLAN(自動)
CREATE_INDEX(自動)
DROP_INDEX(自動)

結論:Automatic Tuning は全バージョンで Enterprise 限定。 Standard Edition は手動チューニングのみ。

■ まとめ:Standard Edition でも Query Store は強力

今回の検証で分かったことは次の通りです。

  • SQL Server 2017 Standard Edition → 自動チューニングは非対応
  • Query Store → Standard Edition でもフル機能で利用可能
  • Query Store を使えば、遅いクエリの特定や実行計画の劣化検出が簡単
  • 手動でのプラン強制も可能で、運用の安定性が大きく向上する

Automatic Tuning が使えないのは残念ですが、Query Store だけでも十分にパフォーマンス改善に役立ちます。 むしろ、これまで知らずに使っていなかったのがもったいないくらいでした。

これからは Query Store を活用しながら、手動でのプラン管理やクエリ分析を進めていこうと思います。

コメント

タイトルとURLをコピーしました