web-dev-qa-db-ja.com

スペース不足のデータベース

私のデータベースには16MBの空き容量があります。

私は教えられたように単に切り捨てていましたが、切り捨てをしないようにアドバイスするこれらのリンクを見つけました:

http://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/

http://blog.sqlauthority.com/2011/01/19/sql-server-shrinking-database-is-bad-increases-fragmentation-reduces-performance/

テーブルレコードを削除する以外に、データベースでサイズを減らすために何かできることはありますか?私はDBAフォーラムを初めて利用するので、投稿する前に他の質問を探してみるべきでしたが、データベースがダウンするのではないかと心配しています。

3
user1270384

データベースに16 MBの空き容量があり、そのドライブに十分な空き容量がある場合、それについては心配しないでください。十分なスペースがあり、データベースの自動拡張機能を無効にしていない限り、データベースは必要に応じてデータファイルを拡張します。もちろん、データファイルの自動拡張を現実的な増分に設定し、拡張に必要な時間と拡張する必要がある頻度とのバランスをとる必要があります。デフォルトの1MBまたは10%は現実的ではなく現実的ではありません かなり前に変更されているはずですインスタントファイル初期化 を有効にしている場合は、より大きなものに傾けることができますが、どのようなバランスが適切かはわかりません。

ここで自動拡張の設定を確認できます。

SELECT name, type_desc, size, growth, is_percent_growth
  FROM [database_name].sys.database_files;

理想的には、自動拡張をまったく回避するのに十分なサイズのデータ​​ベースを作成します。この操作は負荷が高く(特にファイルの即時初期化がない場合)、拡張イベントの期間中、他のすべてのアクティビティをブロックする可能性があるためです。今すぐ、またはメンテナンスウィンドウ中に手動でファイルを展開して、ピークアクティビティ中にこれが発生しないようにすることができます。だから積極的にこれを行うことができます(たとえば、自動拡張設定を100 MBに変更するため):

ALTER DATABASE [database_name] 
  MODIFY FILE (NAME = N'database_name_data', FILEGROWTH = 102400KB);

ドライブに16MBの空き容量がある場合、何らかの方法で空き容量を増やす必要があります、または、より多くのスペースがあるドライブにデータベースを移動します。おそらく完全復旧モデルを使用していて、ログバックアップを一度も行ったことがないために、ドライブが大きくなりすぎたログファイルによって占有された可能性があります。この場合、次のいずれかを行うことができます。

  1. シンプルリカバリモードに切り替え、CHECKPOINTを実行してからDBCC SHRINKFILEログを適切なサイズにします。ファイルを1 MBに縮小する誘惑に負けないでください。あなたはあなたのディスクスペースで綱引きに入りたくありません。
  2. 完全な状態を保ち、次にBACKUP LOG、 その後 DBCC SHRINKFILE(1)と同じ注意事項。

ここで、シンプルモードになっていて、通常とは異なる大きなトランザクションをサポートするためにログが膨らんでいる可能性もあります。したがって、(1)を心配することなく実行できる可能性がありますが、これらの大きなトランザクションを再度実行する場合、または(1)または(2)を定期的に実行しない場合は、一時的に問題。より大きなディスクを取得するか、完全復旧モデルを使用して、ログをより効率的に管理します。

とはいえ、これは推測にすぎません。多分あなたのドライブは実際に大きな(そして役に立たない)ページファイル、またはあなたのMP3コレクション、またはあなたの最後の休暇からのビデオによって占められています。

10
Aaron Bertrand

自動拡張で失われ、ファイルグループで失われます。あなた自身のために、これが本番データベースではないことを願っています。

そうは言っても-DB間隔の仕組みは次のとおりです。

SQL Server Management Studioでこれを実行する

sp_helpdb <yourdbname>

これにより、2セットの出力が得られます。最初のセットには、現在のDBサイズを示すdb_sizeという列があります。 2番目は、データとログファイルの独立したサイズを提供します。 maxsizeという列を確認してください。

これを実行します。

USE <yourDB>
GO

EXECUTE sp_spaceused
GO

このクエリの出力から、DBファイルで使用可能な未割り当て領域または空き領域がわかります。これがいっぱいになると、DBはさまざまな設定や状況に応じて、大きくなるか停止します。

最初にDBを作成するときに、初期サイズ、DBのサイズ、およびmaxsizeを定義します。初期サイズが3 GB、空き容量が100 GBのHDDで無制限に拡張するDBを作成した場合、初期の3 GBが消費された後、ディスクで使用可能なすべての空き領域がいっぱいになるまで、DBは拡張し続けます。ただし、初期サイズが1 GBのDBを作成し、最大値を3 GBに設定した場合、HDDに別のジリオンがある場合でも、DBは3 GBに達すると停止しますTB空き領域の。

これが本番の場合は、復旧モデルを単純に変更しないでください。ある時点まで回復する能力を失います。

何をしても-ステップ1:DBをバックアップする

6
Raj