web-dev-qa-db-ja.com

データベースの破損:QueryStore内部テーブル

今朝、次の電子メールアラートが受信されました:

日付/時刻:2018年2月28日9:26:42 AM

説明:データベース9の論理ページ(1:3948712)をフェッチしようとして失敗しました。これは、72059184917512192ではなく、アロケーションユニット72057594045857792に属しています。

コメント:(なし)

ジョブ実行:SQL Sentry 2.0アラートトラップ

セカンダリレプリカのイベントログを見ると、同じメッセージが3回発生しています。

ソースspid138

メッセージデータベース9の論理ページ(1:3948712)をフェッチしようとして失敗しました。これは、72059184917512192ではなく、アロケーションユニット72057594045857792に属しています。

セカンダリレプリカ(2ノードの同期可用性グループ)で以下を実行します。

DBCC TRACEON(3604)
dbcc page (9, 1,3948712,3)
go
DBCC TRACEOff(3604)

いずれかのレプリカの結果の抜粋:

Page @0x00000070DAB8C000

m_pageId = (1:3948712)              m_headerVersion = 1               
m_type = 3 m_typeFlagBits = 0x0                m_level = 0            
m_flagBits = 0x8200 m_objId (AllocUnitId.idObj) = 129   m_indexId
(AllocUnitId.idInd) = 256  Metadata: AllocUnitId = 72057594046382080  
Metadata: PartitionId = 72057594040811520                             
Metadata: IndexId = 1 Metadata: ObjectId = 197575742      
m_prevPage = 0:0)                  m_nextPage = (0:0) pminlen = 0                 
m_slotCnt = 2                       m_freeCnt = 1634 m_freeData = 6568
m_reservedCnt = 0                   m_lsn = (46041:1506360:18)
m_xactReserved = 0                  m_xdesId = (0:0)                  
m_ghostRecCnt = 0 m_tornBits = -99702035              DB Frag ID = 1

プライマリレプリカで以下を実行します。

select OBJECT_NAME (197575742)
plan_persist_plan

ご質問

  1. クエリストアの一部であるplan_persist_planテーブルのクラスター化インデックスが破損していると私は言っていますか?
  2. 以下を実行するための最良/唯一の修正です:

    ALTER DATABASE MyDatabase SET QUERY_STORE CLEAR; 
    
  3. #2が最善の修正である場合、削除されるクエリストアのデータを保持するための良い方法はありますか?

  4. この種の破損は、IOサブシステムの問題を示していますか?

他の情報

  • QueryStoreを有効にしています。350MBの容量があり、現在読み取り/書き込みモード、15分ごとにフラッシュ間隔、統計収集は1時間ごと、キャプチャモードはすべて、自動サイズベースのクリーンアップ、5日の古いクエリしきい値です。
  • DB id 9はビジネスクリティカルなユーザーデータベースです
  • エラーの詳細は、エラー:605、重大度:21、状態:3です。

ガイダンス に従ってWindowsシステムイベントログを確認しました。これにより、「情報」イベントのみが生成され、エラーは発生しません。

DBCC CHECKTABLE ('sys.plan_persist_plan');  

結果:

DBCC results for 'sys.plan_persist_plan'.
There are 12562 rows in 240 pages for object "sys.plan_persist_plan". 
DBCC execution completed. 
If DBCC printed error messages, contact your system administrator.

インデックスを再構築するための正しいコマンドを確立できません。以下は機能しません。

ALTER INDEX PK_plan_persist_plan_cidx ON sys.plan_persist_plan REBUILD;
5
Peter

上記のコメントで述べたように、クエリストアの内部テーブルで同様の破損の問題がありました。

あなた自身が私がALTER DATABASE MyDatabase SET QUERY_STORE CLEAR;問題の修正を試みましたが、問題なく動作しました。 MicrosoftはSQL Server 2017で、データをクリアする前に試行できる修復手順を追加しました:sp_query_store_consistency_checkソース

データを保持したい場合、おそらく唯一の方法はテーブルをコピーすることです-そのためのスクリプトを作成した人を見つけることができません。

通常、破損するとディスクも心配になりますが、この場合、クエリストア自体に問題があるのではないかと少し疑っています。

3

質問3に答えるには

#2が最善の修正である場合、削除されるクエリストアのデータを保持するための良い方法はありますか?

クエリストアデータをエクスポートするにはどうすればよいですか? 」を参照してください。ほとんどの場合、QSデータをエクスポートすることは難しくありません。エラーがエクスポートに影響するかどうかはわかりません。

エクスポート時に一部のデータが欠落する場合があります。 クエリストアの詳細が欠落している理由をご覧ください

2
James Jenkins

データベースの互換性レベルを110から130に変更するエラーを修正しました(SQL Server 2016)。

インスタンスのビルドバージョンは13.0.5062.0ですが、データベースは古いバージョンから移行され、互換性レベルは変更されていません。

0
Nicolas Hevia