【小説 データベース道は一日にしてならずだよ!】 痛い目見ろ!編 その4
安田桜子は会社では、白いブラウスにチャコールグレーのベストとタイトスカートという制服姿で仕事をしている。
今は客先ということもあるのだろうけど、パリッとした黒いスーツに黒いハイヒールといういでたちである。
表情はいつもの優しく相手を包み込むような笑顔ではなく、眉間にしわを寄せ目がつり上がった鬼のようであった。
一言で言うと、人が変わったかのようである。
あまりの変貌を遂げた桜子を見て、我を忘れた雄一は反射的に訊いてしまった。
「お疲れ様です......。年休申請はもう出したはずですよね?」
その質問自体、すぐに場違いと気付いたが。
「障害が解決するまで、年休はない!」
「はいっ!」
一喝された雄一は、我に返った。
(そもそも何でこの人はここに居るんだ? そして、いつの間にサーバ室に入って来たんだ?)
(さっき初期化パラメータがどうとか言ってたけど、もしかしてORACLEのことを知ってるのか?)
その時、サーバ室の扉が開き、隣のコールセンター室から福島が入って来た。
「すまんな、安田さん。特別手当はずむからね。よろしく頼むよ!」
「もう、睡眠不足はお肌の大敵なんだから! 夜中に気軽に呼ばないでよ!」
口調まで変わっている。
しかも上司に対してため口になっている。
まるで何かのスイッチが押されて別の人格に切り替わったかのようだ。
酒が入ると人が変わる人間がいる。データベース障害が関わると人が変わる人間がいたっておかしくないじゃないか......雄一はそう納得しようとしたが、そんな無理やりなこじつけでは一割も腑に落ちなかった。
しかし、桜子からは闘争心のようなものが感じられる。
障害を前にしたとき、張り切って何とかしようとする人がいるが、それに近い雰囲気だ。
「有馬君! 状況は福島さんから電話で聞いた。こんな楽勝な障害も解決できないなんて、可哀想な人ね」
桜子は雄一とその他数人が苦労している障害を、楽勝と言ってのけた。
周囲から漂う「こいつは相当な手練れだ......」感。
「福島さん、お客さんを呼んできてください!」
「おーい、小倉さん、ちょと来て!」
桜子に指示された福島がコールセンター室への扉を開けて、小倉を呼び出す。
小倉はやってくるなり、桜子の頭のつむじからつま先までを舐めるように見て「かわいいな」とぼそっと言った。
その視線と言葉に、桜子は眉をひそめた。
「福島さん、助っ人として女の子を呼んだのか?」
「小倉さん、初めまして。ステイヤーシステムの安田と言います。データベース障害の対応に来ました。この度は誠に申し訳ありません」
「うむ......」
小倉はしかめ面をして腕を組んだ。こんな小娘に舐められてたまるかという態度を取っているようだ。
「タイムリミットまであと二十分ほどありますが、弊社の福島から状況を訊いたところ復旧に二十分もかかりません。十分で対応して見せます」
桜子は、淡々と作業の見通しを伝えた。その言葉からは自信がみなぎっていた。
「なに! そんなに早く片付けてくれるのか! 頼りになるな!」
桜子の自信を持った言葉と態度を確認した小倉は、少し機嫌を取り戻したようだ。
----------------------------------------------------------------------------
桜子は、雄一たちに向き直るとこう言った。
「有馬君、中山君、十分で終わらせるために君たちの協力が必要です。私はアドバイスはしますが、あくまで自分で考えて行動してください!」
「はい」
桜子の迫力に気圧された有馬と中山は頷く他なかった。
「私は何かすることがあるか?」
福島がおずおずと訊ねる。
「お客さんとの連絡係になってください」
コールセンター室にいる小倉に何かあったら伝える役を与えられた福島は、やることが出来て少し安心したようだった。
「有馬、まず、初期化パラメータの一覧を出して!」
君を付けるのさえも時間の無駄だと思うようになったのか、雄一は桜子から呼び捨てで呼ばれるようになった。
雄一がコンソールに向かった。
sqlplusでデータベースに接続し「show parameter」と入力しリターンキーを押す。
ずらずらと設定されているパラメータ名と値が表示される。
「メモリ関連のパラメータ値を教えて」
桜子はアプリケーションサーバのコンソールの前に立ち、中山とサーバの設定を確認しながら雄一に指示した。
「あの......メモリ関連のパラメータって......何ですか?」
「はあ!? おめえ、今まで何やってたんだよ! ずーっと机に座ってエアドラムしかしてなかったのかよ! そんなんだからこんな障害も解決出来ねえんだよ!」
桜子に罵詈雑言を浴びせられた雄一は、恐れおののき急いでスマホを取り出すと「ORACLE メモリ 初期化パラメータ」と入力してgoogle先生に問い合わせた。
雄一は調査した結果をテキストエディタにまとめて桜子に見せた。
・以下、データベースのメモリ関連の初期化パラメータ
memory_max_size = 0
memory_target = 0
pga_aggregate_target= 2G
sga_max_size= 3128M
sga_target= 0
db_cache_size= 2G(バッファキャッシュ)
shared_pool_size= 1G(共有プール)
java_pool_size= 64M
large_pool_size= 64M
「memory_target、sga_targetが0ってことは、自動メモリ管理は使ってないってことね。かなり玄人な作りだわ」
桜子は感心したように言った。
「どういうことですか?」
雄一は訳が分からない。設定の仕方に玄人とか素人とかそういう違いがあるとしたら、それが何なのかを知りたいと思った。
「恐らく各メモリパラメータは机上でしっかり計算して出した値なのよ。だから自動メモリ管理で自動調整する必要が無いって判断したのね。だけど実際に長期間運用するとデータベースの使われ方もデータ量も変わるからね......」
「当初の計算を上回るメモリが必要になったから、今回のような共有プール不足が発生したってことですか?」
「そう。自動メモリ管理が有効だと、共有プールが足りなかったら自動的に拡張されてたから。例えば、今1GByte設定されてるけどそれ以上必要になったらsga_targetもしくはmemory_targetに設定されている値まで拡張される。保険としてsga_target、memory_targetを設定しとくべきだったわね」
桜子は裏紙に図を描いて雄一に説明した。
「なるほど......」
雄一にとってはマニュアルを読んだりネットで調べるよりも、実際の環境を目の当たりにして説明を受ける方が腑に落ちるものがあった。
障害対応は人を育てるというか、一気に成長させるということを聞いたことがあるが、まさに今がその時だと思った。
(安田さんが何でデータベースに詳しいのかはこの際置いておくとして、今はこの人とこの状況から学べることは学んでおこう)
「......と言うことで、共有プールを1GByteから2GByteにします!」
桜子はそう宣言し、雄一にコマンドを用意するように指示した。
「安田さん、その方法はさっきもやってみたがダメでした」
雄一は桜子が到着する前に、その方法を既に試していて失敗していることを話した。
「そりゃ、出来ないでしょうよ。どこかから持ってこないと」
「え......? どういう意味ですか?まさか......」
「バッファキャッシュを2GByteから1GByteにして、共有プールにその空いた1GByteを足して2GByteにします」
データベースの再起動を避けたい状況で、動的にメモリを再設定するにはその方法しかない。
ただし、暫定対策なのでどこかの計画停止のタイミングで再見積もりしたメモリ値を設定する必要はある。
桜子が裏紙に走り書きした図を雄一に渡した。
裏紙の図をもとに、テキストエディタに用意したコマンドを桜子が見てOKを出す。
「よし、やってみて」
「僕がですか!?」
「当たり前でしょ! あなたの管理してるデータベースなんだから!」
「でも、やっぱり......」
雄一は仕方ないとはいえ、このやり方には何か引っかかるものがあった。
昔調べて頭にうっすら残っているバッファキャッシュの説明を思い出していた。
バッファキャッシュは、ディスクから読み込んだデータをキャッシュしておくメモリ領域です。
同様のデータを問合せた場合に、バッファキャッシュに同じデータがあれば問合せを高速化することが出来ます。
(この説明だと、バッファキャッシュを減らすのはまずい気がする......)
だが、今の雄一には、この漠然とした思いを的確に表現出来るほどの知識も余裕もなかった。
「乱暴だけど、やってみないとわかんないでしょ。どうせ黙って座ってても再起動することになるんだから! この際、泥臭くあがいてみて、色々試してみるのが一番よ」
煮え切らない態度に業を煮やしたのか、桜子は雄一を怒鳴りつけた。
「はい」
「ALTER SYSTEM SET DB_CACHE_SIZE=1G;」と入力し、リターンキーを押した。
「システムが変更されました」と表示される。バッファキャッシュが2GByteから1GByteに縮小された。
「ALTER SYSTEM SET SHARED_POOL_SIZE=2G;」と入力し、リターンキーを押した。
「システムが変更されました」と表示される。共有プールが1GByteから2GByteに拡張された。拡張された1GByteはバッファキャッシュから持ってきたものだ。
「動作確認をお願いします」
桜子が言うと、福島がコールセンター室へ行き、小倉に動作確認を依頼する。
「問題なく動いてる。いったいどんな魔法を使ったんだ?」
サーバ室へやって来た小倉が桜子に訊いた。
「ちょっとメモリの設定を変えました。あくまで暫定対策なので、計画停止の際に改めて設計し直した値を設定させてください」
「そんなに簡単にできるものならもっと早くやってほしかったな」
小倉が有馬を横目で見ながら言う。
「次の計画停止は一か月後です。アプリケーションサーバのOSパッチあての時ですね。その時についでにデータベースを再起動してORACLEのメモリ設定も行いましょう」
福島が手帳を開いて今後の予定を確認した。
「うむ、わかった」
障害が解決し、周囲に弛緩した雰囲気が漂う。
ああ、これで終わったんだ。雄一は思った。
実際には自分は何も出来ていないけれど。そう思うと、不甲斐ない思いがこみ上げてきた。
結果だけを見れば、桜子はそんなに難易度の高いことをしたわけじゃない。
共有プールの拡張までは思い付いたのだから、必死になりさえすれば自分でも出来たことなのではないか?彼女がいなくても対応出来たのではないか? 否、あの時の自分の状態じゃ思いもつかないだろう。雄一の思考は堂々巡りを繰り返した。
思考の根底には、自分の努力不足と物事を投げ出しがちな悪い癖に対する後悔みたいなものがあった。
(次のチャンス(障害)は、自力で解決してみせるぞ)
そう思うことで、何とか自分を取り戻そうとした。
その時、コールセンター室からオペレータが駆け込んできた。
「すいません、接続できるし処理はできるんですが、処理や応答が凄い遅いです。いつもすぐ終わる処理が十秒以上かかっても終わりません」
「何だって!?」
桜子以外の全員が揃って驚きの声を上げた。
「ふむ......」
桜子は顔色一つ変えなかった。そして、あまりにも冷静なので、まるでこうなることが予測できていたかのようだった。
つづく
コメント
和
毎回、楽しく読ませていただいています。
次回へ続く際の終わり方が秀逸です。
自分だったらこうなる前にたくさんメモリを積んでおくべきだった(16GB)とか、思いますね...
湯二
和さん。
いつも読んでいただきありがとうございます。
漫画読んでると次のページが早くめくりたくなるようなコマ割の作品が多いです。
小説も同じように、次が気になるようにしたほうがいいかなと思って書いてます。
小説はこれが初めて書いたものですが、それだけを気を付けてます。
メモリは予算とか気にしないでいいなら、たくさん積んでおきたいです。私も。。。
lav
リーベルGさん、なーRさんに続いて、小説が出てきた!
競馬ファンですねー。
登場人物、会社の名前が全て競馬関係だ。
ひろ氏
お久しぶりです。
文系の院生がIT業界に入ってみて感じたこと管理人のひろ氏です。
自分がこんな現場に突っ込まれたらいやだなあと思いつつ見てますが、やはりoracleとメモリは
外せない内容なんですね。
前の現場で暇さえあればドライブ拡張とメモリ追加の工事をしてたんですがこういったトラブルが起きにくいようにしてたんですね。
湯二
lavさん、読んでいただきありがとうございます。
リーベルGさん、なーRさんの小説を今、遡って読んでます。
勉強になります。
競馬好きですね。
登場人物とか、会社名は、そういう感じで着けてます。
馬券はG1で100円賭けるくらいです。
ウイニングポストというゲームが好きで、ロマンとか馬の血統とかのが好きです。
湯二
ひろ氏さん、お久しぶりです。
読んでいただきありがとうございます。
私もこんな現場で、こんな人々のところに突っ込まれたらいやですね。。。
oracleのメモリ設計って難しいんですよ。
安定稼働するまでは、中々いうこと聞いてくれません。
お話では、障害が起きてあたふたしてるけど、本当はこんなのダメですよね。
常にログ監視したり、メモリの使用率が90%越えたらアラーム上げる仕組み入れるとか、、、
予防保守ですよ。
そんな仕組みを入れとけって感じですね。