共有サーバーで動作するように Amazon RDS Oracle DB インスタンスを設定する方法を教えてください。

最終更新日: 2020 年 2 月 4 日

共有サーバーで動作するように 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)
      )
  )