プライマリ・コンテンツに移動
Oracle® Database Net Services管理者ガイド
11gリリース2 (11.2)
B56288-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

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

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

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

設定できるSDUサイズの範囲は、512-65535バイトです。クライアントおよび専用サーバーのデフォルトのSDUは8192バイトです。共有サーバーのデフォルトのSDUは65535バイトになります。

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

メッセージの大半が8192バイトより小さい場合または大きい場合は、SDUサイズを変更することを検討する必要があります。SDUサイズは、最も多いメッセージのサイズより70バイトのみ大きい値にします。70バイトを加えると最大SDUサイズを超える場合は、メッセージ・サイズを最小限の数に等分割し、各分割がSDUサイズより70バイト少なくなるようにSDUを設定します。デフォルトを変更するには、sqlnet.oraファイルでDEFAULT_SDU_SIZEパラメータを変更します。

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


注意:

Oracle Database 11g以降、Oracle Net Servicesでは、バルク・データ転送がOracle SecureFiles LOBやOracle Data Guard REDOトランスポート・サービスなどのコンポーネント用に最適化されました。ネットワーク・パラメータ・ファイルで指定されているSDUサイズ制限は、これらのバルク・データ転送には適用されません。

データベースのSDUサイズの設定

データベース・サーバーのSDUサイズを構成するには、次のファイルを構成します。

  • sqlnet.ora

    sqlnet.oraファイルでDEFAULT_SDU_SIZEパラメータを次のように設定します。

    DEFAULT_SDU_SIZE=8192
    
  • 初期化パラメータ・ファイル

    共有サーバー・プロセスを使用している場合、SDUのサイズを初期化パラメータ・ファイルのDISPATCHERSパラメータで次のように設定します。

    DISPATCHERS="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp))(SDU=8192))"
    
  • listener.ora

    listener.oraファイルのターゲットのリストを使用してリスナーを構成した場合は、専用サーバー・プロセスを使用する際に、sqlnet.oraファイルの現在の設定がSID_LIST要素のSDUの値で上書きされます。

    SID_LIST_listener_name=
      (SID_LIST= 
        (SID_DESC=
         (SDU=8192)
         (SID_NAME=sales)))
    

    小さい方のSDUサイズとクライアント向けに構成されている値が優先されます。

クライアントのSDUサイズの設定

クラインとのSDUサイズを構成するには、次のファイルを構成します。

  • sqlnet.ora

    クライアント側のグローバル構成を行うには、sqlnet.oraファイルのDEFAULT_SDU_SIZEパラメータを次のように設定します。

    DEFAULT_SDU_SIZE=8192
    
  • tnsnames.ora

    特定の接続記述子では、DESCRIPTIONパラメータでSDUパラメータを指定できます。

    sales.us.example.com=
    (DESCRIPTION= 
        (SDU=11280) 
          (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
        (CONNECT_DATA=
         (SERVICE_NAME=sales.us.example.com))
    ) 
    

SDUサイズは、特定の接続記述子のすべてのOracle Netプロトコルに適用されます。

帯域幅遅延積の求め方

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

たとえば、ネットワークの帯域幅が100Mbpsで、往復時間が5msの場合、送受信バッファは少なくとも(100*10^6)*(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_SIZERECV_BUF_SIZEを帯域幅遅延積以上の値に設定すると、ネットワーク帯域幅を最適に利用できるように、大量のデータが送信されます。

前の式を基にすると、このネットワーク・リンクの帯域幅遅延積は、約64KBになります。プライマリ・データベースとスタンバイ・データベースの間のREDOデータの転送に使用される最大のメッセージが1MBの場合、SEND_BUF_SIZEおよびRECV_BUF_SIZEパラメータの値は1MBになります。しかし、平均のメッセージがこれより小さい場合は、利用可能な帯域幅を最適に使用するには、64KBに設定すれば十分です。


関連項目:

メッセージ・サイズの決定の詳細は、「統計に関する出力例」を参照してください。

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

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

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

RECV_BUF_SIZEおよびSEND_BUF_SIZEパラメータでは、Oracle Net接続に関連付けられるソケット・バッファのサイズを指定します。連続的なデータの流れを確保し、ネットワーク帯域幅の利用率を改善するには、RECV_BUF_SIZEおよびSEND_BUF_SIZEパラメータで、セッションの送受信操作に使用するI/Oバッファ・スペースの制限値を指定します。RECV_BUF_SIZEおよびSEND_BUF_SIZEパラメータの値は一致する必要はありませんが、環境に従って設定する必要があります。

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

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

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


注意:

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

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



関連項目:

OCI_PREFETCH_MEMORYパラメータの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

クライアント上のI/Oバッファ・スペースの構成

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

  • 通常は、RECV_BUF_SIZEパラメータを設定すれば十分機能します。しかし、クライアントが大きなサイズの要求を送信する場合は、SEND_BUF_SIZEパラメータも設定します。これらのパラメータは、クライアントのsqlnet.oraファイルで設定します。

  • 特定の接続記述子では、クライアントのsqlnet.oraファイルの現在の設定値を上書きできます。tnsnames.oraファイルでは、次のようにして、特定のプロトコル・アドレスまたは記述子のバッファ・スペース・パラメータを指定できます。

    sales.us.example.com=
     (DESCRIPTION= 
       (ADDRESS_LIST=
         (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)
            (SEND_BUF_SIZE=11784)
            (RECV_BUF_SIZE=11784))
         (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)
            (SEND_BUF_SIZE=11784)
            (RECV_BUF_SIZE=11784))
       (CONNECT_DATA=
         (SERVICE_NAME=sales.us.example.com)))
    hr.us.example.com=
     (DESCRIPTION= 
       (SEND_BUF_SIZE=8192)
       (RECV_BUF_SIZE=8192)
         (ADDRESS=(PROTOCOL=tcp)(HOST=hr1-server)(PORT=1521))
       (CONNECT_DATA=
         (SERVICE_NAME=hr.us.example.com)))
    

サーバー上のI/Oバッファ・サイズの構成

データベース・サーバーはデータをクライアントに書き込むため、通常はサーバー側でSEND_BUF_SIZEパラメータを設定してください。データベース・サーバーが大量の要求を受信する場合、RECV_BUF_SIZEパラメータも設定します。データベース・サーバーを構成するには、listener.oraおよびsqlnet.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=8192)
(RECV_BUF_SIZE=16384)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)))

