「システム基盤構築のプロフェッショナル」レック・テクノロジー・コンサルティングJapanese | English

レック・テクノロジー・コンサルティング株式会社

技術ブログ

HOME > 技術ブログ > 月別アーカイブ: 2012年4月

月別アーカイブ: 2012年4月

Oracleの接続構成 - 専用サーバー

こんにちは、レック・テクノロジー・コンサルティングの伊藤です。
前回から進めているOracle Database(以下、Oracle)のプロセスのお話ですが、
今回と次回の2回に渡り、サーバー・プロセスについて解説していきます。

はじめにサーバー・プロセスについてのおさらいです。
前回、サーバー・プロセスには2種類あると説明しました。

  • ・専用サーバー
  • ・共有サーバー

 
これだけではあんまりですので極めて簡単な説明を加えますと、
サーバー・プロセスひとつに対し、仕えるご主人様の人数が1人か、複数か、が両者の違いになります。

■専用サーバーのイメージ

 
■共有サーバーのイメージ

 
厳密には、共有サーバーにはディスパッチャ・プロセスが加わります。
このため、単にご主人様とサーバー・プロセスの関係だけではありませんが、
これは次回の話にすることにして今回は専用サーバーについて説明します。

専用サーバーとは?

 
単一のユーザー・プロセスに対してのみ仕事をするのが専用サーバーです。
上の図では、3人のご主人様それぞれにサーバー・プロセスが1つずつ、ついています。
このような形でクライアントとサーバーがやり取りをする構成を「専用サーバー接続(構成)」と呼びます。

この構成では、
ご主人様がインスタンス君に仕事を要求したときに初めて専属のサーバー・プロセスが割り当てられます。
サーバー・プロセスはご主人様の要求があれば、すぐに仕事をして結果を返します。
その一方で、仕事がない場合は特に何もしません。
空き時間ができようとも他のご主人様の仕事を受けることはありません。
これ以上の仕事はないとなると、サーバー・プロセスはお役御免になります。

どのような場合に使用する?

 
上のようなことから専用サーバーがどのような特性を持つのかを挙げてみます。
※一旦、インスタンス君の子分とご主人様から離れます。

・ユーザー・プロセスと1対1で直接通信するので処理性能に優れる
・ユーザー・プロセスからの接続時の負荷が高い(ユーザー接続の度にプロセスを起動します)
・ユーザー・プロセスごとにサーバー・プロセスが必要になるため、サーバー・ハードウェア
(メモリ)の要求が高くなりがち
である
 

これらの点から、専用サーバー構成 を効率よく活用できるのは、
一旦プロセスを起動したら長い時間、間断なく仕事があるようなケース・・・
限られたユーザーが複雑なSQLクエリやバッチ処理を実行する場合です。

サーバー・プロセスのうち専用サーバーについてお話をしました。
次回はもう一つのサーバー・プロセスの共有サーバーについて解説します。

Oracleの接続構成 - 専用サーバー

小泉純一郎氏現る@Oracle Open World 2012 Tokyo

2012/4/4(水) 六本木で開催されたOracle Open World Tokyo 2012 において、元内閣総理大臣小泉純一郎氏が講演されました。

17:45-18:30の間、45分間話し続け、全ての聴衆は、その話に、引き込まれて、いました。(小泉さん風)

まずは少しの沈黙から始まりました。

「ん?」と誰もが思ったその刹那、

「小泉純一郎です。」
「これくらいのボリューム(声の大きさ)でいいですか?」

と、少しの笑い。

内閣総理大臣を5年間勤め上げた人間の技を垣間見ることができた気がしました。

講演の詳しい内容はこちらでもまとめてくださっているのでご確認いただければと思います。
http://aufdai.blog69.fc2.com/blog-entry-209.html

その中で私が実際に聞いて感じたことを書きたいと思います。

