DELETE + REORGがディスクスペース(DB2)を解放しないのはなぜですか?


18

DB2には、大きなバイナリデータを含むテーブルがあります。今、テーブル全体をパージし、runstats、reorg、runstatsを実行しましたが、使用されたディスク容量は変わりません。ここで何が間違っているのでしょうか?

テーブルは、次のように作成した独自のテーブルスペースにあります。

CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096;
CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING;

私は次のように削除/再編成しました:

DELETE FROM MY_TBL
RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED INDEXES ALL
REORG TABLE MY_TBL
RUNSTATS ON TABLE MY_TABLE WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALTER TABLESPACE MY_TBS REDUCE

テーブルMY_TBLはその前に2.5GBを占有し、削除/再編成後は3MBしか使用しません。

FWIW:DB2 / NT v9.5.2を実行しています。


これは、db2 v8上のシステムで機能しますか?
トニー

回答:


22

あなたが自動ストレージを使用していると推測します。(そうでなければ、これが発生する可能性はありません...自動ストレージでこれを発生させるのは簡単です)

この問題は、データベースがそれ自体のスペースを再利用したが、ディスクをリリースしてオペレーティングシステムに戻さなかった可能性が高いです。これは、表領域の最高水準点をチェックすることで非常に簡単に表示できます。

以下を行います

db2 list tablespaces show detail

これにより、各テーブルスペースとディスク上で使用されているものが表示されます。Used pagesデータベースが使用しているディスクのページ数です。それをtotal pages(ディスク上で要求された合計)と比較すると、High water mark (pages)実際に必要以上に「要求」している場合に表示されます。(つまり、使用率の低いページ、非常に高い合計ページ、および合計ページに近い最高水準点)。

この未使用スペースを取り除き、オペレーティングシステムに戻すには、次のコマンドを発行します(自動ストレージの下)db2 alter tablespace <tablespace name> reduce max。例

db2 alter tablespace ts1 reduce max;

これにより、DB2は最高水準点を下げ、未使用のディスクをオペレーティングシステムに解放します。(これは、通常の大規模な表領域に対してのみ実行でき、システム一時表領域またはユーザー一時表領域に対しては実行できません)。

自動ストレージなしでDMSを使用している場合、少し異なるコマンドセットを使用する必要があります。

db2 alter tablespace <tablespace name> lower high water mark;
db2 alter tablespace reduce (<containter name> or [all containers] integer K|M|G or integer PERCENT);

db2 alter tablespace ts1 lower high water mark;
db2 alter tablespace reduce (all containers 500 M);

作業場所では、これをメンテナンススクリプトの一部に入れて、ディスク領域を確実に再利用するために再編成を行った後、これを自動的に実行します。今回のケースでは、DB2 LUW 9.7 FP 4を使用しているため、バージョン9.5のInformation Centerを再確認して、バージョンに適した情報にアクセスできることを確認してください。

編集:テーブルスペースがDB2 9.7にアップグレードされたデータベースからのものである場合、おそらく再利用可能なストレージ属性セットはありません。これは、DMSから自動ストレージにアップグレードする場合にも当てはまります。実際には最高水準点を下げることができないため、どちらの方法でも噛みつきます。テーブルとデータをダンプし、テーブルスペースをドロップする必要があります。次に、自動ストレージを使用してテーブルスペースを再作成し、テーブルのデータをインポートします。


+1-DB2の専門家がサイトに貢献しているのを見るのは良いことです。私たちは過去にその領域で弱っていました。
フィリ

1
DB2 9.5の簡単なコメントでは、alter tablespace <tbsp> lower high watermarkor alter tablespace <tbsp> reduce max構文は使用できません。これらはDB2 9.7まで導入されていませんでした。
イアンBjorhovde

最初の投稿で述べたように、私はすでにそのほとんどを試しましたが、うまくいきませんでした。解決策を見つけました:LONGLOBDATAオプションを指定しなかったため、ディスクスペースを再利用できませんでした。これは、BLOBまたはCLOBからディスクスペースを再利用する場合に必要と思われます。こちらの質問への回答をご覧ください。とにかく、あなたがあなたの答えに費やした努力に感謝します、+ 1!
アレクサンダートビアスボックスタラー

9

テーブルにMY_TBLは、BLOB列に大きなバイナリデータが含まれています。REORGコマンドのドキュメントには、DB2は時間がかかり、クラスタリングを改善しないため、そのようなオブジェクトの再編成は避けられると述べています。ただし、LONGLOBDATAオプションが指定されている場合、DB2はLOBデータの再編成を強制できます。未使用領域はDB2で再利用できるため、新しいデータを挿入すると、既存の未使用ページが最初にいっぱいになってから、新しいデータが割り当てられます。

ランニング

REORG TABLE MY_TBL LONGLOBDATA

空のテーブルが使用していた2.5GBのディスク容量を正常に再生しました。

このオプションについては知りませんでしたが、初めてドキュメントを読んだときにそれを監督しました。


いい視点ね。ただし、DB2NightShowエピソード「Attack of the Blob」で学んだことから、LONGLOBDATAオプションを実行するのに時間がかかりすぎたり、パフォーマンスの問題が発生したりすることはあまりありません(オンラインREORGを実行する場合) 。
クリスアルドリッチ

扱っているデータベースには、産業機械からのログデータが含まれています。このようなデータベースに対するクエリは時間的に重要ではないため、再編成中にパフォーマンスが低下しても問題はありません。
アレクサンダートビアスボックスタラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.