トップ回答者
SQL Server 2008 データベースの断片化解消

質問
-
お世話になります。
SQL Server にて、データの追加・更新・削除を繰り返すとデータベースの断片化が発生すると思いますが、
これを解消し、データベースの使用可能な空き領域を増やす事を考えていますが、どうすればいいのでしょうか?
以前、SQL Server 2000を使用していた時は、一旦別のデータベースにデータベースオブジェクトのコピーをして、
それをオリジナルに戻すというような事をしていました。
ところが、SQL Server 2008 にバージョンアップし同様の操作をするとコピーの途中で互換性の問題でエラーとなってしまいました。
(2000 で作成したデータベースのバックアップを2008にて復元しました。互換性レベルはSQL Server 2000)
どうもVIEWの作成時にエラーとなっているみたいなのです。
そこで、
1、別の方法でデータベースの断片化を解消する方法
2、上記エラーを解消する方法
どちらかご存知でしたらご教示ください。
SQL Server 2008のエディションはStandardです。
宜しくお願い致します。
- 移動 山本春海 2011年8月12日 1:20 適切なカテゴリに移動しました。 (移動元:MSDN / TechNet フォーラムへのご意見ご要望)
回答
-
エラーの詳細がわからないので、1について、です。
インデックスの断片化であれば再構築や再編成にて解消可能です。
alter indexコマンド実行やSSMSからの操作を行います。
http://msdn.microsoft.com/ja-jp/library/ms189858(v=SQL.100).aspx
ヒープ表をきれいに整理したいのであればデータを再ロードするしかないのではないかと思います。 -
heap table が大量にあって、可変長データを頻繁に update してしまったことでデータページに隙間が大量にあるような状況ということでしょうか。
すでに書かれているように、クラスタ化インデックスを付与して削除するのが最も手軽だと思いますが、なにがどう現実的ではないのでしょうか? (使用するクラスタ化インデックスは何でもよいですが、指定した順で当初は並べられます) 他の方法として、、
- 対象となるテーブルをリネームする Table1 → tmp_Table
- 対象となるテーブルを再作成する CREATE TABLE Table1
- データを移す INSERT NITO Table1 SELECT * FROM tmp_Table
- 不要となった旧テーブルを破棄する DROP TABLE Table1
という操作を繰り返すことでも、データ ページの空きを詰めることができます。この方法だと最大サイズテーブル分のデータ領域が必要になりますがインデックスの対象列を1テーブルづつ考えなくてもよいので sys.tables でも使って一括処理できると思います。
根本的な問題は、既に書かれていますが、どんなエラーが出ているのか、はっきりさせたほうがいいのでは?
すべての返信
-
エラーの詳細がわからないので、1について、です。
インデックスの断片化であれば再構築や再編成にて解消可能です。
alter indexコマンド実行やSSMSからの操作を行います。
http://msdn.microsoft.com/ja-jp/library/ms189858(v=SQL.100).aspx
ヒープ表をきれいに整理したいのであればデータを再ロードするしかないのではないかと思います。 -
heap table が大量にあって、可変長データを頻繁に update してしまったことでデータページに隙間が大量にあるような状況ということでしょうか。
すでに書かれているように、クラスタ化インデックスを付与して削除するのが最も手軽だと思いますが、なにがどう現実的ではないのでしょうか? (使用するクラスタ化インデックスは何でもよいですが、指定した順で当初は並べられます) 他の方法として、、
- 対象となるテーブルをリネームする Table1 → tmp_Table
- 対象となるテーブルを再作成する CREATE TABLE Table1
- データを移す INSERT NITO Table1 SELECT * FROM tmp_Table
- 不要となった旧テーブルを破棄する DROP TABLE Table1
という操作を繰り返すことでも、データ ページの空きを詰めることができます。この方法だと最大サイズテーブル分のデータ領域が必要になりますがインデックスの対象列を1テーブルづつ考えなくてもよいので sys.tables でも使って一括処理できると思います。
根本的な問題は、既に書かれていますが、どんなエラーが出ているのか、はっきりさせたほうがいいのでは?
-
こんにちは、swnoyk さん。
MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
皆さんから参考になるアドバイスをいただいているようでしたので、他の方にもこの情報を有効活用していただくよう、勝手ながら私のほうで一旦回答としてマークさせていただきました。
アドバイスくださった皆さん、ありがとうございます。
いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
今後、同じ問題でこのスレッドを参照される方にも、有効な情報がわかりやすくなるかと思いますのでご協力よろしくお願いいたしますね。
他の方からもアドバイスがあったかと思いますが、エラーの詳細および swnoyk さんが対処としては現実的ではないとされていることを具体的な説明などとともに投稿されると、他にも有効な情報が得られるかもしれません。
今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海