不要になった表を削除したのに、df の空きが増えない。ALTER TABLESPACE ... REDUCE MAX を打っても、成功メッセージが返るだけで容量が戻らない。Db2の表スペースではよくある詰まり方です。
db2 "alter tablespace TS1 reduce max"
DB20000I The SQL command completed successfully.
このメッセージは「ハイウォーターマークより上を削った」以上の意味を持ちません。1ページも返っていなくても同じ表示になります。この記事ではまず見る値と、症状からの逆引きを最短でまとめます。実測ログつきの詳細は末尾のZenn記事にあります。
まず見る(結論)
判断材料は3つの値の関係だけです。ハイウォーターマーク(HWM)が割り当ての下限で、REDUCE はここより下を削れません。
# TOTAL - HWM … REDUCE MAX で今すぐ返る分
# HWM - USED … HWMの下に閉じ込められた分(表を動かさないと返らない)
db2 "select substr(TBSP_NAME,1,20) as TBSP_NAME, TBSP_TOTAL_PAGES, TBSP_USED_PAGES, TBSP_PAGE_TOP \
from table(MON_GET_TABLESPACE('',-2)) where TBSP_TYPE = 'DMS'"
TBSP_PAGE_TOP がHWMです。TBSP_USED_PAGES と大きく離れていれば、REDUCE を何回打っても減りません。
症状 → 原因 → 対処(逆引き)
| 症状 | よくある原因 | まず打つ手 |
|---|---|---|
全行 DELETE したのに1ページも減らない |
行を消しても表が確保したエクステントは表スペースに返らない | DROP TABLE、または REORG TABLE ... USE |
REDUCE MAX が DB20000I なのに減らない |
HWMより下は削れない。末尾に別のオブジェクトが残っている | TBSP_PAGE_TOP の前後差で判定する |
REORG したら表スペースが増えた |
USE 句が無く、同じ表スペースにコピーが作られた |
REORG TABLE ... USE <一時表スペース> |
SQL0104N が返る |
REDUCE (ALL 10 PERCENT) は非自動ストレージDMS向けの構文 |
REDUCE MAX / REDUCE 10 PERCENT |
SQL1763N 理由コード 10 |
対象がSMS表スペース。REDUCE は用意されていない |
ファイル削除でOSに返るので操作不要 |
ADMINTABINFO の RECLAIMABLE_SPACE が 0 |
この列は全行削除しても動かない | 表スペース側の TBSP_PAGE_TOP で判断する |
効いたかどうかは DB20000I ではなく、TBSP_PAGE_TOP の実行前後の差で判定します。空振りでも成功が返るためです。
オフラインREORGは表を作り直すためのコピーを作ります。USE 句を付けないとその置き場は同じ表スペースになるため、空きを取り戻すつもりの操作でHWMが後ろへ伸びます。実測では USE 無しでHWMが上がり、USE TEMPSPACE1 を付けると同じ表・同じデータ量で大きく下がりました。指定する一時表スペースは、対象の表と同じページサイズのものを選びます。
それでも切り分からないとき(実機ログつきの詳解)
220MBの表を使って、DELETE → REDUCE MAX → REORG → DROP TABLE の各段でページ数がどう動くかを実測した結果、コンテナファイルが実際に縮むところまで、Zennのフル記事にまとめています。
関連: Db2「SQL0289N 表スペースに新しいページを割り当てられません」の原因を切り分ける / Db2 REORGコマンド解説
この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。