パフォーマンスの最適化 ヘッダーをスキップ

Oracle Database Net Services管理者ガイド
10gリリース2(10.2)

B19208-02
目次
目次
索引
索引

戻る 次へ

14 パフォーマンスの最適化

この章では、接続パフォーマンスの最適化方法について説明します。

この章の内容は、次のとおりです。

セッション・データ・ユニットの構成

通常のデータベースの構成では、Oracle Netはデータをネットワークへ送出する前にカプセル化して、セッション・データ・ユニットのサイズでバッファに格納します。Oracle Netがそれぞれのバッファを送信するのは、バッファがいっぱいになったとき、フラッシュされたとき、またはアプリケーションがデータの読取りを試行したときです。任意のある時点で送信するためにOracle Netに送られるデータ量を基準にSDUバッファのサイズを調整すると、パフォーマンス、ネットワーク使用率およびメモリー消費を改善できます。

任意のある時点で送信するためにOracle Netに送られるデータの量は、メッセージ・サイズとも呼ばれます。Oracle Netはデフォルトで通常のメッセージ・サイズは0〜2048バイトであり、2048バイトを超えることはめったにないと仮定しています。この仮説が真であれば、ほとんどの場合データは1つのSDUバッファを使用して送信されます。SDUサイズのデフォルト値が2048に設定されている理由は、このような仮説によるものです。

メッセージの大半が2048バイトより小さい場合または大きい場合は、SDUサイズを変更することを検討します。このとき指定するSDUサイズは、最大SDUサイズを超えないかぎり大半のメッセージのサイズより70バイト大きい値にします。70バイトを加えると最大SDUサイズを超える場合は、メッセージ・サイズを最小限の数に等分割し、各分割がSDUサイズより70バイト少なくなるようにSDUを設定します。

設定できるSDUサイズの範囲は、512〜32767バイトです。DEFAULT_SDU_SIZEパラメータがsqlnet.oraファイルに構成されていない場合、クライアントと専用サーバーのデフォルトのSDUは2048バイト、共有サーバーのデフォルトのSDUは32767バイトになります。

使用される実際のSDUサイズは、接続時にクライアントとサーバー間でネゴシエートされ、クライアントとサーバーの各SDU値より小さい値になります。このような理由から、デフォルト以外のSDUサイズを構成する場合は、共有サーバーを使用している場合を除き、クライアントとサーバーの両方のコンピュータにSDUを構成する必要があります。共有サーバーを使用している場合は、共有サーバーのデフォルト値がSDUの最大値に設定されるため、クライアントのSDU値のみを変更する必要があります。

たとえば、アプリケーションで送受信される大半のメッセージが8KB未満の場合は、70バイトをオーバーヘッドと考慮して、SDUを8KBに設定すれば問題ありません。利用可能なメモリーが十分にある場合は、SDUの最大値を使用すると、システム・コール数やOracle Net Servicesのオーバーヘッドを最小限に抑えることができます。

クライアント側の構成

クライアントを構成するときは、次の場所のSDUサイズを設定してください。

SDUサイズはすべてのOracle Netプロトコルに適用されます。

サーバー側の構成

データベース・サーバーを構成するときは、次の場所のSDUサイズを設定してください。

I/Oバッファ・スペースの構成

TCP/IPのような信頼性の高いネットワーク・プロトコルでは、下位または上位のレイヤ・プロトコル間でデータの送受信をしながら、送受信バッファにデータをバッファリングします。これらのバッファのサイズは、ネットワーク・パフォーマンスに影響を与えます。これらのバッファサイズがフロー制御の決定に影響するためです。

RECV_BUF_SIZEおよびSEND_BUF_SIZEパラメータでは、Oracle Net接続に関連付けられるソケットの受信および送信バッファのサイズを指定します。

連続的なデータの流れを確保し、ネットワーク帯域幅の利用率を改善するには、RECV_BUF_SIZEおよびSEND_BUF_SIZEパラメータで、セッションの送受信操作に使用するI/Oバッファ・スペースの制限値を指定します。

最適なパフォーマンスを確保するには、ネットワーク接続で同時に送信されるすべてのデータを格納するのに十分な送受信バッファ・サイズを設定する必要があります。簡単なデータベース接続では、これは通常、OCI_PREFETCH_MEMORYサイズにマップされます。

SEND_BUF_SIZERECV_BUF_SIZEを帯域幅遅延積以上の値に設定すると、ネットワーク帯域幅を最適に利用できるように、大量のデータが送信されます。

たとえば、プライマリ・データベースとスタンバイ・データベース間に、往復時間が34ms、帯域幅が15Mbpsのネットワーク・リンクがあるとします。この場合、このネットワーク・リンクの帯域幅遅延積は、約64KBになります。プライマリ・データベースとスタンバイ・データベース間のredoデータの転送に使用される最大メッセージは1MBなので、この例の場合はSEND_BUF_SIZEおよびRECV_BUF_SIZEパラメータの最適値が1MBとなります。しかし、利用可能な帯域幅を最適に使用するには、64KB以上の値を設定すれば十分です。


