共有サーバーで動作するように Amazon Relational Database Service (Amazon RDS) Oracle DB インスタンスを設定する方法を教えてください。
簡単な説明
Oracle ユーザーは、専用サーバープロセスまたは共有サーバープロセスを使用して RDS DB インスタンスに接続できます。共有サーバーを使用する前に、以下の点を考慮してください。
- 共有サーバーを使用すると、CPU オーバーヘッドが発生し、パフォーマンスの問題を引き起こす可能性があります。
- 共有サーバーを使用すると、UGA 割り当てがラージプール内で割り当てられます。SGA 内に、共有サーバーに対応するための十分な空き容量があることを確認してください。空き容量が不足すると、インスタンスのアラートログおよびトレースファイルに「ラージプールの空き容量」エラーが表示されることがあります。
- 共有サーバーを使用すると、SGA メモリの動的な再割り当てが頻繁になり、パフォーマンスの問題を引き起こす可能性があります。
- データベースの再起動またはフェイルオーバー中に、DISPATCHERS パラメータが接続スループットに対して十分に高く設定されていない場合、アプリケーション接続が大幅に増加すると、ディスパッチャーが処理しきれなくなる可能性があります。
- 共有サーバーでバッチプロセス、実行時間が長いクエリ、高負荷、または長時間実行される DBA タスクを実行すると、他のジョブがキューアップし、パフォーマンスの問題を引き起こす可能性があります。大規模なジョブには専用サーバーを使用します。
Oracle Database 共有サーバーおよび専用サーバーアーキテクチャの詳細については、「Understanding Shared Server Architecture」の Oracle ドキュメントを参照してください。
解決方法
共有サーバーを使用する利点と制限のバランスを取るには:
- 頻繁に接続および切断し、軽い操作を実行する多数の OLTP セッションには、共有サーバーを使用します。
- 長時間実行されるバッチ操作や、インデックスの作成などの高負荷な管理タスクには、専用サーバーを使用します。
注意: 以下の例は、指定したインスタンスサイズ (db.r3.large インスタンス) の共有サーバーを有効にするためのベースラインとして提供されています。管理者は、ユースケースに基づいてメモリを最適化するパラメータグループ設定を適用する必要があります。詳細については、「Amazon RDS での Oracle」を参照してください。
1. カスタムパラメータグループを変更して、以下のパラメータを最大許容値に設定するか、ユースケースに合った値に設定します。
dispatchers=(PROTOCOL=TCP)(DISPATCHERS=30)
max_dispatchers=30
2. インスタンスにログインし、ホストサイズのデフォルト値の SESSIONS を表示します。デフォルト設定を使用していない場合は、デフォルトのパラメータグループを使用してインスタンスをテストします。
SQL> show parameter sessions
2428
3. SHARED_SERVERS と MAX_SHARED_SERVERS をその値の 10% に設定します。
sessions=2428
shared_servers=243
max_shared_servers=243
4. LARGE_POOL_SIZE を SHARED_SERVERS 値 *1 MB (この場合は 243*1048576 バイト) に設定します。
large_pool_size= 254803968
5. large_pool_size '‘free memory'’ に対して v$sgastat をクエリして、ラージプールが適切なサイズであることを確認します。
SQL> select name, pool, bytes/1024/1024 megs from v$sgastat where name='free memory' and pool='large pool';
Name POOL Megs
-------------- ----------- -------
free memory large pool 243
6. 実行中の Oracle インスタンスに適用されるパラメータグループ設定を表示し、インスタンスから次の SQL クエリを実行します。
select name, value from v$parameter where name in ('processes', 'sessions', 'shared_servers', 'dispatchers', 'memory_target', 'memory_max_target', 'large_pool_size');
7. Oracle インスタンスから次の SQL クエリを実行して、セッションが共有として接続しているかどうかを確認します。
SQL> select decode(server,'NONE','SHARED',server), count(*) from v$session
group by decode(server,'NONE','SHARED',server);
同じ Oracle インスタンスへの専用サーバーアクセスおよび共有サーバーアクセスを有効にするには、次の例のように、デュアルの tnsnames.ora エントリを使用します。
# make the default shared
dbname =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=dbname.endpoint.amazonaws.com)(PORT=1521))
)
(CONNECT_DATA=
(SID=dbname)
)
)
# use the dedicated one for batch processes and dba tasks such as creating indexes
dbname_d=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=dbname.endpoint.amazonaws.com)(PORT=1521))
)
(CONNECT_DATA=
(SID=dbname)
(SERVER=DEDICATED)
)
)
関連情報
Local naming parameters in the tnsnames.ora file
DB パラメータグループを使用する
DB パラメータグループのパラメータ値を表示する
DB インスタンスの再起動