H課長からのヘルプ依頼
システムの「心臓」こと、Oracle Databaseに日々携わるたろーちゃん。
たろーちゃんがいつものように業務を行っていると、直属のN課長から声を掛けられました。何があったのでしょうか?
たろーちゃんを取り巻く相関図
N課長「たろーさん、ちょっといいかね?」
たろー「はい、何でしょうか?」
N課長「実はH課長から、以前の4ノード RAC (Real Application Clusters)システムのことで、たろーさんにヘルプを頼みたいとの話があったんだ。」
たろー「え?・・・H課長からですか??」
N課長「そうだ。担当は新人のTさんだから、時間のある時にTさんに話を聞きに行ってくれ。」
たろー「はぁ…。分かりました。」
H課長が私にヘルプ依頼?
今度はどんな変化球が来るんだ・・・?
もう関わりたくないんだけど・・・。
身構えながら、たろーちゃんはTさんの所に向かいました。
Tさんの説明
たろー「Tさん、この前の4ノード RAC で何かあったの?」
新人T「たろーさん、お疲れ様です。
実は先日、ハードウェア障害があって、1台のノードが停止したんです。」
たろー「ふむ。」
新人T「それで リコンフィグ が走ったのですが、すごく時間が掛かってしまって…。
今後、いつまたハードウェア障害が起こらないとも限りません。リコンフィグ時間を短縮する方法を、御存知ではないでしょうか?」
たろー「リコンフィグ時間を短縮ねぇ…。大規模 RAC の課題だよね。」
新人T「はい。」
たろー「考えてみるから、ちょっと時間をくれるかい?」
新人T「はい、分かりました。よろしくお願いします。」
新人T
たろーちゃんは考えながら、Dさんの所に向かいました。
Dさんの助言
たろー「先輩、今ちょっとお時間よろしいですか?」
Dさん「おお、たろーちゃん。
たろーちゃんが俺に相談なんて珍しいな。何があったの?」
たろー「それが・・・。」
たろーちゃんは事の成り行きをDさんに説明しました。
Dさん「へー。H課長がたろーちゃんにヘルプ依頼をねぇ。」
たろー「今度は何を考えてるんでしょうか?」
Dさん「・・・多分、排除するのは諦めて、仲間に引き込もうとしてるんじゃないかな?」
たろー「は?」
Dさん「損得勘定でそう判断したんだろう。面倒なことを押し付けたいだけだと思うよ。」
たろー「なんですかそれ?気に入らないですね。時勢が変わると見るや否や、手のひらを返す人なんて、信用出来ないです。」
Dさん「まぁなぁ・・・。」
たろー「H課長にはプライドとか無いんですかね?」
Dさん「はは、プライドか・・・。」
たろー「そうですよ。」
Dさん「たろーちゃんの言うプライドってのは、『腹の足し』になるのかい?」
たろー「え。」
Dさん「俺たちは給料を貰って生活をしてるんだ。それで食べて生きてる。
プライドだけで、食べていけるのかい?」
たろー「そ、それは・・・。」
Dさん「物凄く極端な例になるんだけどさ。恐竜はなぜ絶滅したか知ってるか?」
たろー「え・・・?」
Dさん「新しい環境に適応出来なかったからだ。それは我々にだって当てはまる。新しい状況に適応出来なければ、食べていけない。」
たろー「・・・。」
Dさん「H課長はくだらない奴だなって俺も思うよ。
今回だってN課長経由で依頼してきてるだけで、自分は一切、表に出てきてないもんね。
・・・でも『したたか』だ。新しい状況に適応しようとしているんだから。」
だからと言って!
Dさん「たろーちゃんの気持ちはよく分かるよ。
『協力したくない訳じゃない。都合のいいように利用されてるのが許せないだけ』なんだろう?」
たろー「・・・。」
Dさん「じゃあ、こういう考え方はどうかな?
H課長に協力するんじゃなくて、『Tさんを助ける』んだ。」
たろー「!」
Dさん「事実、困っているのはTさんなんだよね?ならば、H課長のことはこの際、完全に無視しといて、Tさんを助けるという考え方&気持ちだ。」
たろー「・・・。」
Dさん「わざわざ俺の所に相談に来たんだ。Tさんの問いかけに対する答えは、もう持ってるんだろう?じゃなければ、その場ですぐに断ってた筈だ。」
たろー「・・・。」
Dさん「どうだ?」
たろー「・・・分かりました。でも勘違いしないでくださいね。
私はH課長ではなく、Tさんを助けるんですからね。」
Dさん
そう言うと、たろーちゃんはTさんの所へ向かいました。
本当に直球しか投げれないやつだ。技術や知識は凄いのに、まるで子供だな・・・。
リコンフィグ時間の短縮
たろー「Tさん、さっきの件なんだけど。」
新人T「はい!」
たろー「LMSnバックグラウンドプロセスの数はいくつにしてある?」
新人T「LMSnバックグラウンドプロセスですか??」
たろー「そうだ。初期化パラメータ GCS_SERVER_PROCESSESで指定している値だ。」
新人T「いえ、その初期化パラメータは特に指定していないです。」
たろー「ということは、デフォルト値で動いてるんだな。」
新人T「すぐに確認します!」
新人T(カタカタカタ)
SQL> show parameter gcs_server_processes NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ gcs_server_processes integer 2
新人T「2になっています。」
たろー「1ノードあたり8CPUだったよな?」
新人T「はい、そうです。」
たろー「GCS_SERVER_PROCESSESのデフォルト値は、CPUの数によって変わってくるんだ。8CPUならば2だ。」
新人T「なるほど・・・。」
たろー「LMSnバックグラウンドプロセスの数を増やせば、リコンフィグの時間を短縮できるぞ。」
新人T「いくつに設定するのがいいんでしょうか?」
たろー「GCS_SERVER_PROCESSESに設定できる最大値は36だ。しかし、8CPUしかないノードで36を設定しても意味がない。8CPUならば、せいぜい8が限界だ。但し リコンフィグ 以外の処理にもCPUを残しておかなければならないから、まずは4を設定してみてはどうかな?」
新人T「分かりました!早速4に変更します!」
たろー「いや、このパラメータはオンラインでは変更できない。どこかメンテナンスのタイミングを設けて、そこで実施するんだ。」
新人T「分かりました。H課長とも相談して、メンテナンス日時を決めます。」
LMSnバックグラウンドプロセス
LMSnバックグラウンドプロセスは、 RAC インスタンス間でのメッセージの流れを制御する役割を持っています。
インターコネクト を利用したキャッシュ一貫性のためのデータブロック転送などを行う GCS のプロセスであり、LMSnバックグラウンドプロセスの数が多いほど、インターコネクトを介したデータブロック転送が高速に動作します。
大規模 RAC で、大きな SGA を構成している場合、 リコンフィグ に時間が掛かります。
その時間を短縮するには、LMSnバックグラウンドプロセスを増やすのが効果的です。
(但し、その分CPUに負荷がかかります。)
たろー「それから、 インターコネクト は冗長化してるか?」
新人T「インターコネクトですか?いいえ、冗長化はしてないです。」
たろー「11.2.0.2から、インターコネクトを冗長化出来るようになっているんだ。障害対策にもなるし、ネットワークトラフィックを分散することが出来る。もしインフラ周りで余裕があれば、インターコネクトを冗長化するのをおすすめするよ。」
新人T「分かりました。インフラ部隊にサーバやネットワークに拡張余力があるか確認します。」
たろー「参考までに、設定コマンドを教えておくよ。」
■ grid ユーザにスイッチ su - grid ■定義されているインタフェースを表示 $ oifcfg getif ■ネットワーク・インタフェースの変更 $ oifcfg setif -global eth0/198.51.100.0:cluster_interconnect
新人T「たろーさん・・・。いつもありがとうございます。どうして、そんなに色々と教えて下さるんですか?」
たろー「ん?」
新人T「だって、H課長とは、その・・・色々とあったじゃないですか。
たろーさんに、何の得も無い筈なのに。」
(・・・苦笑)
今回の「心臓外科医の術式」いかがだったでしょうか?
インターコネクト を介した処理を高速化する方法は、あまり知られていません。
複数の心臓を行き来する血液を効率よく循環させるための、見事な「術式」だったのではないでしょうか。
次回も頑張りますので、応援よろしくお願い致します。