オイルショックが発生する前、原油は1バレル2ドルだった。それが第4次中東戦争により、10ドルまで跳ね上がってしまった。(ちなみに今は100ドル前後ですが!)
日本中が大パニックに陥り、買占めや売り渋りが起こり、それを規制する法律を作らなければならなかった。当時、日本のエネルギーに対する石油の依存度は70%を占めていた。 が、これではまずいと思い新技術を開発し石油依存度を下げ、今となっては40%程度まで下げることができた。だから2011年には1バレル140ドルを超えても大きなパニックは発生しなかった。(多少ありましたが)
日本人は過去の経験を活かし、新技術を生み出せる。困難があっても必ず乗り越える。
しかし、その時の技術というのはもちろん「原子力」だった。
もう原子力は使えない。
ではどうするか?
必ず日本は新技術を生み出す。いや、もう生まれている。それはバイオや再生可能エネルギーだ。
それらは間違いなく世界のトップを走っている。
原子力発電所を造れる会社というのは世界で数社しかありません。
日本に3社(東芝、日立、三菱)、アメリカに2社(そのうち1社は東芝が買収)とフランスに1社のみです。
アメリカもフランスも独自で作ることはできず、日本の会社とそれぞれ提携を組んでいたりします。
日本の技術力は、すごいんです。
日本はダメだみたいな風潮がありますが、私はそんなことは全然思っていません。

先日GDPで中国が日本を追い抜きましたが、相手は日本の10倍の人口です。
つまり、中国の1人当たりGDPがようやく日本人の1/10になったというだけの話です。

伊藤洋一氏の著書
日本力 アジアを引っぱる経済・欧米が憧れる文化!」 にもありますが日本は世界から尊敬を受けています。(知らぬは日本人だけ)
不況の日本に取材に来た外国人が「日本は本当に不況なのか?」と言ったといいます。
外国の本当の不況(リセッション)というのは社会が本当に荒廃しているのだそうです。
暴動や犯罪が慢性的に発生している状態、というのが海外の不況のイメージのようです。
私が生まれてから今まで、そんな状況は1度もありません。

死者・行方不明者の数は、東日本大震災では2万人、関東大震災は10万人、阪神大震災は5千人。第2次世界大戦は300万人。その度に日本は危機を乗り越えさらに発展してきた。戦後、日本は2つの目標を立てた。
・戦争をしない
・長生きをする
我々はその2つの目標を達成してしまった。もう100歳も夢ではない。
自衛隊は海外に派遣されても1人も人を殺すことがない。他国から感謝される。
しかし、目標を立てた当初は想像もしていなかったより大きな問題が沸き起こってくるものだ。
明言は避けていましたが、その中には年金、医療費や債務等の問題があると思います。
想像もしない速度で高齢化社会が進展した社会とそれに合わせた制度が間に合っていない社会。
財務諸表で見ればとっくに破綻している日本国株式会社。
負債総額は尋常じゃありません。
それらをどう解決するのか?
社長(内閣総理大臣)になったら愕然とするはずです。
明治時代にベストセラーとなった本が2つある。
それは、「Self-Help」すなわち、「自助論」(サミュエル・スマイルズ著)と
「学問のススメ」(福沢諭吉著)だ。
とくに、自助論の「天は自ら助くる者を助く」という言葉を強調していました。
今の日本に宛てたメッセージです。

そういえば自助論は昔読みましたが、内容をほぼ忘れてしまったのでまた読んでみたいと思います。

記録というのは破られるためにあるが、絶対に破られないだろうという記録がある。
国会議員を25期連続当選、60年間国会に勤務し続けた尾崎行雄という人がいる。
その人を称えて憲政記念館というものができた。
そこには94歳の尾崎行雄本人が残した文字が残っている。「人生の本舞台は常に将来に在り」と。
94歳で将来のことを考えている!
この人、94歳で亡くなってしまうんですが!
終わりの言葉は忘れましたが、そうして颯爽と去って行きました。

ついに最初から最後までORACLEの「オ」の字も言わずに・・・

 

とまあ技術文章より長くなりましたとさ。

小泉純一郎氏現る@Oracle Open World 2012 Tokyo

Oracleのプロセスって?

はじめまして。レック・テクノロジー・コンサルティングのエンジニア 伊藤と申します。
今回からOracle Databaseのプロセスについて話をしていきます。

Oracleのプロセスの種類

 
まず初めにOracle Database(以下、Oracle)が動作する上で必要になるプロセスには次のとおりです。
  • バックグラウンド・プロセス
  • サーバー・プロセス
  • ユーザー・プロセス
 