注意

SEND_BUF_SIZEおよびRECV_BUF_SIZEパラメータの実際の値は、ホストのオペレーティング・システム上の制限やメモリーの制約によって、設定した値より小さくなる場合があります。 


注意

接続によって消費される総メモリー容量は同時接続数と各接続のバッファ・サイズの両方に依存するため、システムでサポートする必要がある同時接続の総数と、利用可能なメモリー・リソースを検討することが重要です。 

ほとんどのネットワーク・プロトコルにおいて、一方のネットワーク接続(通常クライアント)のRECV_BUF_SIZEパラメータが、もう一方のネットワーク接続(通常サーバー)のSEND_BUF_SIZEパラメータの値と同一である必要があります。

これらのパラメータを、クライアント側のsqlnet.oraファイルか接続記述子に指定し、さらにサーバー側のlistener.oraファイルとsqlnet.oraファイルにも指定します。


注意

これらの値は、ネットワークおよびシステムの性能に大きな影響を与えるので、慎重に使用してください。これらのパラメータのデフォルト値は、オペレーティング・システムによって異なります。Solaris 2.8 Operating Systemのデフォルト値は次のとおりです。

  • SEND_BUF_SIZE: 16,384バイト

  • RECV_BUF_SIZE: 24,576バイト

Solaris 2.9のSEND_BUF_SIZEとRECV_BUF_SIZEのデフォルト・サイズは両方とも49,152バイトです。

これらのパラメータは、SSL付きTCP、TCP/IPおよびSDPプロトコルでサポートされています。オペレーティング・システムによっては、これ以外のプロトコルがこれらのパラメータをサポートしていることがあります。詳細は、Oracle Netのオペレーティング・システムに関するマニュアルを参照してください。 


帯域幅遅延積の求め方

帯域幅遅延積は、ネットワーク帯域幅とネットワークを通過するデータの往復時間の積です。往復時間を求める最も簡単な方法は、ホストから相手のコンピュータにpingなどのコマンドを発行し、pingによって戻された応答時間を使用します。

たとえば、ネットワークの帯域幅が100Mbpsで、往復時間が5msの場合、送受信バッファは少なくとも(100×106)*(5×10-3)ビット、すなわち約62.5KBになります。

使用する単位と係数の関係を詳しく理解するには、次の式を参照してください。

100,000,000 bits   1 byte   5 seconds
---------------- x ------ x --------- = 62,500 bytes
 1 second          8 bits     1000

関連項目

「トレース・アシスタントを使用したトレース・ファイルの検証」 

クライアント側の構成

クライアントを構成するときは、次の場所にバッファ・スペースを設定してください。

サーバー側の構成

データベース・サーバーはクライアントにデータを書き込むため、サーバー側は通常、SEND_BUF_SIZEパラメータの設定のみで問題ありません。しかし、データベース・サーバーが大きなサイズの要求を受信する場合は、RECV_BUF_SIZEパラメータも設定します。

データ・ベースサーバーを構成するには、listener.oraおよびsqlnet.oraファイルにバッファ・スペースを設定します。

listener.ora

listener.oraファイルには、特定のプロトコル・アドレスまたは記述子のバッファ・スペース・パラメータを指定できます。

LISTENER=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)
(SEND_BUF_SIZE=11784)
(RECV_BUF_SIZE=11784))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)
(SEND_BUF_SIZE=11784)
(RECV_BUF_SIZE=11784)))
LISTENER2=
(DESCRIPTION=
(SEND_BUF_SIZE=11784)
(RECV_BUF_SIZE=11784)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)))
sqlnet.ora
RECV_BUF_SIZE=65536
SEND_BUF_SIZE=65536
DISPATCHERS初期化パラメータ

共有サーバー・プロセスを使用する場合は、DISPATCHERS初期化パラメータに次のようにバッファ・スペース・パラメータを設定することで、サーバーのsqlnet.oraファイルから取得した現在の設定を上書きできます。

DISPATCHERS="(ADDRESS=(PROTOCOL=tcp)(SEND_BUF_SIZE=65536))"

データベース・サーバーへのInfinibandネットワーク通信をサポートするSDPプロトコルの構成

Oracle Net Servicesでは、Infiniband高速ネットワークのSDPプロトコルをサポートしています。

SDPプロトコルは、クラスタ化されたサーバー環境における標準的な通信プロトコルです。SDPは、ネットワーク・インタフェース・カードとアプリケーション間のインタフェースの役割を果たします。SDPを使用することにより、アプリケーションではメッセージ交換の負荷の大部分をネットワーク・インタフェース・カードに割り当て、CPUを他のタスクに解放することが可能になります。その結果、SDPによってネットワーク待機時間およびCPUの利用率を軽減させることができます。

