Oracle Real Application Clusterの検証 その1
<Oracle Real Application Clusterの検証 ~その1~>
ペンネーム ダーリン
今週からは、Real Application Cluster(以下、RAC)に関する検証を行って
いきます。
しかし、RACの検証と一言でいってもあまりにも漠然としているので、少し
整理してみます。
<>
まず、システムを新規に立ち上げる、もしくは、既存のシステムを移行する
場合に、RAC環境で構築するメリットはどこにあるのでしょうか。
一般に、RAC環境では、以下の点にメリットがあるといわれています。
1.高可用性(High Availability) 障害発生時にHOT/COLDスタンバイ構成のクラスタシステムでは、障害発 生時等のサービス切り替え時に、一旦サービスの停止が必要であるが、 RACの場合、サービスの停止は発生しない。 2.スケーラビリティ(Scalability) RACを構成するノードを追加することで、データベース全体の処理性能を スケーラブル(正比例)に増加することが出来る。Oracle Parallel Server (OPS)との大きな違いは、Inter Connectを利用することで実現 されている。
つまりRAC環境では、システム障害に伴うサービス停止の回避と、ユーザ数
増加などとともに必要になる処理性能の増加を比較的簡単に実現できるソ
リューションといったところでしょうか。
ちなみに、この「スケーラブルな処理性能」というのは「言うはやすし、、」
です。先週のめるまがでも触れましたが、システム移行などで既存のアプリ
ケーションをシングルインスタンス環境からそのままRAC環境へ移行すると、
スケーラビリティが”1″を下回ること請け合いです。
※スケーラビリティ=”1″は、1ノードでの処理性能と同等の性能を現します。
※つまり、スケーラビリティ=”2″は1ノードの時と比較して、2倍の処理性能の意。
※”1″を下回るということは、シングルインスタンスの時より性能が下回ると
※いうこと。
というわけで、今回の検証では、単純には増加してくれないスケーラビリティ
に目をつけ、RAC環境でスケーラビリティを左右する要因を捜して見ることに
します。
検証に使用する環境は、極力シンプルな構成で行うためLinuxの2ノード構成の
環境を主に利用します。
では、当検証環境での処理性能の様子を見てみましょう。私もどのくらいの
性能が出るのか興味深々です。
まず、検証テーブルを作成します。
SQL> CREATE TABLE TEST01 ( C1 NUMBER ,C2 VARCHAR2(100)); SQL> CREATE INDEX IDX_TEST01 ON TEST01(C1);
このテーブルを対象にデータ作成、更新、検索の各処理を実行し、その際の
EPS値を取得することにします。
※EPS値・・・Execution Per Secondの略称で、単位時間(秒)あたりのSQL実
行数を現します。処理性能の相対評価の指針として使用してい
ます。
次に、評価の基準となる、数値を取得してみます。
取り敢えず、1ノード・1SESSIONでINSERT/UPDATE/SELECTを実行して見ること
にします。(SCRIPTは末尾の例を参照してください。)
その際のEPS値は、以下のとおりでした。
****************************************** NODE1 EPS --------------------------------------- INSERT処理 274 UPDATE処理 260 SELECT処理 239 ******************************************
次に、1ノードで2SESSIONから同時に実行してEPS値を取得します。
結果は以下のとおりです。
****************************************** NODE1 / NODE1 EPS --------------------------------------- INSERT/INSERT処理 350 UPDATE/UPDATE処理 590 SELECT/SELECT処理 242 ******************************************
仮に、1SESSIONの処理性能と比較すると詳細な検討は必要ですが、各処理性能
は上昇しています。UPDATE処理に関しては、DISKのI/Oの影響があったため、
1SESSIONで実行したときの数値が小さく出ています。またの機会に取り直して
みます。
では、2ノードから、各ノード1SESSIONずつ同時に実行してみましょう。
****************************************** NODE1 / NODE2 EPS(NODE1) EPS(NODE2) ------------------------------------------- INSERT/INSERT処理 95~208 92~211(安定しない) UPDATE/UPDATE処理 17~160 11~164(徐々に低下) SELECT/SELECT処理 238 239 NODE1 / NODE2 EPS(TOTAL) ------------------------------------------- INSERT/INSERT処理 187~419 UPDATE/UPDATE処理 28~324 SELECT/SELECT処理 477 ******************************************
さてどうでしょうか。
SELECT処理に関しては、かなりの性能が出ているようです。(ほぼ2倍)
一方、INSERT/UPDATEの処理では、幾分不安定でかならずしも元のEPS値を上
回るわけではないようです。
さてさて、次回からもう少し腰を落ち着けてRACの世界をのぞいてみましょう。
参照(以下はSELECT処理の例です。)
//============================= require 'dboralib.slb' global i global csr={''} connect darling/darling if DBERR != 0 print('connect error=[${DBERR}]',stdout) exit endif print('start=[${TIME}]',stdout) loop i=0;i<50000;i++ if i%100 == 0 print("select count=[${i}]",stdout) endif sql select c1 ,c2 from test01 where c1 = :i; if DBERR != 0 print("select error=[${DBERR}]",stdout) exit endif csr = fetch(0) endloop print("end=[${TIME}]",stdout) exit //=============================
テニスの季節だ!! 茅ヶ崎にて