14 パフォーマンスの最適化
接続パフォーマンスの最適化方法を学習します。
14.1 ネットワーク・データの圧縮化の利点の理解
ネットワーク・データを圧縮することにより、データ接続を介して送信されるセッション・データ・ユニット(SDU)のサイズが少なくなります。データのサイズが小さくなると、ネットワークを介してSQL問合せおよび結果を送信するのに必要な時間が短縮します。また、圧縮されたデータでは、使用する帯域幅が少なくて済むため、大量のデータを短時間で送信できます。データ圧縮プロセスは、アプリケーション・レイヤーに対して透過的です。
データ圧縮を使用する利点は、次のとおりです。
-
ネットワーク・スループットが向上するため、制約された帯域幅の環境でも圧縮を利用することで、問合せの応答時間を短縮できます。
-
帯域幅の使用が減るため、他のアプリケーションで帯域幅を使用できます。
-
サイト間で送信されるデータ量が減ります。
14.2 セッション・データ・ユニットの構成
通常のデータベースの構成では、Oracle Netはデータをネットワークへ送出する前にカプセル化して、SDUのサイズでバッファに格納します。Oracle Netがそれぞれのバッファを送信するのは、バッファがいっぱいになったとき、フラッシュされたとき、またはアプリケーションがデータの読取りを試行したときです。任意のある時点で送信するためにOracle Netに送られるデータ量を基準にSDUバッファのサイズを調整すると、パフォーマンス、ネットワーク使用率およびメモリー消費を改善できます。大量のデータを転送するときは、SDUのサイズを大きくすることによって、パフォーマンスおよびネットワークのスループットを改善できます。特定のデプロイメントで高いスループットを達成できるようにSDUを調整できます。
任意のある時点で送信するためにOracle Netに送られるデータの量は、メッセージ・サイズとも呼ばれます。
設定できるSDUサイズの範囲は、512-22MBです。サイズの範囲が広いため、ネットワーク管理者は、特定のデプロイメントで最適なネットワーク・パフォーマンスを発揮できるように、SDUのサイズをチューニングできます。SDUサイズの値を大きくすると、多くのメモリーが必要になります。クライアントおよび専用サーバーのデフォルトのSDUのサイズは8192バイトです。共有サーバーのデフォルトのSDUのサイズは65535バイトになります。
使用される実際の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サイズ制限は、これらのバルク・データ転送には適用されません。バルク・データ転送最適化は、ASOオプションが有効な場合やTLSトランスポートが使用されている場合には適用されません。
14.2.1 データベースのSDUサイズの設定
データベース・サーバーのSDUサイズを構成するには、次のファイルを構成します。
-
sqlnet.ora
次のように、
sqlnet.ora
ファイルでDEFAULT_SDU_SIZEパラメータを構成します。DEFAULT_SDU_SIZE=32767
-
初期化パラメータ・ファイル
共有サーバー・プロセスを使用している場合、SDUのサイズを初期化パラメータ・ファイルのDISPATCHERSパラメータで次のように設定します。
DISPATCHERS="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp))(SDU=8192))"
-
listener.ora
listener.ora
ファイルのターゲットのリストを使用してリスナーを構成した場合は、専用サーバー・プロセスを使用する際に、sqlnet.ora
ファイルの現在の設定がSID_LISTパラメータのSDUの値で上書きされます。
14.2.2 クライアントのSDUサイズの設定
クラインとのSDUサイズを構成するには、次のファイルを構成します。
-
sqlnet.ora
クライアント側のグローバル構成用に、次のように、
sqlnet.ora
ファイルでDEFAULT_SDU_SIZEパラメータを構成します。DEFAULT_SDU_SIZE=32767
-
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プロトコルに適用されます。
14.3 帯域幅遅延積の求め方
帯域幅遅延積は、ネットワーク帯域幅とネットワークを通過するデータの往復時間の積です。往復時間を簡単に求めるには、ホストから相手のコンピュータに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_SIZEとRECV_BUF_SIZEパラメータを帯域幅遅延積以上の値に設定すると、ネットワーク帯域幅を最適に利用できるように、大量のデータが送信されます。
前の式を基にすると、このネットワーク・リンクの帯域幅遅延積は、約64KBになります。プライマリ・データベースとスタンバイ・データベースの間のREDOデータの転送に使用される最大のメッセージが1MBの場合、SEND_BUF_SIZEおよびRECV_BUF_SIZEパラメータの値は1MBになります。しかし、平均のメッセージがこれより小さい場合は、利用可能な帯域幅を最適に使用するには、64KBに設定すれば十分です。
ほとんどのネットワーク・プロトコルにおいて、一方のネットワーク接続(通常クライアント)のRECV_BUF_SIZEパラメータが、もう一方のネットワーク接続(通常サーバー)のSEND_BUF_SIZEパラメータの値と同一である必要があります。
関連項目:
メッセージ・サイズの決定の詳細は、「統計に関する出力例」を参照してください
14.4 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パラメータの値は一致する必要はありませんが、環境に従って設定する必要があります。
最適なパフォーマンスを確保するには、ネットワーク接続で同時に送信されるすべてのデータを格納するのに十分な送受信バッファ・サイズを設定する必要があります。ネットワーク・パフォーマンスを最適にするには、これらのバッファを少なくとも帯域遅延積に設定してください。
これらの値は、ネットワークおよびシステムの性能に大きな影響を与えるので、慎重に使用してください。これらのパラメータのデフォルト値は、オペレーティング・システムによって異なります。Linuxオペレーティング・システムのデフォルトのデフォルト値は、次のとおりです。
-
SEND_BUF_SIZE: 131,072バイト(128k)
-
RECV_BUF_SIZE: 174,700バイト
これらのパラメータは、SSL付きTCP、TCP/IPおよびSDPでサポートされています。オペレーティング・システムによっては、これ以外のプロトコルがこれらのパラメータをサポートしていることがあります。これらのパラメータの推奨値は、インストレーション・ガイドで指定されています。詳細は、オペレーティング・システムに関するドキュメントを参照してください。
ノート:
-
SEND_BUF_SIZEおよびRECV_BUF_SIZEパラメータの実際の値は、ホストのオペレーティング・システム上の制限やメモリーの制約によって、指定した値より小さくなる場合があります。
-
システムでサポートする必要がある同時接続の総数と、利用可能なメモリー・リソースを検討することが重要です。これらの接続によって消費される総メモリー容量は、同時接続数と各接続のバッファ・サイズに依存します。
関連項目:
OCI_PREFETCH_MEMORYパラメータの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。
14.4.1 サーバー上の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)))
前述の例には複数のアドレスが含まれていますが、ADDRESS_LIST
パラメータは使用されていません。これは、ADDRESS_LIST
パラメータは必須ではないためです。
sqlnet.ora
ファイルでの設定の例を次に示します。
RECV_BUF_SIZE=65536 SEND_BUF_SIZE=65536
14.4.2 クライアント上の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)))
14.5 InfiniBand接続をサポートするSDPの構成
Oracle Net Servicesでは、InfiniBand高速ネットワークのSockets Direct Protocol(SDP)をサポートしています。
SDPは、クラスタ化されたサーバー環境における標準的な通信プロトコルです。SDPは、ネットワーク・インタフェース・カードとアプリケーション間のインタフェースの役割を果します。SDPを使用することにより、アプリケーションではメッセージ交換の負荷の大部分をネットワーク・インタフェース・カードに割り当て、CPUを他のタスクに解放することが可能になります。その結果、SDPによってネットワーク待機時間およびCPUの利用率を軽減できます。
SDPは特にSAN(System Area Network)向けに設計されています。SANは、複数のサーバー・システム間(Oracle WebLogic Serverやその他のサード・パーティの1つのスイッチでクラスタ化された中間層クライアントとデータベース・サーバーなど)の短距離の高性能通信という点に特徴があります。
ノート:
Oracle Database 12cとのバージョン互換性については、各ベンダーにお問い合せください。
SDPサポートの詳細は、次の場所でOracle Technology Networkを参照してください。
次の項では、中間層とデータベース・サーバー通信のためのSDPをサポートするOracle Netの設定方法について説明します。次の項目が含まれます。
関連項目:
サポート対象となっているデプロイメントの概要は、「パフォーマンスの理解」を参照してください
14.5.1 SDP利用の前提
SDPのサポートを構成する前に、アプリケーションWebサーバーおよびデータベース・サーバーの両方に必要なハードウェアをインストールし、所定のベンダーのOpenFabrics Enterprise Distribution (OFED) 1.4または1.5と互換性のあるInfiniBand対応ハードウェアおよびソフトウェアを設定します。
InfiniBandソフトウェアのインストール時に、システムのSDPまたはアドレス・ファミリを定義する定数を識別します。この定数は、使用しているオペレーティング・システムまたはOFEDのマニュアルから取得できます。
関連項目:
インストールの詳細は、ベンダーのドキュメントを参照してください。
14.5.2 サーバー上の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))))
関連項目:
14.5.3 クライアント上のSDPの構成
ノート:
SDPまたはアドレス・プロトコル・ファミリの定数が、Oracle Net Servicesのデフォルト値である27ではない場合、sqlnet.ora
ファイルのSDP.PF_INET_SDPパラメータに定数を定義してください。
次の手順では、Oracle WebLogic Serverサーバーまたはサード・パーティ中間層クライアントを構成する方法について説明します。
-
サード・パーティ中間層クライアントを構成する場合は、次に示すように、Oracle Database 12cクライアント・ソフトウェアを使用するようにクライアントをアップグレードします。
-
Oracle Universal Installerを実行します。
-
「使用可能な製品」ページで、「Oracle Database 12c Client」を選択します。
-
-
Oracle WebLogic Serverサーバーとサード・パーティ中間層クライアントの両方に、次のようにネットワーク・サービス名を作成し、データベース・サーバーに接続します。
-
Oracle WebLogic 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)))
関連項目:
接続記述子作成の詳細は、「ネーミング・メソッドの構成」を参照してください
-
14.6 InfiniBand接続をサポートするExadirectの構成
Oracle Net Servicesでは、InfiniBand高速ネットワークのためのExadirectをサポートします。インフィニバンド環境では、Remote Direct Memory Access (RDMA)の活用によって待機時間とスループットが向上する新しいトランスポートを使用してください。
Exadirectプロトコルは、通信の制御にTCPを使用し、データにIB RCトランスポートを使用します。このリリースでは、Exadirectプロトコル・アダプタはOracle SolarisとOracle Linuxでのみサポートされます。
次の各項では、中間層とデータベース・サーバー通信のためのExadirectをサポートするOracle Netの設定方法について説明します。次の項目が含まれます。
ノート:
Oracle Database 12c リリース2 (12.2)では、Exadirectは単一Exadirectエンドポイント構成をサポートします。DRCPはサポートしていません。14.6.1 Exadirectを使用するための前提条件
14.6.2 サーバー上のExadirectの構成
データベース・サーバーを構成するには、データベース・サーバー上のlistener.ora
ファイルでExadirectアドレスを構成します。
listener.ora
ファイルでenable_exadirect_listener_name=on
パラメータを構成します。
次の例は、192.168.10.1
のIBインタフェースを装備したコンピュータ上のポート番号1522
を使用するExadirectエンドポイントを示しています。
LISTENER
=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=exadirect)(HOST=192.168.10.1)(PORT=1522))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
ENABLE_EXADIRECT_LISTENER=on
ノート:
Exadirectフロー制御を有効にするには、sqlnet.ora
ファイルでexadirect_flow_control=on
を設定します。これは、ネゴシエート・パラメータであり、サーバーとクライアントの両方のsqlnet.ora
ファイルで設定されている必要があります。
14.6.3 クライアント上のExadirectの構成
tnsnames.ora
ファイルで構成されたものと同じExadirectアドレスを使用するネットワーク・サービス名を指定します。
sqlnet.ora
ファイルのexadirect_flow_control=on
を設定することで有効にします。
(DESCRIPTION=
(ADDRESS=(PROTOCOL=exadirect)(HOST=192.168.10.1)(port=1522))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.example.com)))
14.7 権限のないユーザーによるリソース使用の制限
リスナーまたはデータベース・サーバーへの権限のないアクセスにより、サービス拒否攻撃を受ける可能性があります。この攻撃は、権限のあるユーザーがシステムにアクセスして使用する機能を、権限のないクライアントがブロックしようとします。悪意のあるクライアントが、接続、プロセスまたはスレッドなどのリソースを単に消費する目的で、リスナーやデータベース・サーバーに過剰な接続要求を送信する場合があります。この種の攻撃を軽減するには、認証の前にリソースを保持できる時間の制限を構成します。構成された制限を超えようとするクライアントは接続が終了し、クライアントのIPアドレスを含む監査証跡がロギングされます。
権限のないユーザーによるリソース使用を制限して監査証跡を使用可能にするには、表14-1で説明するパラメータに制限時間の値を設定します。これらのパラメータにはデフォルト値はありません。
表14-1 接続タイムアウト・パラメータ
パラメータ | ファイル | 説明 |
---|---|---|
INBOUND_CONNECT_TIMEOUT_listener_name |
|
ネットワーク接続が確立した後、クライアントがリスナーへの接続要求を完了する時間を秒単位で指定します。 リスナーが指定の時間内にクライアント・リクエストを受信しない場合、接続は終了します。また、リスナーでは、クライアントのIPアドレスおよび「ORA-12525:TNS: TNS: リスナーは、クライアントのリクエストを許容時間内に受信しませんでした」のエラー・メッセージが |
データベース・サーバー上の |
クライアントがデータベース・サーバーに接続して必要な認証情報を提供する時間を、秒単位で指定します。 クライアントが指定した時間内での接続の確立と認証の完了に失敗した場合、データベース・サーバーは接続を終了します。また、データベース・サーバーでは、クライアントのIPアドレスおよび「ORA-12170: TNS: 接続タイムアウトが発生しました」のエラー・メッセージが |
これらのパラメータの値を指定する場合、次の推奨事項を考慮してください。
-
両方のパラメータの初期値を低く設定してください。
-
INBOUND_CONNECT_TIMEOUT_listener_nameパラメータの値を、SQLNET.INBOUND_CONNECT_TIMEOUTパラメータの値より低く設定してください。
たとえば、INBOUND_CONNECT_TIMEOUT_listener_nameパラメータを2秒に設定し、SQLNET.INBOUND_CONNECT_TIMEOUTパラメータを3秒に設定します。特定の環境におけるシステムあるいはネットワークの通常の遅延により、クライアントが指定の時間内に接続を完了できない場合は、必要なだけ時間を増やします。
関連項目:
-
エラー・メッセージの対処については、「Oracle Net Servicesの最も一般的なエラー・メッセージの解決」を参照してください
-
listener.log
ファイル内のエントリの詳細は、「リスナー・ログ・ファイルの分析」を参照してください -
これらのパラメータの設定方法の詳細は、「プロファイルの詳細情報について」を参照してください
14.8 データ依存型ルーティングについて
シャーディングは、独立した複数のOracleデータベースの水平方向のパーティション化を可能するもので、シャードとも呼ばれ、接続文字列で指定されたキーに基づいて、データベース要求を特定のシャードにルーティングします。
ルーティングはセッション・レベルで行われ、接続文字列で指定されているシャーディング・キーに基づきます。データ依存型ルーティングでは、1つのセッション内で発行されたすべてのデータベース要求が、指定されたキー値と関連付けられているデータと関連があることが前提とされます。クライアントは、異なる値のキーを持つデータにアクセスする必要がある場合、新しいデータベース・セッションを確立させるか、そのシャーディング・キーにマッピングされる確立済の接続を再利用します。シャード・ディレクタ(グローバル・サービス・マネージャ)や接続プールなど、データベース要求のルーティングを担当するすべてのコンポーネントには、キーの値の範囲を適切なデータを格納しているシャードにマッピングするルーティング・テーブルが含まれます。これらすべてのコンポーネント間のルーティング表の整合性が、Oracle Shardingにより自動的に維持されます。
14.8.1 クライアント/サーバー接続のためのデータ依存型ルーティングの構成
これには、接続要求プロセスの1度のリダイレクトが含まれます。
CONNECT_DATA
セクションに(SHARDING_KEY=…)
または(SHARDING_KEY=…) (SUPER_SHARDING_KEY=...)
が含まれている必要があります。接続文字列は、グローバル・サービスへの接続で要求される形式になっている必要があります。シャード・ディレクタをエンドポイントとして指定し、SUPER_SHARDING_KEY
またはSHARDING_KEY
(あるいはその両方)に加えて、CONNECT_DATA
内で、グローバル・サービス名とリージョン名を使用する必要があります。
- 接続は、いずれかのシャード・ディレクタと確立されます。
- そのシャード・ディレクタが、サービスとキー値の検索を実行し、クライアントをデータの格納されているシャードへとリダイレクトします。
(DESCRIPTION=
(FAILOVER=on)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(host=sales-east1)(port=1522))
(ADDRESS=(host=sales-east2)(port=1522))
(ADDRESS=(host=sales-east3)(port=1522)))
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(host=sales-west1)(port=1522))
(ADDRESS=(host=sales-west2)(port=1522))
(ADDRESS=(host=sales-west3)(port=1522)))
(CONNECT_DATA=
(SERVICE_NAME=sales)
(SHARDING_KEY=40598230) (SUPER_SHARDING_KEY=gold)
(REGION=east)))