SDPは特にSAN(System Area Network)向けに設計されています。SANは、複数のサーバー・システム間(Oracle Application Server(OracleAS)やその他のサード・パーティの1つのスイッチにクラスタ化された中間層クライアントとデータベース・サーバーなど)の短距離の高性能通信という点に特徴があります。

この項では、中間層とデータベース・サーバー通信のためのSDPをサポートするOracle Netの設定方法について説明します。この項で説明する項目は、次のとおりです。

SDPプロトコル・サポート利用の前提

SDPプロトコルのサポートを構成する前に、Webアプリケーション・サーバーおよびデータベース・サーバーの両方に必要なハードウェアをインストールし、所定のベンダーのInfiniband対応ハードウェアおよびソフトウェアを設定します。

Infinibandハードウェアのインストールは、SDPプロトコル・サポートのOracle Database 10gサーバーまたはOracle Database 10gクライアントのインストールを行う前でもその後でもかまいません。ハードウェアのインストールをOracleのインストールの後に行う場合は、次の手順で行います。

  1. Oracle Universal Installerを再実行します。

  2. 「使用可能な製品コンポーネント」ページで、「Oracle Database 10g Server」または「Oracle Database 10g Client」を選択します。

  3. 「インストール・タイプ」ページで、「カスタム」を選択します。

  4. 「使用可能な製品コンポーネント」ページで「Oracle Net Services」のみを選択します。

サーバー側の構成

データベース・サーバーを構成するには、データベース・サーバー上のlistener.oraファイルでSDPプロトコル・アドレスを構成します。

次の例は、コンピュータsales-serverにポート番号1521を使用するSDPエンドポイントを示したものです。

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=sdp)(HOST=sales-server)(PORT=1521))
      (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))

関連項目

「リスナー・プロトコル・アドレスのリスト作成」 

クライアント側の構成

OracleASサーバーまたはサード・パーティ中間層クライアントを構成するには、次のように行います。

  1. サード・パーティ中間層クライアントを構成する場合は、Oracle Database 10g Clientソフトウェアを使用するようにクライアントをアップグレードします。Oracle Universal Installerの「使用可能な製品コンポーネント」ページで、「Oracle Database 10g Client」を選択します。

  2. OracleASサーバーとサード・パーティ中間層クライアントの両方にネット・サービス名を作成し、データベース・サーバーに接続します。

権限のないユーザーによるリソース使用を制限するためのリスナーおよびOracleデータベースの構成

リスナーあるいはデータベース・サーバーへの権限のないアクセスにより、DoS攻撃を受ける可能性があります。この攻撃では、権限のないクライアントが、権限のあるユーザーがシステムにアクセスして使用するのをブロックしようとします。悪意のあるクライアントが、コネクション、プロセスあるいはスレッドなどのリソースを単に消費させる目的で、リスナーやデータベース・サーバーに過剰な接続要求を出す場合があります。この種の攻撃を軽減するには、認証の前にリソースを保持できる時間の制限を構成します。構成した制限を超えようとするクライアントは接続終了となり、クライアントのIPアドレスを含む監査証跡がロギングされます。

権限のないユーザーによるリソース使用を制限して監査証跡を使用可能にするには、表14-1で説明するパラメータに制限時間の値を設定します。これらのパラメータにはデフォルト値はありません。

表 14-1    接続タイムアウト・パラメータ 
パラメータ  説明 

listener.oraINBOUND_CONNECT_TIMEOUT_listener_name 

ネットワーク接続が確立した後、クライアントがリスナーへの接続要求を完了する時間を秒単位で指定します。

リスナーは、指定した時間内にクライアント要求を受信しない場合、接続を終了します。さらに、クライアントのIPアドレスとエラー・メッセージ「ORA-12525: TNS: リスナーは、クライアントの要求を許容時間内に受信しませんでした。」listener.logファイルにロギングします。

関連項目:

 

データベース・サーバー上のsqlnet.oraSQLNET.INBOUND_CONNECT_TIMEOUTパラメータ 

クライアントがデータベース・サーバーに接続して必要な認証情報を提供する時間を、秒単位で指定します。

クライアントが指定の時間内に接続を確立し、認証を完了するのに失敗した場合、データベース・サーバーは接続を終了します。また、データベース・サーバーはクライアントのIPアドレスとエラー・メッセージ「ORA-12170: TNS: 接続タイムアウトが発生しました。」をsqlnet.logファイルにロギングします。クライアントは「ORA-12547: TNS: 接続を失いました。」または「ORA-12637: パケット受信に失敗しました。」のいずれかのエラー・メッセージを受け取ります。

関連項目:

 

これらのパラメータの値を指定する場合、次の推奨事項を考慮してください。

たとえば、INBOUND_CONNECT_TIMEOUT_listener_nameパラメータを2秒に設定し、INBOUND_CONNECT_TIMEOUTパラメータを3秒に設定します。特定の環境におけるシステムあるいはネットワークの通常の遅延により、クライアントが指定の時間内に接続を完了できない場合は、必要なだけ時間を増やします。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引