SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database のセカンダリ レプリカのクエリストアについて

leave a comment

SQL Server 2022 以降では、セカンダリ レプリカに対してのクエリストアがサポートされています。

SQL Server 2022 では、制限付きプレビュー (TF の有効化が必要)、SQL Server 2025 では一般提供開始されている機能となります。

この機能が SQL Database でも使用することができるようになっています。(本書作成時点では、プレビューでの提供)

SQL Database でこの機能を使用する場合のポイントをまとめておきたいと思います

機能が使用できる環境

SQL Database で本機能が使用できる環境については サポートされている高可用性シナリオ に記載されています。

SQL Database の場合は、次の環境がサポート対象となっています。

  • 汎用目的 (General Purpose)
    • Geo レプリカ / フェールオーバーグループ構成
  • Premium (DTU)
    • 読み取りセカンダリ
    • Geo レプリカ / フェールオーバーグループ構成
  • Business Critical
    • 読み取りセカンダリ
    • Geo レプリカ / フェールオーバーグループ構成

基本的には、汎用目的以上の読み取り環境に対してセカンダリ レプリカのクエリストアがサポートされています。(DTU の Basic / Standard は非サポート)

現時点では「読み取り可能なセカンダリのクエリ ストアは、現在、Azure SQL Databaseの Hyperscale サービス レベルでは使用できません。」の注釈があるため、Hyperscale も非サポートとなっているようです。

また、サポートされる環境については sys.query_store_replicas からも確認することができます。

こちらでは、「名前付きレプリカ」が「role_type」として記載されていますので、Hyperscale もそのうちサポート対象となる可能性があるかと思います。

image

これらの環境であれば、セカンダリ レプリカのクエリストアの利用を検討することができます。

 

使用するための設定

可用性 に既定の設定が記載されています。

image

SQL Database の場合、既定で有効化されていますが、環境によっては明示的な有効化が必要となるケースがあります。

私が確認した範囲では Geo レプリカによってデータのレプリケートをしている環境については明示的な有効化が必要でした。

セカンダリ レプリカのクエリストアが有効な場合、SSMS で読み取り専用のデータベースに接続した場合、クエリストアの状態が「READ_CAPTURE」となっています。

image

クエリストアが「READ_ONLY」となっている場合は、通常の読み取り専用となっており、セカンダリ レプリカのクエリの情報はキャプチャされません。

その場合は、プライマリ レプリカに接続をして、読み取り可能なセカンダリ レプリカのQuery Storeを有効にする のクエリを実行して、有効化する必要があります。

SQL Database では、一般的に次のようなレプリカの構成となるケースが多いですので、各レプリカのクエリストアが適切な状態となっているかを確認したほうが良いかと思います。

  1. プライマリ レプリカ
  2. セカンダリ レプリカ
  3. Geo レプリカ: プライマリ
  4. Geo レプリカ: セカンダリ

 

現状の問題点

セカンダリ レプリカのクエリストアですが、現状の問題点として「すべてのレプリカのクエリ情報が取得できているかが微妙」であるという点があるかと思います。

プライマリ レプリカについては、問題なくクエリ情報が取得できているのですが、セカンダリ レプリカについては、クエリ情報が取得されないケースが発生することがありました。

次の画像は、クエリストアの情報を取得したものとなります。

image

上述のレプリカの構成の 1~4 に対して、同一の参照系のクエリを実行したのですが、1~4 のすべてのレプリカのクエリストアの情報が記録されていないという状態になっています。

1~4 について類似の日付の実行タイミングの情報が記載されることを期待しているのですが、一部のレプリカについては実行した情報が記載されていないという状況となっています。

セカンダリ レプリカのクエリストアについてですが、全く記録されないということはないようですが、期待したレプリカの情報が記録されないケースが見受けられました。

セカンダリ レプリカのクエリストアですが、現時点ではプレビューの機能となっているため、すべてのレプリカの情報の取得が行われているかどうかは、使用している環境で確認をしたほうが良いかと思います。

 

セカンダリ レプリカのクエリストアヒント

セカンダリ レプリカのクエリストアについては、セカンダリ レプリカでクエリストアの情報が取得できるようになったほかにもう一つ、機能強化が行われています。

それが、セカンダリ レプリカのクエリストアヒントです。

クエリ ストア のヒントとセカンダリ レプリカ には次のように記載されています。

SQL Server 2025 (17.x) 以降のバージョンでは、セカンダリ レプリカのクエリ ストアが有効になっている場合、可用性グループのセカンダリ レプリカにクエリ ストア ヒントを適用できます。

SQL Server 2025 の機能強化として、セカンダリ レプリカでクエリストアヒントが使用できるようになっています。

上述のドキュメントでは SQL Server 2025 についてのみ記載されていますが、sys.sp_query_store_set_hints には次の記載があり、SQL Database もサポート対象となっています。

セカンダリレプリカ用のクエリストアはSQL Server 2025(17.x)以降のバージョンおよびAzure SQL Databaseからサポートされています。 完全なプラットフォームサポートについては、 二次レプリカについてはクエリストアを参照してください。

ただし、私の環境ではセカンダリ レプリカにクエリストアヒントを設定しても動作することを確認できませんでした…。

セカンダリ レプリカのクエリストアヒントは次のようなクエリで設定ができます。

sp_query_store_set_hints 
	@query_id = 7345281, 
	@query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))',
	@replica_group_id = 2;

 

「@replica_group_id = 1」を設定し、プライマリレプリカに対してヒントを指定した場合には、次の画像のように、クエリストアヒントについての情報が実行プランに出力され、ヒントが適用されていました。

image

同様のクエリをセカンダリ レプリカで実行した場合、クエリストア ヒントが適用されていることを確認することができませんでした…。

 

セカンダリ レプリカのクエリストアは、プレビュー機能となっているためか、期待した動作となっていない箇所が多く見受けられました。

SQL Server 2025 の Always On 可用性グループでもサポートされている機能となりますので、可用性グループ / 分散型可用性グループの環境を構築して、挙動を確認したほうが良いかもしれません。

Share

Written by Masayuki.Ozawa

6月 14th, 2026 at 9:52 pm

Posted in SQL Database

Tagged with

Leave a Reply