バックグラウンド・プロセスとサーバー・プロセスは、「Oracle Database」の回でも簡単に触れられているものです。ここにさらにユーザー・プロセスが加わります。これらのプロセスの関係をいつもの図を使って確認すると次のようになります。

それでは各プロセスについて順に説明していきましょう。

バックグラウンド・プロセス

 
バックグラウンド・プロセスはOracleのインスタンスを構成する要素です。

Oracle Database」の回でも触れているとおり、バックグラウンド・プロセスには役割の異なる複数のプロセスがあり、これらが協調しながらDBMS(データベース管理システム)としての動作を実現します。

代表的なバックグラウンド・プロセスは以下のとおりです。
※説明は「データベースとは」や「Oracle Database」の回のイメージを引き継ぎます。

■DBWn   データベース・ライター(通称:DBライター)
インスタンス君の頭の中にあるデータベースの最新の情報をファイルに記録します。「頭の中」を具体的に言うと「SGAの一部であるバッファ・キャッシュ」です。書き出しのタイミングは後述するCKPTに任せています。
このプロセスは複数を動かすことができ、個々のプロセスを識別するために、末尾のnが1桁の数字またはアルファベットで表されます。

■LGWR   ログ・ライター
インスタンス君が頭の中(SGAの一部、REDOログ・バッファ)で覚えているデータベースの変更情報(REDOログ)を定期的にREDOログ・ファイルに書き込みます。

■CKPT    チェックポイント
インスタンス君は全ての情報を頭の中に留めておくことはできないので、特定のタイミングで覚えていることをファイルに書き込む必要があります。このタイミングを計り「ここまではファイルを更新した」というしるしを残すのがCKPTの仕事です。実際にファイルへ書き込むことは、DBWnに指示を出して実行してもらいます。

■SMON   システム・モニター(通称:エスモン)
インスタンス君やファイルの状態を監視し、必要であればメンテナンスを行なうプロセスです。
一番大きな仕事としてインスタンス・リカバリがあり、何らかの原因によって行動不能になった(ダウンした)インスタンス君が復活したときに、正常な状態に戻れるよう手当をしたりします。

■PMON   プロセス・モニター(通称:ピーモン)
他のプロセスの状態を監視します。おもにユーザー・プロセス(後述します)が動作不能になった場合に、
そのプロセスの後始末を行ない、他のプロセスに悪い影響を及ぼさないようにします。
 

サーバー・プロセス

 
ユーザー・プロセスと直接のやり取りをするプロセスです。
以前の図で紹介されていたインスタンス君の子分にあたります。
バックグラウンド・プロセスに対して、フォアグラウンド・プロセスと呼ばれることもあります。

サーバー・プロセスには「専用サーバー」と「共有サーバー」という2種類の使われ方があります。詳しくは次回以降で説明しますので、ここでは名前だけの紹介にしておきます。

ユーザー・プロセス

 
サーバー・プロセスに対して仕事を要求する側で、以前の図のご主人様に当たります。
クライアント・プロセスと表現されることもあります。

このご主人様は何者か...?

実際的な話をすると、業務システム端末だったりアプリケーション・サーバーだったりします。
さらに細かくすると、JavaやC言語で作られたアプリケーションそのものを示します。

今回のまとめ

 
Oracleが稼動する上で必要となるプロセスについて説明しました。
この次はサーバー・プロセスについて詳しい話をしていきます。 Oracleのプロセスって?

Oracleが使用するメモリ領域(PGA)

初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

前回はOracleが使用するメモリ領域の主な片割れ、SGAにつきまして説明させて頂きました。
今回、もう一方のPGAについて述べさせて頂きます。

以下、今回の内容となります。

・PGAとは?
・PGAの構成要素は?
・自動管理について

PGAとは?

 
PGA (Program Global Area)は、サーバ・プロセスが起動された際に確保されるメモリ領域です。
サーバ・プロセスは、ユーザが投げる要求を処理し、結果をユーザに戻す機能を有します。
確保されたPGAは非共有であり、対応するサーバプロセス以外からのアクセスはできません。

PGAは対応するサーバ・プロセスが終了した際に解放されます。

PGAの構成要素は?

 
PGAは、一般的に以下の図に示すような領域から構成されています。

