1

私は約6Gbのデータベースに取り組んでいます。すべての非ユニコード列をユニコードに変換する必要があります。たとえば、すべてのvarcharをnvarcharに変更します。

のようなALTERステートメントを使用してこれをスクリプト化しALTER TABLE mytable ALTER COLUMN mycolumn nvarchar(...)ましたが、その後データベースのサイズが大幅に増加したことがわかりました。.mdfファイルは70Gbを超えて成長し、私は驚きました。unicodeはvarcharのx2倍のスペースを必要とすることを知っていますが、データベースがすべてvarcharであり、変換されたとしても、最大サイズは12Gbであると予想します。

データベースとファイルを縮小して、未割り当て領域であるかどうかを確認しようとしましたが、これはほとんど効果sp_spaceusedがなく、未割り当て領域が過剰にないことを示しています。

データベースがこれほど大きくなった理由を誰かが知っていますか?私はこれを引き起こした原因を理解することに非常に熱心です。

古いデータベースからスクリプト化された新しいデータベースを作成し、すべてのデータをインポートすることで、列のデータ型をユニコードに変更できました。その結果、サイズが1Gbしか増加しなかったため、列のデータ型を変更した理由を理解したいと思います。そのような成長。

4

2 に答える 2

5

ログファイルのサイズが大きくなったかどうかを確認しましたか? これが問題である場合は、データベースのバックアップを作成して切り捨ててください。これが最も可能性の高い問題です。

于 2012-03-30T09:43:23.167 に答える
1

まあ、そのような増加は確かに大きなオーバーヘッドを生み出します。SQL は、列を増やすために内部的に列のコピーを行っている可能性があります。でも70GBはさすがにデカすぎる

また、70 GB の割り当て済みまたは実際のデータ サイズについて話しているのでしょうか。違いがあるからです。データベース ファイルの自動拡張プロパティを確認します。数 GB または非常に大きなパーセンテージに設定されている場合は、それが説明されます。

于 2012-03-30T09:54:46.627 に答える