none
MSSQL2000 での未使用領域の開放 RRS feed

  • 質問

  • SAP R/3をMSSQL 2000にて使用しています。
    未使用領域が大きすぎ、ディスク容量を圧迫しています。

    現在のディスク割当量(使用量)115GBのうち
    ・DATA size:45GB
    ・Index size:10GB
    ・未使用領域:60GB
    という状況です。

    未使用領域がこんなにも肥大してしまっている状況は正常なのでしょうか?
    また、未使用領域の効率のよい開放の手段をお教え願えないでしょうか?

    よろしくお願いします。

    • 編集済み spa tree 2009年8月14日 8:09
    2009年8月14日 7:33

回答

  • 未使用領域と言われているのは、sp_spaceused の unused 列の値のことを指しておりますでしょうか。

    unused であれば、エクステント内の使用されていない未使用ページの合計サイズとなりますので、開放するためには、インデックスの再構築(DBCC DBREINDEX) を実施する必要がございます。

    尚、unused の値が増えるのは異常かと言えば、アプリケーションの作りによっては、増加する場合もありえます。
    ですので、データベースにつきましては、日々メンテナンスを実施されることをお勧めいたします。
    • 回答としてマーク spa tree 2009年8月27日 2:23
    2009年8月14日 8:21
  • 私の認識では、DBCC Shrinkfile(database) にて開放できる領域は、unallocated space のみであり、unallocated space が 例えば 300MB 程度しかない場合は、300MB しか圧縮することが出来ないと思っています。

    具体的に言いますと、DBCC DBREINDEX を実施することにより、データページの並び替えが行われるため、unused 領域(エクステント内の使用されていない未使用ページ)が減少し、未使用のエクステント領域が増加することが期待できます。
    また、未使用のエクステント領域が増加することにより、unallocated space 領域が増加します。
    つまり、unused が 60GB で、 unallocated space 300MB の場合、DBCC Shrinkfile(database) にて開放できる領域は、300MBであり、60GB 分の領域は開放されないと思います。

    • 回答としてマーク spa tree 2009年8月27日 2:11
    2009年8月18日 3:41

すべての返信

  • こんにちは、nagino です。

    SQL Server 2000 自体の機能としては、DBCC SHRINKDATABASE や DBCC SHRINKFILE などで未使用領域を解放できます。
    http://technet.microsoft.com/ja-jp/library/aa258287(SQL.80).aspx
    http://technet.microsoft.com/ja-jp/library/aa258824(SQL.80).aspx

    ただし、SAP は SAP 独自の制限や仕様がありますので、単純に上記コマンドで未使用領域を解放しても問題ないかどうかは何とも言えません。
    DB 管理は確か BASIS の担当領域だったと思いますので、担当されている BASIS にご相談されることをお勧めします。

    MCITP(Database Developer/Database Administrator)
    2009年8月14日 7:49
  • 未使用領域と言われているのは、sp_spaceused の unused 列の値のことを指しておりますでしょうか。

    unused であれば、エクステント内の使用されていない未使用ページの合計サイズとなりますので、開放するためには、インデックスの再構築(DBCC DBREINDEX) を実施する必要がございます。

    尚、unused の値が増えるのは異常かと言えば、アプリケーションの作りによっては、増加する場合もありえます。
    ですので、データベースにつきましては、日々メンテナンスを実施されることをお勧めいたします。
    • 回答としてマーク spa tree 2009年8月27日 2:23
    2009年8月14日 8:21
  • ちなみに、 unallocated space の値が 60GB の場合は、nagino-san が言われている DBCC ShrinkDabase コマンドにて開放が可能となります。

    2009年8月14日 8:25
  • nagino さん

    ご回答ありがとうございます。
    SAPにも問い合わせていたのですが、naginoさんが仰るDBCC Shrinkfileを勧められました。

    私の理解不足で申し訳ないのですが、
    「DBCC shrinkfile」は実行後にDBファイルの再拡張が必要に
    なるのではないでしょうか?
    「DBCC shrinkdababase」ならば再拡張は必要にならないでしょうか?

    データベースの初心者なので、このような質問になってしまいます。
    回答に再質問という形ですが、お力を貸していただけると非常に助かります。

    spa tree
    2009年8月18日 2:53
  • NOBTAさん

    ご回答ありがとうございます。

    仰られるとおり、unusedスペースのことです。
    以前、インデックスデフラグを行った際にディスク使用量が20%ほど減少しました。
    不具合を疑ってしまいましたが、正常だという認識させていただきます。
    ありがとうございます。

    >ちなみに、 unallocated space の値が 60GB の場合は、nagino-san が言われている DBCC ShrinkDabase コマンドにて開放が可能となります。

    とありますが、DBCC SHrinkdatabase にはなにか容量制限のようなものがあるのでしょうか?

    spa tree
    2009年8月18日 3:02
  • 私の認識では、DBCC Shrinkfile(database) にて開放できる領域は、unallocated space のみであり、unallocated space が 例えば 300MB 程度しかない場合は、300MB しか圧縮することが出来ないと思っています。

    具体的に言いますと、DBCC DBREINDEX を実施することにより、データページの並び替えが行われるため、unused 領域(エクステント内の使用されていない未使用ページ)が減少し、未使用のエクステント領域が増加することが期待できます。
    また、未使用のエクステント領域が増加することにより、unallocated space 領域が増加します。
    つまり、unused が 60GB で、 unallocated space 300MB の場合、DBCC Shrinkfile(database) にて開放できる領域は、300MBであり、60GB 分の領域は開放されないと思います。

    • 回答としてマーク spa tree 2009年8月27日 2:11
    2009年8月18日 3:41
  • NOBTAさん

    自分でもいろいろと調べていたので、御礼が遅くなってしまい申し訳ありません。
    非常に参考になるご意見ありがとうございました。

    なぜインデックスデフラグでunusedの値が開放されるのか、もう少し調べさせていただきたいと思います。
    ありがとうございました。

    spa tree
    2009年8月27日 2:44