3

私は約30のテーブルを含むデータベースを構築しています:

  • テーブル内の列の最大数は約15です。
  • データ型の場合、私は主にテキストにVarChar(50)を使用しています
  • 数値の場合はIntogSmallInt。
  • ID列はUniqueidentifiersです

私はデータを少し埋めて、もう一度削除することをテストしてきました。すべてのデータを削除していないので、evereyテーブルは空です。しかし、Management Studioのデータベースのプロパティの内部を見ると、サイズは221,38MBと表示されます。

どうしてですか?助けてください、私は私の制限を超えているという私のホスティング会社からの通知を受け取っています。

よろしくお願いします、 :-)

4

2 に答える 2

7

まず、データベースのリカバリモードを確認することをお勧めします。デフォルトでは、リカバリモードはFULLです。これにより、実行するすべてのトランザクションがログファイルに入力され、バックアップを実行するまでトランザクションが削除されることはありません。

リカバリモードを変更するには、データベースを右クリックして[プロパティ]を選択します。プロパティリストで、(右側のペインにある)[オプション]を選択します。次に、「リカバリモデル」をシンプルに変更します。

おそらく、ファイルを縮小することもできます。これを行うには、データベースを右クリックして、[タスク]->[縮小]->[ファイル]を選択します。中央の[ファイルタイプ]オプションを変更すると、データファイルとログファイルの両方を縮小できます。

マーティンのコメントは非常に興味深いものです。ログファイルが自動切り捨てモードの場合でも、削除がログに記録されるという問題があります。大きなテーブルを作成した場合でも、ログファイルは拡張され、ファイルを切り捨てるまでスペースは回復されません。TRUNCATEあなたはより多くのratheを使用することによってこれを回避することができますDELETE

truncate table <table>

削除されるすべてのレコードをログに記録するわけではありません(http://msdn.microsoft.com/en-us/library/ms177570.aspx)。

delete * from table

すべてのレコードをログに記録します。

于 2012-09-21T13:31:11.030 に答える
4

挿入、更新、削除、および設計変更を行うと、トランザクションごとにログファイルが変更され、他のデータが大量に作成されます。このトランザクションログはSQLServerデータベースの必須コンポーネントであるため、使用可能な設定で無効にすることはできません。

以下は、SQLServerによって生成されたトランザクションログを縮小するためのバックアップの実行に関するMicrosoftの記事です。

http://msdn.microsoft.com/en-us/library/ms178037(v=sql.105).aspx

また、列にインデックスを付けていますか?行数が多いテーブルの複数の列で構成されるインデックスは、特にテストを実行している場合は、不必要に大きくなる可能性があります。テーブルごとに1つの列のみに単一のクラスター化インデックスを設定してみてください。

テーブル統計についても学びたいと思うかもしれません。これらは、インデックスを作成するのに役立ち、SELECTDISTINCTやSELECTCOUNT(*)などのクエリを実行するのにも役立ちます。

http://msdn.microsoft.com/en-us/library/ms190397.aspx

最後に、SQLServerデータベースのストレージ割り当てをアップグレードする必要があります。使用すればするほど、成長が速くなります。

于 2012-09-21T13:09:13.960 に答える