SQL Server Frozen Ghost Cleanupの回避策が必要です


15

行数が5Mから1.5Gのテーブルがいくつかあります

各テーブルにはBLOBフィールドがあり、そのサイズは100バイトから30 Mバイトまで変化し、「行外の大きな値タイプ」= ONとして保存されます。

テーブルは異なるファイルグループに格納され、3〜4個のファイルがそれぞれ異なるディスク@異なるLUN @非常に高速なSAN

これらのテーブルは毎日、サイズが5〜100 Gbで、60万〜150万行に拡大します。

2週間から6か月まで変化する一定の時間が経過すると、行の一部が削除されるかアーカイブDBに移動されるため、6か月以上前の作業テーブルには行がありません。

サーバーの現在の構成:

  • SQLサーバーエンジンは2008 R2 SP1 Enterprise @ 24コア、@ 64Gb RAM
  • SQL Serverは、追加の起動フラグを使用して実行されます。

-T 3640; (ストアドプロシージャのステートメントごとにクライアントにDONE_IN_PROCメッセージを送信する必要がありません。これは、SET NOCOUNT ONのセッション設定に似ていますが、トレースフラグとして設定されると、すべてのクライアントセッションがこのように処理されます)

-T 1118;(tempDBの割り当てを一度に1pg(最初の8ページ)から1エクステントに切り替えます。)

-T 2301;(意思決定支援クエリに固有の高度な最適化を有効にします。このオプションは、大規模なデータセットの意思決定支援処理に適用されます)

-T 1117;(すべてのデータファイルを一度に成長させます。それ以外の場合は順番に進みます。)

-E; (ファイルグループ内の各ファイルに割り当てられるエクステントの数を増やします。このオプションは、インデックスまたはデータスキャンを実行するユーザーの数が限られているデータウェアハウスアプリケーションに役立ちます)

-T 834; (SQL Serverはバッファプール用に割り当てられたメモリのためのWindowsの大きなページの割り当てを使用するようにします http://msdn2.microsoft.com/en-us/library/aa366720.aspxhttp://support.microsoft。 com / kb / 920093

  • SQL Serverはラージページ拡張機能を使用します
  • SQL Serverは高速ファイル初期化オプションを利用します
  • AUTOSHRINKはすべてのデータベースでオフです

問題がある -サーバーの稼働時間のいくつかの点から、(数日から数ヶ月まで)を開始することをGHOST CLEANUPプロセスが強制的にクリーンアップをうまくし、単にその通常の仕事をすることを拒否-数秒で複数のページクリーンアップ(which is seen thru Extended Eventsである)、適切ではない、ので、削除されたすべての行をクリーンアップすることはできません

問題はSQL Server 2005 RTM Enterpriseの時代から続く

問題を解決しようとした方法:

  • テーブルのクラスター化インデックスでSCAN操作を強制しようとしました
  • テーブルのクラスター化インデックスのBLOB列のすべての内容を含むSCAN操作を強制しようとしました
  • システムsp_clean_db_free_space&sp_clean_db_file_free_space
  • DB内のすべてのファイルおよびページのdbcc cleanpage(@ dbid、@ fileid、@ page)を手動で
  • クラスタ化インデックスの再構築と再編成
  • データベースの再作成
  • DBCC FORCEGHOSTCLEANUP

  • クエリを実行すると:

    select * 
    from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')

    数百万および数千万のゴーストレコードが表示されますが、LOB_DATAの割り当てユニットタイプのみ

唯一のものは、それが役立ちます:

  • SHUTDOWNコマンドを使用してサーバーを停止するか、ホスト全体を再起動します-再起動後、GHOST CLEANUPプロセスが数時間実行され、実際にすべてのゴーストレコードが消去されます
  • EMPTYFILEオプションを指定したDBCC SHRINKFILE-すべてのデータをあるファイルから他のファイルまたは新しく作成したファイルに移動すると、このファイルのゴーストレコードのみがクリーンアップされます-問題は、シュリンク操作が本当に嫌いということです。これには1つのファイルで3〜4日かかります

質問 - サーバーのダウンタイムが許容できない場合でもコストがかかりすぎるため、サーバーのダウンタイムなしでGHOST CLEANUPを強制するプログラム(推奨)またはメンテナンスの方法はありますか-1時間あたり数千から数万ドル

私の問題は同様に気づかれました:

そして同じことがここにあります:

回答:


12

最後に、MSはこの問題をバグとして認識しています:http : //support.microsoft.com/kb/2622823

簡単に説明すると、次のとおりです。

  • SQL Server 2008 SP3 CU4
  • SQL Server 2008 R2 CU10
  • SQL Server 2008 R2 SP1 CU4

Sql Server 2012 SP1では、1年以上のランタイムで問題が発生していません。


3

これは、あなたが問題を解決できるようにCSSに行くべき質問の一種です。おそらくソフトウェア保証とサポート契約があります。インスタンスの再起動に1時間あたり数千ドルかかる場合、数百ドルを払わなくても大した問題にはなりません。

データベースを閉じてからオンラインにすることを許可しましたか?これにより、クラッシュリカバリが実行され、ゴーストのクリーンアップが開始される場合があります。

テーブルに頻繁に書き込みますか?頻繁に私はいつも意味ですか?

MSKB 932115に関して、ゴーストレコードがすべてのファイルにのみ残されているのを見ていますか、それともファイルグループの最初のファイルをクリーンアップしていますか?

-T1117とインスタントファイル初期化を使用する理由


1.私は間違いなくMSサポートに行きます。2. DBを閉じると、前後に10〜30分間ローリングしますが、これは許容できません。3. GCは実行中ですが、削除された行外のLOBエントリを処理していません。4.時刻に応じて、毎秒20〜600回の書き込みを常に実行するテーブルへの書き込み。5. DBの最初のファイルは使用されていません-大きなテーブルがなく、システムストレージとしてのみ使用されるため、ゴーストレコードはまったくありません。
オレグたDok

-T1117を使用すると、すべての負荷を複数のファイルに分散したいだけです。代わりに、ファイルグループから残っているファイルが1つしかない場合、まだ空きスペースが存在します。増分は1ターンあたり10〜50 Gbに設定されているためです。ファイルを完全に予測不可能であるため、単純にファイルをできるだけ大きく設定することはできません。どのファイルが今日データを取得し、どのボリュームにあるかです。SAN管理者にスペースの追加を依頼する方が簡単です。スペースを追加する必要がある場所を予測するよりも簡単です。
オレグたDok
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.