DB2 4 min read

Db2が起動しない・接続だけ落ちる ― メモリ設定を疑うときの逆引き

INSTANCE_MEMORY を明示値に固定した直後から、Db2 が起動しなくなった。あるいは db2start は成功するのに接続だけが落ちる。メモリ関連として SQL1084C を調べた人が多いはずですが、絞りすぎたときに SQL1084C は出ません

返るのは SQL1220N / SQL1042C / SQL1643C のいずれかで、絞り具合によって変わります。ここでは症状から原因を引く形でまとめます。実機ログつきの詳解は末尾のZenn記事にあります。

まず見る(結論)

設定値と単位を先に確認してください。INSTANCE_MEMORY の単位は4KBページです。20000 は約78MBであって20,000MBではありません。

db2 get dbm cfg | grep INSTANCE_MEMORY

AUTOMATIC なら、この記事の症状ではありません。明示値が入っていて、その値がホストの搭載メモリに対して極端に小さければ該当します。

症状 → 原因 → 対処(逆引き)

症状 原因 まず打つ手
db2startSQL1220N(共有メモリーの割り振り失敗) INSTANCE_MEMORY が起動に必要な量を下回っている AUTOMATIC に戻して db2start
db2startSQL1042C(予期しないシステム・エラー) 同じく絞りすぎ。起動処理のより後段で落ちている 同上。メッセージにメモリの記述が無いので設定値から疑う
db2start は成功、connect だけ SQL1643C インスタンス・メモリー上限への到達 INSTANCE_MEMORY上げる
アプリ側に SQL1032N しか見えない インスタンスが起動していない(上2行の二次症状) サーバー側で db2start の出力を直接確認する
SQL1084C OSカーネル側の上限(SHMMAX 等)。絞りすぎとは別物 カーネルパラメーターの見直し/db2osconf

復旧するとき、インスタンスを先に起動する必要はありません。DBM CFG の更新は停止中でも通ります

db2 update dbm cfg using INSTANCE_MEMORY AUTOMATIC
db2start

いちばん厄介な真因:SQL1643C は診断ログに残らない

「インスタンスは上がっている・接続だけ落ちる・db2diag.log には何も無い」の3点が揃ったら、上限到達を疑ってください。ログを探し続けても出てきません。SQL1220NSQL1042C は残りますが、EventSevere なので db2diag -level Error では拾えません。

それでも切り分からないとき(実機ログつきの詳解)

どのページ数でどのコードに変わるかの実測値、db2diag.log に残るレコードの読み方、DATABASE_MEMORY を絞っても効かない理由まで含めた解説は、Zennのフル記事にまとめています。

▶ Zennで続きを読む(無料)

Db2のdb2startがメモリで失敗する ― SQL1220N・SQL1042C・SQL1643Cの出し分けを実測した


実機ログつきの詳解を読む →

関連: Db2「SQL1032N」インスタンス未起動の原因を切り分けるDb2「SQL1224N」データベースエージェントが起動できない

この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。

現場で引ける Db2 の教科書

現場で引ける!Db2実践エンジニア・バイブル

Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。

アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集

Zennで読む(¥2,000)→