sqlnet.oraファイルでの設定の例を次に示します。

RECV_BUF_SIZE=65536
SEND_BUF_SIZE=65536

共有サーバー・プロセスのバッファ・サイズ・パラメータの設定

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

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

InfiniBand接続をサポートするSDPの構成

Oracle Net Servicesでは、InfiniBand高速ネットワークのSockets Direct Protocol(SDP)をサポートしています。

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

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


注意:

Oracle Database 11gとのバージョン互換性については、各ベンダーにお問い合せください。

SDPサポートの詳細は、次のURLでOracle Technology Networkを参照してください。

http://www.oracle.com/technetwork


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


関連項目:

サポート対象となっているデプロイメントの概要については、「パフォーマンスの理解」を参照してください。

SDP利用の前提

SDPのサポートを構成する前に、アプリケーションWebサーバーおよびデータベース・サーバーの両方に必要なハードウェアをインストールし、所定のベンダーのOpenFabrics Enterprise Distribution(OFED)1.4と互換性のあるInfiniBand対応ハードウェアおよびソフトウェアを設定します。

InfiniBandソフトウェアのインストール時に、システムのSDPまたはアドレス・ファミリを定義する定数を識別します。この定数は、使用しているオペレーティング・システムまたはOFEDのマニュアルから取得できます。


関連項目:

インストール情報に関するベンダーのマニュアル

サーバー上のSDPの構成

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


注意:

SDPまたはアドレス・プロトコル・ファミリの定数が、Oracle Net Servicesのデフォルト値である27ではない場合、sqlnet.oraファイルのSDP.PF_INET_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))))

クライアント上のSDPの構成


注意:

SDPまたはアドレス・プロトコル・ファミリの定数が、Oracle Net Servicesのデフォルト値である27ではない場合、sqlnet.oraファイルのSDP.PF_INET_SDPパラメータに定数を定義してください。

Oracle Application Serverサーバーまたはサード・パーティ中間層クライアントを構成する手順は、次のとおりです。

  1. サード・パーティ中間層クライアントを構成する場合は、次に示すように、Oracle Database 11g Clientソフトウェアを使用するようにクライアントをアップグレードします。

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

    2. 「使用可能な製品」ページで、「Oracle Database 11g Client」を選択します。

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

    • Oracle Application Serverサーバー向けにtnsnames.oraファイルで設定した同じTCP/IPプロトコル・アドレスを使用するネット・サービス名を指定します。たとえば、次のように指定します。

      sales=
       (DESCRIPTION=
         (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)))
         (CONNECT_DATA=
           (SERVICE_NAME=sales.us.example.com)))
      
    • サード・パーティ中間層クライアント向けにtnsnames.oraファイルで設定した同じSDPアドレスを使用するネット・サービス名を指定します。

      たとえば、次のように指定します。

      sales=
       (DESCRIPTION=
         (ADDRESS=(PROTOCOL=sdp)(HOST=sales-server)))
         (CONNECT_DATA=
           (SERVICE_NAME=sales.us.example.com)))
      

      関連項目:

      接続記述子作成の詳細は、第8章「ネーミング・メソッドの構成」を参照してください。

権限のないユーザーによるリソース使用の制限

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

権限のないユーザーによるリソース使用を制限して監査証跡を使用可能にするには、表14-1で説明するパラメータに制限時間の値を設定します。

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

パラメータ ファイル 説明

INBOUND_CONNECT_TIMEOUT_listener_name

listener.ora

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

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

SQLNET.INBOUND_CONNECT_TIMEOUT

データベース・サーバー上のsqlnet.ora

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

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


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

  • 両方のパラメータの初期値を低く設定してください。

  • INBOUND_CONNECT_TIMEOUT_listener_nameパラメータの値を、SQLNET.INBOUND_CONNECT_TIMEOUTパラメータよりも低い値に設定してください。

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


関連項目: