View
6
Download
0
Category
Preview:
Citation preview
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. |
Oracle Net Services 12cデータベースのパフォーマンスとスケーラビリティのベスト・プラクティス
Oracle NetディレクターKant C Patel
プログラムのアジェンダ
• Oracle Netの概要– Oracle Netを最適化する理由
• ベスト・プラクティス– Database Client– ListenerおよびConnection Manager– Database Server
• Q/A
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 3
Oracle Netの概要
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 4
• Oracle DBのプライマリ通信基盤
• 別名:SQL*Net• ネットワーク機能のOracleファミリー
– Oracle Net– Oracle Net Listener– Connection Manager–構成ツール
Oracle Netを最適化する理由
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 5
• 高可用性
– データベース/ホスト/ネットワークの障害への迅速な対応
• ネットワークのスケーラビリティとパフォーマンス
– より多くのクライアントを接続できる優れたスケーラビリティ
– ロードバランシングによるアプリケーション体験の向上
– ネットワーク帯域幅の利用効率の向上
– データベースのCPU使用率の軽減
• ネットワーク・セキュリティ
– DoS攻撃からの防御とリカバリ
Net構成ファイル
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 6
• sqlnet.ora– メインのOracle Net構成ファイル
– クライアントとサーバーの両方
• listener.ora– Net Listenerの構成ファイル
– サーバーのみ
• tnsnames.ora– 記述子のマッピングに対する接続名を含む
– TNSNamesネーミング・アダプタによって使用
– クライアントとサーバーの両方
• ldap.ora– LDAPの構成情報を含む
– LDAPネーミング・アダプタによって使用
– クライアントとサーバーの両方
プログラムのアジェンダ
• Oracle Netの概要– Oracle Netを最適化する理由
• ベスト・プラクティス– Database Client– ListenerおよびConnection
Manager– Database Server
• Q/A
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 7
BDP = (40 × 1000 ÷ 8 Kbytes/秒) × (0.025秒) ~ 128 Kbytes
ソケット・バッファのチューニング
BDPとは
• 帯域幅 x 遅延製品(BDP)– 任意の時点における“有線”上のデータ量
– デフォルトのオペレーティング・システム・バッファは、有線を満たすための十分なデータを保持しない
– 例:
40 Mbps、25ミリ秒の遅延HQオースティンのデータセンター
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 8
ソケット・バッファのチューニング
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 9
• 以下を使用して送信および受信ソケット・バッファ・サイズを設定
– SEND_BUF_SIZE – OS送信バッファ・サイズ
– RECV_BUF_SIZE – OS受信バッファ・サイズ
• BDPに対応するようにこのサイズを設定(2倍)
• サーバーとクライアントの両方で設定
• バッファ・サイズが大きいと以下に役立つ
– アプリケーションがより多くのデータをOSにキューイング
– より多くのデータを有線上に保持
– 使用可能な帯域幅を有効利用
– WANデプロイメントで有用
構成場所
クライアント:sqlnet.oraおよび/またはtnsnames.ora、またはLDAP
サーバー:sqlnet.oraおよびlistener.ora
セッション・データ・ユニットのチューニング
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 10
• SQL*Netパケット・サイズの制御
– デフォルト:8 K– 最大:2 MB(12c)、64 K(11.2)、32 K(11.2以前)
• 以下で設定
– sqlnet.ora:DEFAULT_SDU_SIZE– tnsnames.ora:アドレスのSDU
• SDUを大きく設定するメリット
– ネットワーク・スループットの向上
– データを送受信するためのシステム呼び出し数の低減
– CPU使用率の低減 – システムおよびユーザー
• SDUを大きく設定するデメリットネットワーク・バッファがより多くのメモリを使用
構成場所
クライアント:sqlnet.oraおよび/またはtnsnames.ora、またはLDAP
サーバー:sqlnet.ora
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. |
SDUの推奨事項• 最適なSDUはアプリケーションごとに異なる
• SDUをクライアントとサーバーの両方で増加– より低い2つのピアにネゴシエートされた接続向けのSDU
• SDUを8 Kに増加(11g以前のクライアント)– 大半のユーザー向けの適切なデフォルト値
• データの一括送信では、64 Kに増加– 大規模な配列のフェッチ
– LOBの送信
– XML DB
• MTU値には設定しない– SDUとMTUは互いに依存しない
アプリケーションの接続時フェイルオーバー
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 12
Oracle Netのタイムアウト
• 接続確立のタイムアウト
– TCP接続確立のタイムアウト
• TCP.CONNECT_TIMEOUT• 11gR2以降はデフォルトで60秒に設定され有効化
– DBサーバー・プロセスへの接続のタイムアウト• SQLNET.OUTBOUND_CONNECT_TIMEOUT• セッションの確立に時間がかかる場合に設定
• 接続文字列レベルで構成
• 個々に使用することも、同時に使用することも可能
– アウトバウンド接続のタイムアウトはTCPのタイムアウトよりも大きくなければならない
• 接続の再試行と再試行の遅延を可能にするオプション
構成場所
クライアント:sqlnet.oraおよび/またはtnsnames.ora、またはLDAP
sales-scan:10240/sales
は以下と同等
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)
(HOST=10.1.1.1)(PORT=10240))
(ADDRESS=(PROTOCOL=tcp)
(HOST=10.1.1.2)(PORT=10240))
(ADDRESS=(PROTOCOL=tcp)
(HOST=10.1.1.3)(PORT=10240)))
(CONNECT_DATA=
(SERVICE_NAME=sales)))
Single Client Access Name(SCAN)簡易接続 + アドレス・リスト
– 11gR2以降で利用可能
– クライアントがクラスタのOracle Databaseにアクセスするための単一名
– Grid Infrastructureのインストール中に構成
– 通常は、それぞれがSCANリスナーに関連付けられているクラスタ内の3つのIPアドレスに解決される
たとえば、DNSによりsales-scanが以下に解決される場合{10.1.1.1, 10.1.1.2, 10.1.1.3}
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 13
接続記述子のSCAN
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 14
sales=
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=
(PROTOCOL=tcp)
(HOST=sales-scan)
(PORT=10240)))
(CONNECT_DATA=
(SERVICE_NAME=sales)))
sales-scan:10.1.1.1, 10.1.1.2, 10.1.1.3
sales=
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=
(PROTOCOL=tcp)
(HOST=10.1.1.1)
(PORT=10240))
(ADDRESS=
(PROTOCOL=tcp)
(HOST=10.1.1.2)
(PORT=10240))
(ADDRESS=
(PROTOCOL=tcp)
(HOST=10.1.1.3)
(PORT=10240)))
(CONNECT_DATA=
(SERVICE_NAME=sales)))
アドレスおよび説明リストを使用したクライアント側フェイルオーバーRAC + Data Guardの例
プライマリ
sales-1
RAC
sales-2
スタンバイ
backup-1
RAC
backup-2
sales-scan=(sales-1,sales-2)
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 15
backup-scan=(backup-1,backup-2)
接続記述子
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 16
(DESCRIPTION_LIST =
(LOAD_BALANCE=off)(FAILOVER=on)
(DESCRIPTION =
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-scan)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=sales.example.com)))
(DESCRIPTION =
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=backup-scan)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=sales.example.com))))
接続記述子は内部で以下に展開
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 17
(DESCRIPTION_LIST =
(LOAD_BALANCE=off)(FAILOVER=on)
(DESCRIPTION =
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-1)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-2)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=sales.example.com)))
(DESCRIPTION =
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=backup-1)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=backup-2)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=sales.example.com))))
接続されたセッションのフェイルオーバー
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 18
• 確立されたクライアント接続は、以下の場合に停止する可能性がある
– データベース・ホストのクラッシュ
– リモート・ネットワークの障害
• そのような障害の検出には時間を要する
– TCP動作 - 数分でタイムアウト
– クライアントが何を行っているかに依存
• そのような障害を捕捉するには、以下を実施
– 受信タイムアウトを設定
• アプリケーションがアクティブであり、長時間実行される問合せを使用しない場合
– 高速アプリケーション通知(FAN)を使用
CON6711:アプリケーション高可用性のベスト・プラクティス2017年10月4日水曜日午後3時30分、Moscone Westルーム3012
構成例 – JDBCアプリ• 接続タイムアウトを以下のプロパティで設定
oracle.net.CONNECT_TIMEOUT
• 読取りタイムアウトを以下で設定
oracle.jdbc.ReadTimeout– 注:問合せタイムアウトとしては使用しない。
• 問合せタイムアウトには以下を使用
Statement.cancelまたは
Statement.setQueryTimeout
• プロパティの設定方法コードで指定
コード例:Properties prop = new Properties(); prop.setProperty("user","scott"); prop.setProperty("password","tiger"); prop.setProperty("oracle.net.CONNECT_TIMEOUT","3000"); prop.setProperty("oracle.jdbc.ReadTimeout","3000"); Conn=(new oracle.jdbc.OracleDriver()).connect(url,prop);
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 19
プログラムのアジェンダ
• Oracle Netの概要
– Oracle Netを最適化する理由
• ベスト・プラクティス
– Database Client– Listenerおよび
Connection Manager– Database Server
• Q/A
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 20
データベース・サービスの可用性とロードバランシング
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 21
Oracle Net Listenerとは
• クライアントが通信する最初のプロセス
• ブローカがクライアント接続を要求すると、サービス・ハンドラに引き渡される
– ディスパッチャ
– 専用サーバー
– 接続ブローカ – DRCP• ロード・アップデートをデータベースから受信
• RACのインスタンス全体でサーバー側ロードバランシングを実行
• RACのノード全体でサーバー側フェイルオーバーを実行
• 複数のエンドポイントまたはプロトコルのアドレスでリスニングが可能
• HTTP、FTPなど、他の表示にも対応
データベース・サービスの可用性とロードバランシング
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 22
Listenerを使用したデータベース登録
• 動的な登録を使用
– LREG(12c以前ではPMON)が以下に関してリスナーを更新
• 提供されるサービスと使用可能なサービス・ハンドラ
• ロード統計情報 – 頻繁に更新
– 構成するには、init.oraで以下を設定
• LOCAL_LISTENER:ローカル・ホストのリスナーのアドレス
• REMOTE_LISTENER:リモート・ホストのリスナーのアドレス
– デフォルト:
• LREGはポート1521でリスナーに接続
• RACで自動的に設定
• listener.oraの静的SID_LIST構成を削除
– リモートでデータベースを起動したい場合のみ維持
構成場所
データベース・パラメータ・ファイル
• 接続ロードバランシングの目標を設定することで動作を変更
– Long – 長時間接続するアプリケーションの場合(デフォルト)
– Short – 短時間接続するアプリケーションの場合
構成場所
サーバー上のsrvctlユーティリティまたはDBMS_SERVICEパッケージを使用
データベース・サービスの可用性とロードバランシング(例)インスタンスの停止
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 23
リスナー・ログオン・ストーム・ハンドラ
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 24
• ログオン・ストーム
– 着信接続要求速度の急上昇
• 正常 – 中間層のリブート
• 異常 – DoS攻撃
– ストームにより、既存のセッションでCPUが長時間停止
• 接続速度リミッター機能を有効化
– スロットルのエンドポイント・レベルの制御を実現LISTENER=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales)(PORT=1521)(RATE_LIMIT=3))
(ADDRESS=(PROTOCOL=tcp)(HOST=lmgmt)(PORT=1522)(RATE_LIMIT=no)))
– リスナー・レベルでグローバルに設定することも可能
– 接続速度の限界をマシンの機能と一致する値に設定
構成場所
サーバー:listener.ora
ログオン・ストームの比較
150の同時接続
RATE_LIMIT = no RATE_LIMI T = 3/秒
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 25
CPU使用率(%
)セッション
時間 時間
その他のベスト・プラクティス
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 26
• リスナー・エンドポイントあたりの最大同時リクエストを増加
– listener.oraのQUEUESIZEパラメータ
– TCPのlisten()バックログを最大化(オペレーティング・システム・パラメータ)
– 求められる接続リクエスト率に設定
• oracleアカウントの環境変数を最適化
– PATHが大きいほど、Oracleプロセスの分散に時間がかかる
• PATHを小さくする
• ネットワーク共有を含めない
– 環境変数の数を減らす
Oracle Connection Manager(Oracle CMAN)
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 27
• Oracleデータベース・サービスを認識したファイアウォール・プロキシ
–完全な透過性:アプリケーションの変更は不要
– RACのリダイレクトを含むデータベース・サブネットをクライアントから隠すために使用可能
–複数テナント環境でネットワークの分離を実現
• すべてのSQL*Netプロトコルとプロトコル変換に対応
– IPv4およびIPv6ネットワーク間のブリッジとして使用可能
• 構成可能なルール・リストに基づき、サービスへのアクセス制御を提供
• 新たなデータベースやサービスが追加された場合に自動更新
Oracle Connection Managerアクセス制御
テナント2
CDB
テナント1 テナント3 テナント4PDB$Seed
ファイアウォール・プロキシとしてのCMAN
Service.tenant 1.pdb
許可されたIP:10.10.*
Service.tenant 3.pdb
許可されたIP:10.14.*
異なるアプリケーション・サーバー
10.10.1.1 10.12.1.1 10.14.1.1 10.16.1.1
1 2 3 4
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 28
プログラムのアジェンダ
• Oracle Netの概要– Oracle Netを最適化する理由
• ベスト・プラクティス– Database Client– ListenerおよびConnection Manager– Database Server
• Q/A
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 29
Oracleサーバー・アーキテクチャの概要
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 30
• 適切なサーバー・アーキテクチャの選択は、スケーラビリティ要件を満たすために不可欠
• Oracle Database Serverでは、3つのアーキテクチャをサポート–専用サーバー(デフォルト)
–共有サーバー(別名:MTS)–データベース常駐接続プール(DRCP)
専用サーバー
• 各クライアント接続は、独自のプロセスを持つ(Windowsのスレッド)
• 専用プロセスによって、短い待機時間を確保
• 接続時に新しいプロセスを起動する必要がある
• 切断時にプロセスを終了する必要がある
• スケーラビリティに関する制限
– メモリ
– プロセス数
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 31
共有サーバー(別名:MTS)
• 各サーバーが複数のクライアントを処理
• ディスパッチャがクライアントとサーバー間のリクエストとレスポンスを中継
• アイドル接続はあまりメモリを消費しない
• アイドル接続が多い多数の接続に適切
• 介在者によって待機時間が増加
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 32
データベース常駐接続プール(DRCP)
• プールされた専用サーバーを、クライアントのシステムおよびプロセスで共有
• 接続/切断コストを削減
–接続時にサーバーを“ロック”
–切断時にサーバーを“解放”
• 専用サーバーの待機時間の短いパフォーマンス
• DRCP対応のクライアント・ドライバによる優れたスケーラビリティ
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 33
専用サーバー、共有サーバー、DRCPの比較
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 34
• 以下の場合は専用サーバーを使用
– 高パフォーマンスな接続
– アクティブで、長時間実行され、データ送信の多いオペレーション
• 以下の場合は共有サーバーを使用
– ある程度の時間、アイドルになる可能性のあるセッション
– 接続と切断が頻繁なクライアント
• 以下の場合はDRCPを使用
– 短時間に数千のクライアントがデータベース・サーバー・セッションにアクセスする必要がある場合
– アプリケーションで、ほぼ同じデータベース資格証明が使用され、同一のセッション設定が行われている場合
– OCI、OCCI、JDBC、PHP(OCI8拡張)、Python(cx_Oracle)、Perl(DBI)
共有サーバーの使用
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 35
• init.oraパラメータを使用して共有サーバーを有効化
– 新たなデフォルトになる
• サーバー・タイプを強制するには、接続中にサーバー・タイプを指定
– 専用サーバー:• sales-server/sales.us.example.com:dedicated
– 共有サーバー:• sales-server/sales.us.example.com:shared
• 大まかなガイドライン:
– 500セッションごとに20の共有サーバーを設定し、それを基にチューニング
– 250セッションごとに1つのディスパッチャ
DRCPの使用
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 36
• プーリングは、DBAが以下を使用して有効化
EXECUTE DBMS_CONNECTION_POOL.START_POOL ('SYS_DEFAULT_CONNECTION_POOL');
• tnsnames.oraで以下のようにクライアントの接続文字列を変更(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=sales)(SERVER=pooled)))
• 簡易接続構文を使用することも可能sqlplus joeuser@sales-server:1521/sales:pooled
• テスト環境において、2 GBのDatabase Server(11g)に対して20000以上の接続をサポートできた実績がある
Database Serverのセキュリティインバウンド接続のタイムアウト
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 37
• クライアントが接続および認証を行う時間を制限
• SQLNET.INBOUND_CONNECT_TIMEOUT– データベース・サーバー・プロセスのタイムアウトを制御
• INBOUND_CONNECT_TIMEOUT_リスナー名
– リスナーのタイムアウトを制御
• デフォルトで60秒に設定され有効化
• クライアント側タイムアウトには依存しない
構成場所
サーバー:sqlnet.oralistener.ora
無効な接続の検出
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 38
• クライアント・ノードの停止を検出するために、サーバーによって使用
– sqlnet.expire_timeを使用して有効化
• レガシーDCD機能はOracle Netプローブ・パケットを使用
– TCP送信障害に依存
– 低速でオーバーヘッドが多い
• 新たなDCD(12c)– TCPキープアライブに依存
– 無効なクライアントを効率的に検出
– プローブ・バッファリングやバッファ超過の問題を回避
– バージョンの古いクライアントとの下位互換性を維持
構成場所
サーバー:sqlnet.ora
Database Serverのセキュリティ
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 39
TCP有効ノード・チェック
• TCP Invited Nodesを使用
– 接続を許可されたIPまたはホスト名のリスト
• TCP Excluded Nodesを使用
– 接続を許可されないIPまたはホスト名のリスト
• 構成を容易にするために、可能な限りCIDR表記法とワイルドカード形式を使用
• Invited NodesはExcluded Nodesよりも優先
• 有効にするには、以下のように設定
TCP.VALIDNODE_CHECKING = YESTCP.INVITED_NODES = (hostname1, hostname2)TCP.EXCLUDED_NODES = (hostname3, hostname4) 構成場所
サーバー:sqlnet.ora
追加情報
search.oracle.com
またはoracle.com/technetwork/database/enterprise-edition/index-098579.html
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 40
Oracle Net Services製品の概要
免責条項
Copyright © 2017, Oracle and/or its affiliates.All rights reserved. | 41
前述の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。マテリアルやコード、機能の提供をコミットメント(確約)するものではなく、購買を決定する際の判断材料になさらないで下さい。オラクルの製品に関して記載されている機能の開発、リリース、および時期については、弊社の裁量により決定されます。
Recommended