MS SQL Serverを入手してディスク容量を解放する


9

不十分に管理されたデータベーステーブルは巨大なものに成長しました。孤児のレコードの48+ギグ。私はそれをクリーンアップして、危険なほどにいっぱいになったハードドライブを通常の状態に戻そうとしています。このテーブルから約4億個のレコードを削除します。これは、私が入力しているときに実行されています。ハードドライブ領域の低下は見られませんが、システムテーブルクエリでメモリの低下が見られます。テーブルサイズを取得するために実行しています。データベースは「単純復旧モデル」を使用しています。

これに類似した多くの質問があり、データベースを縮小する必要があると回答しています。しかし、彼らは断片化されたデータなどのためにこれがどのように悪い/怖いのかを説明し続けます

  1. データベースはこのサイズであってはならないので。それを縮小するのはまだ悪いですか?
  2. これは本番データベースです。縮小すると、ダウンタイムが発生したり、データベースがロックされたりしますか?
  3. SQL Server Management Studioには、縮小、データベース、またはファイルの2つのオプションがあります。私の状況を考えると、最良の選択肢は何でしょうか?
  4. DBに必要な空き領域の割合に関するルールはありますか?

縮小のタグの説明を読んでも、私はそれをしたくありません。別の方法はありますか?

回答:


14

このテーブルから約4億個のレコードを削除します。

うまくいけば、あなたはチャンクでそれをやっています -トランザクションログの肥大化を避けるために。

ハードドライブの空き容量が減少していないことに注意してください

スペースを解放するためにデータベースファイルを明示的に縮小する必要があるため、この操作は必要ありません。レコードを削除するだけで、SQLサーバーは領域をOSに解放しません

  1. データベースはこのサイズであってはならないので。それを縮小するのはまだ悪いですか?

データベースのサイズを適切に事前設定する必要があるため、これは一般に悪い習慣です。データベースが再びこのサイズにならないことを100%確信している場合は、データベースを(シナリオで)縮小しても問題ありません

  1. これは本番データベースです。縮小すると、ダウンタイムが発生したり、データベースがロックされたりしますか?

データベースの縮小は、IOを集中的に使用します。DBCC SHRINKFILEメンテナンス期間中またはアクティビティが最小限のときに使用して縮小することをお勧めします。

  1. Management Studioでは、データベースまたはファイルの2つのオプションがあります。私の状況を考えると、最良の選択肢は何でしょうか?

縮小するにはTSQLを使用する必要があります。(あなたが尋ねたので、ファイルの縮小はデータベースの代わりに行く方法です)。チャンクでデータベースを縮小する-tsqlスクリプトを使用して、チャンクで縮小できます。

縮小すると、インデックスが断片化されることに注意してください。

  1. DBに必要な空き領域の割合に関するルールはありますか?

あなたはを参照することができますデータベースの見積りディスク領域要件の記事。修正規則はありません。データベースがどのように拡大することが予想されるかを考慮する必要があります。また、データベースの自動拡張も考慮する必要があります

参考資料:トランザクションログが増加し続ける、または領域不足になるのはなぜですか?


5

SQL ServerでDBが縮小することが多いため、心配する必要があります。SQL 2005のストレージエンジンの責任者であるPaul Randalは、ShrinkDBは非常に貧弱に書かれていると述べています。一番最後にデータを取り、それを一番最初に置いて空のスペースを見つけ、DBファイルの「終わり」に空きスペースができるまでこれを続けます。この時点で、SQL Serverからスペースを解放してOSに戻すことができます。データベースファイルを効果的に元に戻しているため、通常は大量の断片化が発生します。彼の見解については、このブログ投稿またはこのMCM内部ビデオで読むことができます。

すべての場合と同様に、実際にこれらを最初に環境でテストする必要があります。データを別のファイルグループに移動することをお勧めします。クラスタ化されたインデックスを使用してオンラインでインデックスを再構築し、新しいファイルグループでインデックスを再作成できます。その後、古いものをドロップしてスペースを解放すると、断片化はほとんどありません。これが機能している間、これは約120%余分なスペースを必要とすることに注意してください。これの問題は、あなたが持っていないように見える追加の空きスペースさえも必要とすることです。これはエンタープライズ機能です。

空き領域がそれほど多くない場合は、弾丸をかまして、DBを少しずつゆっくりと縮小して、長時間実行されるプロセスを回避する必要があります。データは大幅に断片化され、すべてのインデックスを再作成する必要があることに注意してください。すべてのインデックスを再作成した後、使用済みスペースを少し増やし、追加の空きスペースを確保することに注意してください。こちらからブレントのアドバイスをご覧ください

どれだけの空き領域が適しているかというと、断片化とファイル拡張のアクティビティにどれだけ余裕があるかが問題になります。IFIが有効になっていると、ファイルの増加はほぼ瞬時ですが、それでも断片化が発生します。大体の目安として、必要だと思うだけのスペースを事前に割り当てるか、必要に応じて、成長を監視し、チャンク単位で定期的に調整します。これにより、物理的な断片化が抑えられます。

また、ログファイルの増加はより重要です。追加のログファイルにより、VLFフラグメンテーションが発生する場合があります。これにより、復元が大幅に遅くなり、チェックポイントや切り捨てに影響を与える可能性があります。 断片化したログを使用した場合のパフォーマンスリスクをいくつか示します。行いDBCC LOGINFO();、各データベースに。Kim Trippあたりの数を50程度に保つようにしてください。ただし、数百に達する場合は、断片化の問題があり、操作をサポートするためにログファイルを拡張する必要がありました。Paul Randalごとにログファイルがどうあるべきかを確認する良い方法は、ログファイルを1週間成長させてインデックスを再作成することです。これは良い点かもしれませんが、万が一に備えてもう少し空き領域を増やすことができます。ログがDBCC LOGINFO()で断片化されていないことを確認してください。繰り返しますが、そうであれば、彼らは大きく成長しました。を使用してログファイルを縮小および再展開するこの方法


2

ストレージのニーズを評価し、ハードウェア/ホスティングサービスを適切に計画するために必要な時間内にサーバーがクラッシュしないように、十分に縮小しても問題ありません(質問4を参照)。いいえ、ロックされません。制限を参照してください。物事をシンプルに保つため、データベースを縮小します。

専門知識を契約して調査を実施し、計画を作成することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.