2012年12月05日

[JPOUG Advent Calendar] Oracle on Hyper-V

charade_oo4oと申します。縁あって「JPOUG Advent Calendar」( http://www.zusaar.com/event/456005 )へ参加する事となりました。まずは自己紹介を。
本業はRCレーサーですが、ペイドライバーです。昨年は中国代表としてアジア大会を戦いました。その経緯はメーカーのブログに掲載されています( http://www.kyosho.com/blog/rc/index.php?id=11050005 )。
スポンサー活動で民需系のSEもやっています。中小規模システムでの活動が多かった為、Oracle DatabaseはWindowsサーバで導入する事が多かったです。H/Wリプレース案件もあるので、oo4oは今でも現役です。
今回は、WindowsのDBサーバをHyper-Vで仮想化してリプレースする事を想定して、自前のNotePCで試行錯誤した内容について書きたいと思います。

 <Hyper-V、検証環境>

今回想定した移行前後のOS/DBのバージョンは、下記の通りです。
移行後のゲストOSは、用途に応じて複数検討しました。

移行 種別 OS bit DB
物理OS Windows Server 2003 Standard 32bit Oracle 9iR2 SE
ゲストOS1 Windows Server 2003 Standard 32bit Oracle 9iR2 SE
ゲストOS2 Windows Server 2008R2 Standard 64bit Oracle 11gR2 SEOne
ホストOS Windows Server 2012 Standard 64bit

現物を用意した訳ではないですが、移行前の構成には、メモリ4GBの物理サーバ上に構成した32bitの2003と、DBは9iR2 Standard Editionを想定しました。
移行後のゲストOS1は、単純なP2Vを想定してOS/DB共に移行前と同一バージョンです。
移行後のゲストOS2は、64bit化でより多くのメモリを活用可能とする為、OS/DBをバージョンアップします。x64のWindowsでは9iR2がサポートされないので11gR2で、OSは11gR2がサポートする2008R2で検証します。
ホストOSは、最新の仮想化技術を使用する為、2012で検証します。但し、一部比較の為に2008R2も使用しました。

これ以外に、「Oracle Database Appliance」の事前評価用にOracle Linux 5.8+11gR2 EEをHyper-V上に構築する手順も試行錯誤していたのですが、検証環境なら別マシンのVirtualBox上に構築した方が簡単確実だという事に気が付いてしまい、今回は見合わせました。

 <P2V、遅いディスク>

ゲストOS1の2003を評価した際、VHDフォーマットの仮想ディスクへの書き込みが妙に遅いという事がありました。
ディスク作成方法を色々と見直した所、同一物理ディスク上でも、書き込みが遅いVHDもあれば、物理ディスクと同等の速度が出るVHDもありました。
論より証拠で、E:に書き込みが遅いVHD、D:に物理ディスクと同等の速度が出るVHDでのベンチマーク結果を表示します。

disk_ng disk_ok

Sequential Read Writeは大差ないのですが、Random Write 512KBでは52%(21.43/41.18)、Random Write 4KBでは35%(0.348/0.988)まで低下しています。

原因はパーティション作成時のミスアライメントでした。
今回使用したNotePCのディスクは物理4Kセクタ(AFT)の7200rpmハイブリッドHDDだったので、2003でパーティションを作成してしまうと、パーティション開始オフセットが32,256byte(31.5K)となってしまい、物理ディスクのブロックとズレが生じてしまいます。
対策は、2008以降のホストOSの「コンピューターの管理」からディスク初期化(MBR)+パーティション作成して、パーティション開始オフセットを1,048,576byte(1M)としてから、2003以前のゲストOSで使用すれば大丈夫でした。
AFTへ対応したという2012のVHDXフォーマットでも、ミスアライメントによる速度低下は発生しました。

このミスアライメントについて、NetAppにとても解り易い解説がありました。

http://www.netapp.com/jp/communities/tech-ontap/tot-virtualization-entry8-1203-ja.html
古いゲストOSを使用する場合の落とし穴―「アライメントの重要性」についてご存じですか?

ミスアライメントはAFTのHDD以外でも、SSDや、RAIDのストライプサイズでも影響するとの事です。
つまり、2003以前の物理サーバでRAID-5は書き込みが遅いと言っていた一因にミスアライメントがあった可能性もある訳です。

 <V2V、新OSは大飯喰らい>

32bitOSには4GTという機能があります。4GTを使用しないデフォルト設定では、1プロセス=2GB以内の上限がある為、メモリを4GB搭載した場合でも有効活用出来ません。
「/3GB」を指定すると、カーネルモード領域に1GB、ユーザーモード領域に3GB割り当てられ、1プロセス=3GBまで拡大出来ます。例えばOracleではDB_CACHE_SIZEへ更にメモリを追加出来る様になります。
但し「/3GB」のみでは、Free System Page Table Entries(FSPTE)が不足する事が多く、OSの動作が不安定となる場合があります。
そこで「/3GB /USERVA=xxxx」で、ユーザーモード領域を2-3GBの間で調整します。

http://support.microsoft.com/kb/316739/ja
/userva スイッチと /3GB スイッチを使用してユーザー モード領域を 2 〜 3 GB の間でチューニングする方法

仮想化したゲストOSの利点となりますが、物理サーバ上に構築したOSと比べてリソース使用量が少ない為、より多くのメモリをユーザーモード領域へ割当可能です。
2012の登場前に2008R2で調査した際は、「/3GB」のみでも充分なFSPTEが確保可能でした。
2012で再評価した所、「/3GB」のみではFSPTEが不足気味で、「/3GB /USERVA=xxxx」で調整する必要がありました。

そこで今回、ホストOSを2008R2と2012で切り替え、ゲストOS1の2003のVHDを割り当てて比較しました。ちなみにホストOSの切替にはVHDブートを利用しています。
更に余談ですが、久々に2008R2をホストOSとして起動した所、ログイン画面が表示されず真っ黒な画面にマウスカーソルのみが表示されるという障害に見舞われました。
新規インストールし直しましたが、Hyper-Vを役割追加すると障害が再発。逆に当初のVHDへ戻して、bcdeditでhypervisorlaunchtype=Offに設定してHyper-Vを無効化すると、無事にログイン画面が表示される....
2008R2のHyper-Vの評価は断念かと思いましたが、大量のWindowsUpdateの適用後、bcdeditでhypervisorlaunchtype=Autoに設定してHyper-Vを有効化すると、今度は無事にログイン画面が表示されました。何かのパッチが解決してくれた様です。

ホストOS ゲストOSスイッチ FSPTE
2008R2 /3GB 35368
2012 /3GB 12800
2012 /3GB /USERVA=3000 31232

以上の様に、2012は2008R2と比べてリソース使用量が多い事が解ります。
V2V等でホストOSを2008R2から2012へ変更する場合、ゲストOSでは「/USERVA=xxxx」の調整後、OracleのSGA割当を見直す必要があります。
他にも、ストレージが高速化される場合、REDOログのサイズ見直しも必要となるかも知れません。

 <SEOne、11gR2での価値>

費用面で考えると、Standard Edition Oneは非常に魅力的だと思います。x86サーバではコア数に関わらず2ソケットまで使用可能の為、Hyper-V等の仮想化サーバ用にも適していると思います。
但し機能面で考えると、Enterprise Editionと各種オプションによる機能強化は、初期費用を上回る利点があるかも知れません。
SEOneでは何が出来ないのか、11gR2のEnterprise Managerの画面から再確認したいと思います。

em_seone

パフォーマンスタブが無効化されて使用不可能となっています。ADDM、ASH、SQL監視は勿論、セッションの検索すら使用できません。サードパーティ製品か、旧バージョンのスタンドアロン版を使用したくなります。
RBOの9iからCBOの11gへ移行する必要がある場合、上記機能やSQLチューニングが利用出来れば、移行時やその後の運用でも工数削減が可能です。
その価値は、EE+オプションとSEOneの価格差以上かも知れません。

 <CPU、そんなに沢山必要ですか?>

Hyper-Vではサポートされる仮想プロセッサ数がゲストOS毎に異なります。
2012のHyper-Vの情報は、執筆時点ではja-jp側には翻訳されていませんでした。

http://technet.microsoft.com/en-us/library/hh831531.aspx
Hyper-V Overview

2012のHyper-Vでは、ゲストOSが2008R2では64CPU、2003では2CPUまでサポートされます。2003でのサポート上限は、2008R2のHyper-Vの頃から変わっていません。

検証に使用したNotePCが2コア4スレッドなので、ゲストOS2の2008R2を、4CPU、2CPU、1CPUへ順に変更して、11gR2 SEOneに対して複数セッションから大量のINSERTを行う検証スクリプトを実行した所、CPU割当数によって処理時間やStatspackのTop5待機イベントが変わりました。

4CPU: 処理時間=0:02:23
Event Waits Time (s) wait (ms) Call Time
log buffer space 315 306 971 25.9
CPU time   145   12.3
db file sequential read 368 142 387 12.0
log file parallel write 346 122 354 10.4
db file parallel write 1,693 121 71 10.2

2CPU: 処理時間=0:02:11
Event Waits Time (s) wait (ms) Call Time
log buffer space 290 296 1020 26.4
db file sequential read 643 126 196 11.3
log file parallel write 339 113 332 10.1
CPU time   107   9.5
db file parallel write 1,324 103 78 9.2

1CPU: 処理時間=0:02:00
Event Waits Time (s) wait (ms) Call Time
resmgr:cpu quantum 262 278 1059 34.1
CPU time   102   12.5
db file sequential read 699 75 107 9.2
log file parallel write 804 70 87 8.6
db file parallel write 297 66 223 8.2

4,2CPUでは「log buffer space」が多発していた為、log_buffer=64Mへの拡大も試したのですが、むしろ処理時間が増加したので32Mへ戻して計測しました。log_bufferのサイズ以外に原因がある様です。
処理時間を比較すると、1CPUが最も速く完了しています。
1CPUのみ「resmgr:cpu quantum」が多発してCPUの割当を待機しているので、1CPUでは割当が不足しているのかも知れません。
4,2CPUの待機イベントは似たような傾向で、4CPUの方が全体的に待機時間が増えています。
4,2,1CPU全てで「CPU time」は最上位ではなく、4,2CPUではLGWRやDISK I/O関連が上位に来ています。また「CPU time」はCPU割当数が多い程、待機時間が増加しています。

以上の事象から考察すると、大量書込のワークロードでは遅いHDDがI/Oネックとなっていて、2CPU以上に追加しても待機時間が増えるだけの状態なのだと思います。
処理実行中のDISKのアクセスランプとタスクマネージャーのCPU使用率も、4,2CPUではDISKの負荷が高く、1CPUではCPU使用率が高い状況でし た。
本格的な仮想化サーバでは速いストレージを用意すると思いますが、今回のNotePCでの検証は、足回りの能力を超えるエンジンを搭載しても、それを生かすどころか逆効果となりかねない実例だと思います。
そもそもSEOneはシリアル実行のみでパラレル実行は出来ないので、CPUを多く割り当てる必要性は低いかも知れません。

 <まとめ>

・P2V以外でも、ミスアライメントに要注意。
・仮想化テクノロジーが変わると、ゲストOS側にも手を入れる必要有。
・SEOne、初期費用はお買い得でも、運用を考えると割高?
・CPU割当数は、ストレージ性能とバランスさせる必要有。

明日はGo Watanabeさんへバトンが続いていきます。

posted by charade at 00:00| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/304677033
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック