一括ロードや大きめのINSERTの途中で処理が止まり、次のエラーが返ることがあります。
SQL0289N Unable to allocate new pages in table space "USERSPACE1". SQLSTATE=57011
SQL0289N は割り当て先の空きが尽きた状態です。メッセージには理由コードが付いていて、これで原因の大枠が決まります。自動ストレージ+自動リサイズが既定の環境では、表スペースの設定ではなくその下のファイルシステムが満杯というケースが増えています。この記事ではまず見る値と、理由コードからの逆引きをまとめます。
まず見る(結論)
最初にやるのは「表スペースが満杯なのか、ディスクが満杯なのか」を分けることです。コンテナが載っているファイルシステムの空きを見ます。
SELECT VARCHAR(TBSP_NAME,18) AS TBSP, CONTAINER_TYPE,
FS_TOTAL_SIZE, FS_USED_SIZE
FROM TABLE(MON_GET_CONTAINER(NULL,-2)) AS T;
FS_USED_SIZE が FS_TOTAL_SIZE に張り付いていれば、原因はディスク側(理由コード10)です。空きがあるなら表スペース側の設定を見ます。自動リサイズが有効か、最大サイズはいくつかを一度に確認できます。
SELECT VARCHAR(TBSP_NAME,18) AS NAME, TBSP_TYPE,
TBSP_TOTAL_PAGES, TBSP_USED_PAGES, TBSP_FREE_PAGES,
TBSP_AUTO_RESIZE_ENABLED AS AUTORESIZE,
TBSP_MAX_SIZE AS MAX_SIZE
FROM TABLE(MON_GET_TABLESPACE(NULL,-2)) AS T
ORDER BY TBSP_USED_PAGES DESC;
AUTORESIZE=1 かつ MAX_SIZE=-1(上限なし)なら、表スペース側で止まる理由はありません。ほぼディスク側が原因です。
症状 → 原因 → 対処(逆引き)
| 理由コード / 症状 | 状態 | まず打つ手 |
|---|---|---|
| 10(いちばん多い) | 自動リサイズは上限未到達だが、ファイルシステムが満杯 | ディスクの空きを作る/ALTER STOGROUP ... ADD '/別パス' |
| 8 | 自動リサイズが最大サイズに到達 | ALTER TABLESPACE ... MAXSIZE 20 G で引き上げ |
| 2 | 自動リサイズ無効の固定DMSを使い切った | ALTER TABLESPACE ... AUTORESIZE YES 化、またはコンテナ追加 |
| 1 | SMSのコンテナがOSの最大ファイルサイズに到達 | パスを増やす/自動ストレージへ移行 |
| コンテナ追加直後に再実行して失敗 | リバランス中で新しいページがまだ使えない | リバランスの完了を待ってから再実行 |
理由コード2・8は表スペースの設定の問題、10はディスクの問題です。ここを取り違えると、コンテナを足しても直らないという状況になります。
自動リサイズは「ディスクに空きがある限り」伸びるだけです。同じディスクにアーカイブログやバックアップを吐いていると、表スペースが伸びようとした瞬間に空きが無く SQL0289N になります。恒久対策はデータ用とアーカイブ/バックアップ用のファイルシステムを分けることです。
監視のアラートも、自動リサイズ環境では表スペース使用率ではなくファイルシステム使用率に張るほうが実態に合います。
もう1点、実機で確認した注意です。SYSCAT.TABLESPACES に MAXSIZE 列はありません(SQL0206N になります)。自動リサイズの最大サイズを見るときは MON_GET_TABLESPACE の TBSP_MAX_SIZE を使います。
それでも切り分からないとき(実機ログつきの詳解)
理由コード別の抜け方、ADMIN_GET_STORAGE_PATHS でのストレージパス確認、溢れる前に気づくための監視クエリまで含めた詳しい解説は、Zennのフル記事にまとめています。
関連: SQL0964C トランザクションログがいっぱいです / Db2 リカバリー履歴ファイルとアーカイブログ削除
容量で止まらないための表スペース・ストレージグループの設計と、監視をどこに張るかを、本書 第2章「インスタンス・DB構成パラメーターの選定基準」で「なぜその値にするのか」から解説しています。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。