web-dev-qa-db-ja.com

クエリストアを修復しようとしていますが、sp_query_store_consistency_checkが存在しません

SQL Server 2016 Standard(SP2 CU6)データベースのクエリストアがERROR状態になり、オンラインに戻そうとしています。 QSのトラブルシューティングに関して私が見たすべての記事(例 this one 、さらに Microsoft自身のドキュメント )でも、次のことを行うことをお勧めします。

ALTER DATABASE [QDS] SET QUERY_STORE = OFF
exec [QDS].dbo.sp_query_store_consistency_check
ALTER DATABASE [QDS] SET QUERY_STORE = ON
ALTER DATABASE [QDS] SET QUERY_STORE (OPERATION_MODE = READ_WRITE)

しかし、手順sp_query_store_consistency_checkは、インスタンスにどのような形でも存在しないようです。何が欠けていますか?

3
Ian Kemp

他のクエリストア関連のDMV、関数などと同様に、sp_query_store_consistency_checkは、dboスキーマではなく「sys」スキーマにあります。これはトレイシーのブログのタイプミスにすぎないと思います。それでも、dboスキーマを参照しているときでもコマンドは機能するはずです。

また、クエリストアを有効にしたユーザーデータベースからプロシージャを呼び出す必要があります。これを試して:

USE YourDatabaseName;
GO

EXEC sys.sp_query_store_consistency_check;

Tony は、ストアドプロシージャの定義がどこにも見つからなかったとコメントで述べています。これは、拡張ストアドプロシージャの典型です。ランニング EXEC sp_helptext 'sys.sp_query_store_consistency_check';その上で、DAC接続からでも、これを返します。

Text
-----------------
(server internal)

sys.all_objectsただし:

SELECT 
    [name],
    [type_desc],
    is_ms_shipped
FROM sys.all_objects 
WHERE [name] LIKE '%consistency%';

結果:

name                              type_desc                 is_ms_shipped
--------------------------------- ------------------------- -------------
sp_query_store_consistency_check  EXTENDED_STORED_PROCEDURE 1

私の間違い、私はSQL Server 2016を使用していることに気づきました。上記の手順はSQL Server 2017で導入されました。

クエリストアを2016年に良好な状態に戻すために知っている唯一の方法は、すべてのデータを消去することです。

ALTER DATABASE [YourDatabaseName] 
SET QUERY_STORE CLEAR ALL;
4
Josh Darnell