クエリストアの状態については sys.database_query_store_options で情報が公開されています。
操作モードの中には「ERROR」という状態があり、ERROR を解消するためには「sp_query_store_consistency_check」を実行する必要があります。
このストアドプロシージャの動作確認を実状態と合わせて行う場合には、クエリストアの状態を ERROR にする必要があります。
イレギュラーな操作となりますが、クエリストアを意図的に ERROR にすることは可能ですので、操作方法を残しておきたいと思います。
ERROR 状態を再現する方法
クエリストアは「sys.plan_persist~」というテーブルが実体となっており「sys.query_store~」はビューとなっており実情報を間接的に参照しています。
通常「sys.plan_persist~」というテーブルは操作することができないのですが、DAC を使用すると操作することができ、これによりクエリストア内の情報にデータ矛盾を発生させ、ERROR の状態を意図的に再現させることができます。
実際の操作例としては次のようなクエリとなります。
(クエリストアですべてのクエリの情報取得が有効になった、空のデータベースでの操作を想定したものとなります)
最初にクエリストアを破損させるデータベースで次のようなクエリを実行します。
USE CrashTest GO DROP TABLE IF EXISTS T1 GO create table T1(C1 int) GO INSERT INTO T1 VALUES(100) GO 10
これでクエリストアの情報が生成された状態となりますので、次に DAC で接続をしたセッションで次のクエリを実行して、クエリストアの情報を一部削除します。通常のセッションでは操作できませんが、DAC で接続することでクエリストアの実データを操作することができます。
USE CrashTest GO delete from sys.plan_persist_query_text delete from sys.plan_persist_plan GO
次に最初に実行したセッション (通常のユーザーセッション) で次のクエリを実行すると、クエリストアが破損した状態とすることができます。
INSERT INTO T1 VALUES(100) GO EXEC sp_query_store_flush_db GO
この状態にすることで、「sp_query_store_consistency_check」による整合性の修正でどのような挙動が行われるか九人できるかと思います。
今回はデータ不整合を発生させるために一部のテーブルの全件削除を実施していますが、データの論理的な矛盾を再現できれば良いはずですので、特定のレコードの削除でも事象を再現させることはできるかと。