SQL Serverがテーブルを変更してTEXTをNVARCHAR(MAX)に変更すると、データベースサイズが大幅に増加します。


8

かなりの数のTEXT列をに変更するには、サイズが約18GBのSQL Serverデータベースを更新する必要がありますNVARCHAR(MAX)

私が抱えている問題は、すべてのalter tableコマンドを実行した後、データベースのサイズがほぼ26GBになることです。ここから使用NVARCHAR(MAX)するとDBの成長が遅くなることを理解していますが、この肥大化を防ぐ方法はありますか?


2
ここで、同じ質問を作成しないでください。SOにフラグを付けるだけで、modはすぐにここに移行します:-)。今、誰かがマージ/クリーンアップする必要があります。
マリアン

2
データベースは大きいですか、ログは非常に大きいですか?
アーロンバートランド

マリアン、申し訳ありません、今すぐ理解してください
Aidan Lawless

アーロン、MDFファイルの方がはるかに大きい....ほぼ10 GB大きい
Aidan Lawless 2013年

回答:


7

この投稿がお役に立てば幸いです。

http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx

重要な事実:

  • デフォルトでは、TEXTおよびNTEXTはテキスト値をLOB構造に格納します。
  • デフォルトでは、NVARCHAR(MAX)はテキスト値をテーブル構造に格納します(8000バイトを超える場合を除く)。
  • 列をTEXT / NTEXTからNVARCHAR(MAX)に変更しても、データの格納方法は変更されず、テーブルのメタデータのみが更新されます。データ構造は、次に値が変更されたときにのみ変更されます。これは、次のようなものを実行することですぐに実行できます。

      update mytable set mycolumn1 = mycolumn1
  • NVARCHAR(MAX)のデフォルトのテーブルオプション設定を使用すると、テーブルのデータが大きくなります。

    -必要に応じて設定を変更する前に、テーブルオプションの設定と環境を確認する必要があります。

  • update tableステートメントを使用してalter tableステートメントを実行すると、最終的にテーブルサイズが縮小します。

つまり、更新ステートメントを実行してデータ構造のストレージを強制的に変更すると、データベースサイズは予想どおり小さくなります。

編集:NTEXTではなくTEXTについて述べたように、スペースの増加は思っているよりも明白ではありません。NTEXTはTEXTの2倍のスペースを使用しますが、同時に、NVARCHAR(MAX)がNTEXTの約半分のスペースを占めることを期待する必要があります。私の計算では、元のデータベースのサイズからほとんど変化がありません。


http://www.douglubey.com/への特別なクレジット


2
リンクが機能しなくなる可能性がある場合に備えて、ここで重要な事実を要約してください。
ステファンRolland 2013年

他の回答で述べたように、TEXTとNTEXTはストレージに影響を与えますが、提案したほどではありません。
RoKa

おかげで...もう何年も参加を延期しています...ここにいてよかったです。
RoKa

RoKAに感謝します。これにより、問題のいくつかのテーブルに大きな違いが生じました。データベースを再度復元し、それを段階的に実行して、影響を確認します。改めて感謝します...
Aidan Lawless 2013年

光栄です。
RoKa

6

あなたの質問の見落としかもしれませんが、あなたはNTEXTからNVARCHAR(max)ではなくTEXTからNVARCHAR(max)と言っています。これが実際に行っていることであれば、ANSIからUNICODEに変更しているため、スペースが増えることに驚かないでください(シングルバイト文字とマルチバイト文字の比較)。


はい、それは私がやっていることです...いくつかの簡単な計算に基づいて、それは増加のサイズを説明しません。
Aidan Lawless 2013年

2
RoKaの提案を試しましたか?
spaghettidba

1
@AidanLawlessこれらはどのような計算ですか?データベースのサイズは、少なくとも既存のTEXTフィールドのサイズだけ増加する必要があります。Unicodeに移行するには、ANSIのストレージスペースのちょうど2倍のスペースが必要です。
JNK 2013年

2
@JNK ... 2008 R2以降で圧縮を使用しない限り、Unicode圧縮は、VARCHARのようにNVARCHARに格納されたASCII文字を扱います。
アーロンベルトラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.