Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP-UX   >  Knowledge-on-Demand  >  特別企画

Oracle 環境向け高速化ツール“ODM”はなぜ速いのか?

特別企画:HP-UX11i v3 新世代ミッションクリティカルOSへ 第4回

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
特別企画:HP-UX11i v3 新世代ミッションクリティカルOSへ 第4回  Oracle 環境向け高速化ツール“ODM”はなぜ速いのか?
「Oracle Disk Manager(ODM)」の大きな特徴は、HP-UXのカーネルレベルで非同期I/Oを実装している点だ。またファイルシステムのバッファをスキップするDirect I/Oモードを用いることで、バッファ重複によるオーバーヘッドを解消し、かつサーバーのメモリをフルにSGAに割り当て可能になる。さらに通常のファイル記述子を使わず、プロセス間で共有可能なODM識別子によりファイルを管理し、カーネルリソースの消費が減少する。こうした数々の工夫によって、ODMではrawデバイス並みの性能をファイルシステムで実現することに成功している。
Oracle 環境向け高速化ツール“ODM”はなぜ速いのか?
ODMが速い、その理由
ODMの実力を探る
2007年7月
テクニカルライター 吉川 和巳
ページ: 1   2   |   次へ 

ODMが速い、その理由

Oracle 環境向け高速化ツール“ODM”で「rawデバイスの悩み」を解消しよう」でも説明したとおり、Oracle Disk Manager(ODM)は以下の3つの特徴を備えている。

  • 通常のファイルシステム(VxFS)とまったく同じ使い勝手を提供
  • カーネルレベルで非同期I/Oを実装し、複数のI/Oリクエストを一括実行
  • ファイルシステムによるバッファリングをスキップ

まず管理者から見てODMは、ファイルシステム(VxFS)上にOracleデータベース(以下、Oracle)を構築して運用するケースとまったく同じ使い勝手を提供する。つまりODMの導入にともない、Oracleの構築手順や運用手順が大きく変わる部分はない。よって、前編で述べたようなrawデバイスの管理性の低さを解消し、ファイルシステムの利便性をフルに発揮できる。

次に、ODMの大きな特徴は、HP-UXのカーネルレベルで非同期I/Oを実装している点だ。前編でも述べたとおり、ODMはオラクルが策定した専用APIに基づいて開発された製品であり、ODMが備わる環境ではOracleが同APIを通じて非同期のI/Oリクエストを発行する。これについて、以下に詳しく説明しよう。

周知のとおり、OracleのメモリバッファであるSGAとディスク間のデータ読み書きを司るのは、DBWRプロセスである。よってOracleをファイルシステム上に構築すると、このDBWRがread()/pread()やwrite()/pwrite()といった標準的なUNIXのI/Oシステムコールを繰り返し実行し、ファイルシステムを介したデータアクセスを実行する。

こうした標準的なファイルI/Oを通じてOracleを動作させる場合、次のような問題が生じる。

  • 多数の同期・非同期I/Oが発生
    さまざまな種類のI/Oリクエストが多数発生するため、ファイルシステムが介在することによるオーバーヘッドが生じる。同期I/Oも多いため、データが実際にディスク上に書き出されたり、ディスク上から読み込まれたりするまで、リクエスト元のスレッドは待ち状態となる。非同期I/Oについても、処理完了を確認するポーリングが必要となる。
  • データのフラグメンテーション
    データベースのように大規模の連続したデータに特化していないので、データがディスク上の各所に分散して記録される。
  • ファイルオープンの競合
    あるプロセスが書き込み中のファイルはOSによってロックされるため、他のプロセスが同時に書き込むことができない。
  • バッファの重複
    Oracleとファイルシステムのそれぞれが個別にバッファを持ち、オーバーヘッドが生じるほか、サーバーのメモリ・リソースがムダに分割されてしまう。

そこでODMでは、標準のシステムコールの代わりに、Oracleによるファイルアクセス専用の非同期I/Oシステムコールであるodm_io()を利用する。これにより、以下のようなメリットが得られる。

  • I/Oリクエストを少数の非同期I/Oに集約
    odm_io()システムコールは非同期であるため、DBWRのスレッドはディスクの読み書き完了を待つ必要がなく、直ちに次の処理に取りかかれる。また、odm_io()ではDBWRが発する複数のI/Oリクエストをひとつに集約し、まとめてOSに指示できる。そのためI/O処理の回数が減り、オーバーヘッドが減少する。
  • フラグメンテーションの防止
    ディスク上の連続した領域にファイルを記録するため、大規模の連続したデータに効率よくアクセスできる。
  • ファイルロックのバイパス
    ファイルオープン時の競合を解消する。
  • Direct I/Oモードの利用
    ファイルシステムのバッファをスキップするDirect I/Oモードを用いることで、バッファ重複によるオーバーヘッドを解消し、かつサーバーのメモリをフルにSGAに割り当て可能になる。
  • ODM識別子の利用
    通常のファイル記述子を使わず、プロセス間で共有可能なODM識別子によりファイルを管理し、カーネルリソースの消費が減少する。
Direct I/Oモードによるバッファ重複の解消
図1:Direct I/Oモードによるバッファ重複の解消

このように、ODMではOracleに特化したシステムコールやI/Oメカニズムを用意することで、ファイルシステムを扱いながらもオーバーヘッドをきわめて低く抑えることに成功している。


特別企画一覧 戻る ページ: 1   2   |   次へ  次のページへ

本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

オンラインサポート
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項