Hyper-Vcharade_oo4oと申します。)へ参加する事となりました。本業はRCレーサーですが、ペイドライバーです。昨年は中国代表としてアジア大会を戦いました。スポンサー活動で民需系のSEもやっています。DatabaseはWindowsサーバで導入する事が多かったです。H/Wリプレース案件もあるので、oo4oは今でも現役です。今回は、WindowsのDBサーバをHyper-Vで仮想化してリプレースする事を想定して、自前のNotePCで試行錯誤した内容について書きたいと思います。<Hyper-V、検証環境>今回想定した移行前後のOS/DBのバージョンは、下記の通りです。移行後のゲストOSは、用途に応じて複数検討しました。Editionを想定しました。移行後のゲストOS1は、単純なP2Vを想定してOS/DB共に移行前と同一バージョンです。移行後のゲストOS2は、64bit化でより多くのメモリを活用可能とする為、OS/DBをバージョンアップします。x64のWindowsでは9iR2がサポートされないので11gR2で、OSは11gR2がサポートする2008R2で検証します。ホストOSは、最新の仮想化技術を使用する為、2012で検証します。一部比較の為に2008R2も使用しました。EEをHyper-V上に構築する手順も試行錯誤していたのですが、検証環境なら別マシンのVirtualBox上に構築した方が簡単確実だという事に気が付いてしまい、今回は見合わせました。<P2V、遅いディスク>ゲストOS1の2003を評価した際、VHDフォーマットの仮想ディスクへの書き込みが妙に遅いという事がありました。ディスク作成方法を色々と見直した所、同一物理ディスク上でも、書き込みが遅いVHDもあれば、物理ディスクと同等の速度が出るVHDもありました。論より証拠で、E:に書き込みが遅いVHD、D:に物理ディスクと同等の速度が出るVHDでのベンチマーク結果を表示します。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へ更にメモリを追加出来る様になります。Entries(FSPTE)が不足する事が多く、OSの動作が不安定となる場合があります。/USERVA=xxxx」で、ユーザーモード領域を2-3GBの間で調整します。仮想化したゲストOSの利点となりますが、物理サーバ上に構築したOSと比べてリソース使用量が少ない為、より多くのメモリをユーザーモード領域へ割当可能です。2012の登場前に2008R2で調査した際は、「/3GB」のみでも充分なFSPTEが確保可能でした。/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を有効化すると、今度は無事にログイン画面が表示されました。何かのパッチが解決してくれた様です。31232以上の様に、2012は2008R2と比べてリソース使用量が多い事が解ります。V2V等でホストOSを2008R2から2012へ変更する場合、ゲストOSでは「/USERVA=xxxx」の調整後、OracleのSGA割当を見直す必要があります。他にも、ストレージが高速化される場合、REDOログのサイズ見直しも必要となるかも知れません。Oneは非常に魅力的だと思います。x86サーバではコア数に関わらず2ソケットまで使用可能の為、Hyper-V等の仮想化サーバ用にも適していると思います。Editionと各種オプションによる機能強化は、初期費用を上回る利点があるかも知れません。Managerの画面から再確認したいと思います。パフォーマンスタブが無効化されて使用不可能となっています。ADDM、ASH、SQL監視は勿論、セッションの検索すら使用できません。サードパーティ製品か、旧バージョンのスタンドアロン版を使用したくなります。RBOの9iからCBOの11gへ移行する必要がある場合、上記機能やSQLチューニングが利用出来れば、移行時やその後の運用でも工数削減が可能です。その価値は、EE+オプションとSEOneの価格差以上かも知れません。<CPU、そんなに沢山必要ですか?>Hyper-Vではサポートされる仮想プロセッサ数がゲストOS毎に異なります。2012のHyper-Vの情報は、執筆時点ではja-jp側には翻訳されていませんでした。Overview2012のHyper-Vでは、ゲストOSが2008R2では64CPU、2003では2CPUまでサポートされます。2003でのサポート上限は、2008R2のHyper-Vの頃から変わっていません。SEOneに対して複数セッションから大量のINSERTを行う検証スクリプトを実行した所、CPU割当数によって処理時間やStatspackのTop5待機イベントが変わりました。space」が多発していた為、log_buffer=64Mへの拡大も試したのですが、むしろ処理時間が増加したので32Mへ戻して計測しました。log_bufferのサイズ以外に原因がある様です。処理時間を比較すると、1CPUが最も速く完了しています。quantum」が多発してCPUの割当を待機しているので、1CPUでは割当が不足しているのかも知れません。4,2CPUの待機イベントは似たような傾向で、4CPUの方が全体的に待機時間が増えています。I/O関連が上位に来ています。time」はCPU割当数が多い程、待機時間が増加しています。以上の事象から考察すると、大量書込のワークロードでは遅いHDDがI/Oネックとなっていて、2CPU以上に追加しても待機時間が増えるだけの状態なのだと思います。本格的な仮想化サーバでは速いストレージを用意すると思いますが、今回のNotePCでの検証は、足回りの能力を超えるエンジンを搭載しても、それを生かすどころか逆効果となりかねない実例だと思います。そもそもSEOneはシリアル実行のみでパラレル実行は出来ないので、CPUを多く割り当てる必要性は低いかも知れません。<まとめ>・P2V以外でも、ミスアライメントに要注意。・仮想化テクノロジーが変わると、ゲストOS側にも手を入れる必要有。・SEOne、初期費用はお買い得でも、運用を考えると割高?・CPU割当数は、ストレージ性能とバランスさせる必要有。Watanabeさんへバトンが続いていきます。[必須入力]※画像の中の文字を半角で入力してください。この記事へのトラックバックSeesaaブログ。