・セッション情報
 セッションに対するユーザーの権限に関する情報です。

・カーソル状態
 現在のセッションで使用している、様々なカーソルの処理状態に関する情報です。

・スタック空間
 セッション変数(ログイン情報)を格納しています。

・ソート領域
 複雑な問い合わせを行った際に使用される領域です。
 以下、それぞれについて領域が割り当てられ、処理が実施されます。

 >>ソートベースの演算子(ORDER BY、GROUP BY等)
 パラメータSORT_AREA_SIZEでサイズ指定します。
 ソートに使用される領域であり、最終行を返したタイミングで解放されます。

 >>ハッシュ結合 
 パラメータHASH_AREA_SIZEでサイズ指定します。
 等価である値を結合に用いる際に使用される領域です。

 >>ビットマップ・マージ
 パラメータBITMAP_MERGE_AREA_SIZEでサイズ指定します。
 ビットマップ索引を含む問い合わせが実施された際、
 索引をスキャンした結果取り出されるビットマップをマージするために使用されます。

 >>ビットマップ作成
 パラメータCREATE_BITMAP_AREA_SIZEでサイズ指定します。
 ビットマップ作成時に割り当てる領域です。

自動管理について

 
リファレンスマニュアルに記載されている通り、○○_AREA_SIZEの各種パラメータは
共有サーバ構成ではない状態では推奨されておりません。

<マニュアルより抜粋>
----------------------------------------------------------------
インスタンスが共有サーバーのオプションで構成されていないかぎり、
SORT_AREA_SIZE パラメータを使用することはお薦めしません。
かわりに、PGA_AGGREGATE_TARGET を設定して、SQL 作業領域の自動サイズ指定
を使用可能にすることをお薦めします。
SORT_AREA_SIZE は、下位互換性を保つために残されます。
----------------------------------------------------------------
※共有サーバについては、別の回で扱われる予定です

PGAの自動メモリの割り当てをするには、パラメータPGA_AGGREGATE_TARGETを設定します。
PGA_AGGREGATE_TARGETを0以外の値に設定した場合、一部のメモリ領域のサイズを必要に応じてOracleが自動的に変更します。

11gからは更にこの自動管理機能が強化されてMEMORY_TARGETというパラメータが登場していますが、こちらについては以前の回をご覧ください。

まとめ

 
・PGAとは、各サーバ・プロセスが独自に保有するメモリ領域です。

・PGAは主にセッション情報/カーソル状態/スタック空間/ソート領域から構成されます。

PGA_AGGREGATE_TARGETを0以外の値に設定することで、PGAの自動管理が有効になります。

・更に11gからはSGA、PGAの自動管理パラメータとしてMEMORY_TARGETがあります。

最後に

 
以上、Oracleが使用するメモリ領域のうちPGAについて説明させて頂きました。

なお、今回をもちまして私の担当箇所は終了となります。
長々とお付き合い頂きまして、誠に恐縮でございます。

マニュアルや関連情報を漁る度に、改めて自分の不勉強を痛感しておりましたが、
逆に、だからOracleはやめられないなどと浮かぶ始末でもありました。

今後、またこういった企画があれば、参加させて頂くこともあると思われますが、
その際は、再度宜しくお願い致します。

では、失礼致します。

Oracleが使用するメモリ領域(PGA)

大容量メモリに潜むメモリ枯渇問題最終回 ~Linux HugePageの薦め~

こんにちは。
前回までの内容で標準の4KBページを使用した場合、最大でSGA/512=PTE/1セッションであることがわかりました。サーバに搭載するメモリ容量に比例して許容する接続セッション数を増加させることが多く、思わぬ落とし穴として本連載ではPTEを取り上げてきました。

さて、今回は Oracle Database を使用して HugePage と 4KB(標準) を使用した場合にメモリ使用効率がどのように変化するのかを確認したいと思います。

検証用に使用する環境は、以下の通りです。

RHEL 5.6 (2.6.32) 64bit
CPU: Intel Core i7-2600 CPU 3.40GHz
メモリ:5GB
Oracle Database EE 11gR2 (シングルインスタンス)
SGA:3GB

大容量メモリ云々といっておきながらかなり貧弱な環境ですが、HugePageの検証データを得る目的であれば問題ありません。

上記のサーバに疑似アプリケーションサーバからJDBC接続を行い、接続数に応じてメモリ使用がどのように変化するのかを確認したいと思います。

今回は、上記の貧弱なサーバにかなり極端ですが500セッション接続してみたいと思います。
※今回は、メモリ使用率の変化するのかをわかりやすく採取するためかなり無謀なことをしています。
クエリレイテンシなどのパフォーマンスは一先ず気にしません。
もちろん、こんな貧弱なサーバで 500 接続並列処理で通常は満足のいくパフォーマンスは得られません。
ちなみに、HugePageの使用は4KBページ比べTLBキャッシュヒット率向上などの副次的効果も期待でき、理論的にパフォーマンスが向上します。

では、早速はじめましょう。
デフォルトの設定ではOracle起動時にSGAの全領域はメモリ上に獲得されません。
そこで事前準備として、以下の初期化パラメータの設定により、インスタンス起動時にSGAの全領域をメモリ上にコミットしてしまいます(より本番に近い状態になりますね)。

alter system set pre_page_sga=true scope=spfile;

インスタンスを起動し、アプリケーションから500セッション接続(専用サーバ)を行ってみます。
SGA は3GBフルで使用しているため、サーバプロセスが使用するPTEのサイズは約6MB/1セッションとなり、搭載メモリでは対処できるものではないはずです。

結果が以下のグラフになります。

結果としては、200セッション前後で処理が停止してしまいました。
空きメモリのサイズ不足が主な原因となっています。

続いてHugePageを使用します。
HugePageの使用の前にいくつか事前準備が必要です。

1. カーネルパラメータの設定(/etc/sysctl.conf)
vm.nr_hugepages
HugePage数を指定します。必要なHugePage数の導出は、Oracleインスタンスが起動している状態で以下のURLにある算出用のスクリプトを使用するのがよいでしょう。
http://docs.oracle.com/cd/E16338_01/server.112/b56317/appi_vlm.htm
単純に共有メモリサイズ÷Pageサイズですので手計算でも可能です。
※SGAサイズ/2M+α(インスタンス起動後にHugePage数が足りない状態となった場合インスタンスは異常終了するので、安全係数を加算するとよいでしょう)

2. メモリロック可能サイズの変更(/etc/security/limits.conf)
soft memlock <SGAサイズ以上>
hard memlock <SGAサイズ以上>
HugePageに割り当てられた領域はスワップアウト対象外領域となるため、インスタンス起動ユーザのメモリロック可能サイズを設定する必要があります。SGAサイズ以上が必要となりますので、SGA+安全係数(今後の拡張幅なども加味)とするのがよいでしょう。

上記の準備が完了したらサーバを再起動し、インスタンスを起動してください。
起動後、/proc/meminfo を確認し以下の値が獲得されていれば完了です。

HugePages_Total (HugePage総数)
HugePages_Free (HugePage空数)
HugePages_Rsvd (HugePage使用数)

4KBページと同様の処理を実行してみます。実行した結果が以下の通りです。

特に滞りなく500セッション接続が可能という結果となりました。
4KBページ時と比較し劇的に改善したことが確認できます。

まとめ

 
昨今の大規模メモリ搭載サーバ上でOracleデータベースを運用した場合に陥りやすい障害例として本コラムでご紹介させていただきましたがいかがでしたでしょうか。
検証では極端な方法を行っていますが、実際によくある状況としてはインスタンス起動後、数日経過してメモリ不足に陥るケースが多いようです(使用時間によるSGAのコミットサイズ拡張とPTE数の増加)。今後Oracleデータベース設計を行う上で重要な設定要素となるのではないでしょうか。

注意!!!
HugePage使用の留意点としては以下のURLの「G.2.3 HugePages構成の制限」をご確認ください
http://docs.oracle.com/cd/E16338_01/server.112/b56317/appi_vlm.htm

大容量メモリに潜むメモリ枯渇問題最終回 ~Linux HugePageの薦め~
資料請求・お問い合わせはこちら

▲ ページトップに戻る

技術ブログ

2012年4月
« 3月   5月 »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
採用に関するお問い合わせはこちら