質問

私は4つのSQL Serverデータベースを持っています。最大負荷要件ごとに、各データベースファイルは1から2 TBのサイズの間であり得る。 HDDは、約9TBのスペースを備えたマルチディスクDASです。データベースのアップグレード中に、単一のデータベースのトランザクションログファイルは最大4TBまで大きくなります。 (ええ、私は新しい列を数十億行テーブルに追加しました。)データベースは簡単な回復モデルにあります。

与えられたデータベースサイズに必要なディスク容量について、マイクロソフトから推奨事項(または経験則)を見つけることはできません。私はそれが大きく異なることができることを手に入れます。私の理解が正しい場合は、ログファイルの内部のスペースがさまざまなトランザクションに再利用されるため、検討する必要がある最大のトランザクションです。ログの成長は10%に設定されていると思いますが、1か2ギグの刻み目に設定されていても、まだ閉じると思います。

そのような巨大なログファイルを避けるために採用する必要がある戦略はありますか、それともアップグレード中にスペースが不足しないようにするだけのディスク容量が必要ですか?私が何か悪いことをしているならば、私はそれを適切な方法でそれをする方法を学びたいです。

SQL Server 2012を使用しています。 ありがとう!

役に立ちましたか?

解決

(yeah、私は四十億行テーブルに新しい列を追加しました)

非常に大きなテーブルに列を追加することは、影響を持つことができますが、列を追加する賢い方法

から:オンライン操作としてNULL列を追加する < / P>

SQL Server 2012 Enterprise Editionの開始、デフォルト値を持つNOT NULL列を追加することは、デフォルト値がランタイム定数である場合のオンライン操作です。つまり、テーブル内の行数に関係なく、動作がほぼ瞬時に完了することを意味します。

ランタイム定数ではないデフォルト値を持つNOT NULL列の追加常にオフラインでオフラインで実行され、操作期間中排他的(SCH-M)ロックが取得されます。

Enterprise Edition(コメントに従って2008 R2 Standard Editionで動作する

データベースは簡単な回復モデルにあります。

単純な回復モデルでは、ALTER TABLE source_table SWITCH TO new_destination_tableだけがログを切り捨てます。

典型的なアップグレード中に自動調整メトリックを録音している場合は、収集されたメトリックの平均値が良好な図形を与えます。 このスクリプト はあなたが始動するのに役立ちます(デフォルトのトレースを有効にする必要があります)そしてあなたのサーバー上で実行している)

ログの成長は10%に設定されていますが、1または2ギグの刻み目に設定されていても、まだ閉じると思います。

change パーセンテージから固定MBへの変更の設定をお勧めします。 @aaronbertrandは彼のコメントに言う:

問題は、成長しているファイルの10%も絶えず成長しているため、時間が経つにつれて時間がかかります。それは複利のようなものですが、あなたは受信していません。

完全な場合は、インスタントファイルの初期化が有効になっていることを確認してください。そのため、データファイルの自動作成はそれを利用できます。

他のヒント

VLDBクラステーブルに列を追加するシナリオでは、新しい構造体を使用して新しいテーブルを作成し、古い表から新しいテーブルへのレコードを小さな範囲内の新しいテーブルに移動する価値があるかもしれません。それは個々の取引サイズを小さく保つように、簡単な回復におけるTLOGのための高水マークは比較的低くなるでしょう。Acid要件を完全に避けることはできませんが、1つのトランザクションではなく小さいステップとしてアップグレードをバッチバッチできる場合は、ディスク容量の制約を回避できる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top