**Oracleデータベースの共有サーバー接続(Shared Server Connection)**は、多数の同時接続が求められる環境でリソースを効率的に活用する接続方式です。本記事では、共有サーバー接続の基礎から、**SGA(システム・グローバル領域)**を活用した最適化の方法、具体的な設定手順、tnsnames.ora
を使用した設定方法、実用的なモニタリング技術まで網羅的に解説します。
1. 共有サーバー接続の基本概念
Oracleデータベースでは、デフォルトでクライアントごとに専用のサーバープロセスが割り当てられる専用サーバー接続が使用されますが、接続数が多くなるとリソースを大量に消費し、スケーラビリティに限界があります。
共有サーバー接続は、クライアント接続がサーバープロセスを共有することで、少ないリソースで多くの接続を処理する方式です。特に、数百から数千の同時接続がある環境で威力を発揮します。
専用サーバー接続と共有サーバー接続の違い
項目 | 専用サーバー接続 | 共有サーバー接続 |
---|---|---|
接続方法 | 各接続に対して専用プロセスを作成 | サーバープロセスを複数のクライアントで共有 |
リソース使用 | 高(接続ごとにプロセスが増える) | 低(プロセス数が制限され効率的に共有) |
適用シナリオ | 少数のユーザーが高負荷の処理を行う場合 | 多数のユーザーが軽負荷の処理を行う場合 |
2. SGAと共有サーバー接続の密接な関係
SGA(System Global Area)は、Oracleデータベースのすべての接続に共有されるメモリ領域です。SGAは、クライアント間のデータ共有やSQLのキャッシュ、キューの管理を行い、共有サーバー接続のリクエスト処理を最適化します。
SGA内の主要コンポーネントと役割
- 共有プール(Shared Pool):SQL文の解析や実行計画をキャッシュし、複数のクライアントで共有されるため、同じSQL文が再利用される際の処理が高速化します。
- 大域メモリキュー(Large Pool):ディスパッチャーや共有サーバープロセスのメモリを効率的に管理し、大規模な接続環境でのバックアップやリカバリ時のメモリ確保に使用されます。
- キュー管理:クライアントリクエストはSGA内のキューに保存され、ディスパッチャーが共有サーバープロセスに振り分けるため、リクエストの処理順序や待ち行列が効率的に管理されます。
3. 共有サーバー接続の設定方法
共有サーバー接続の構成には、ディスパッチャーと共有サーバープロセスの設定が必要です。
3.1 ディスパッチャーの設定
ディスパッチャーは、クライアント接続をSGA内のキューに登録し、共有サーバープロセスへの割り振りを行います。DISPATCHERS
パラメータを設定し、使用するプロトコルとディスパッチャー数を指定します。
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=3)';
3.2 共有サーバープロセスの設定
共有サーバープロセスは、設定された数だけ最初に起動されます。必要に応じて、自動的にプロセスが追加され、SHARED_SERVERS
パラメータで基本数を設定できます。
ALTER SYSTEM SET SHARED_SERVERS = 5;
3.3 最大共有サーバープロセス数の設定
MAX_SHARED_SERVERS
は、サーバー負荷に応じたプロセスの追加時に上限を設定し、SGA内のリソースが効率的に使用されるよう制御します。
ALTER SYSTEM SET MAX_SHARED_SERVERS = 20;
[oracle@v19single ~]$ sqlplus scott/tiger@v19single:1521/v19
SQL*Plus: Release 19.0.0.0.0 - Production on 土 11月 9 00:12:45 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 土 11月 09 2024 00:02:04 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> set linesize 1000 pagesize 1000
SQL> col username for a20
SQL> select sid,serial#,username,server from v$session
2 where username='SCOTT';
SID SERIAL# USERNAME SERVER
---------- ---------- -------------------- ---------------------------
34 37104 SCOTT DEDICATED ★デフォルトでは専用サーバー接続
SQL> conn / as sysdba ★共有サーバー接続の構成
接続されました。
SQL> ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=3)';
システムが変更されました。
SQL> ALTER SYSTEM SET SHARED_SERVERS = 5;
システムが変更されました。
SQL> ALTER SYSTEM SET MAX_SHARED_SERVERS = 20;
システムが変更されました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ sqlplus scott/tiger@v19single:1521/v19
SQL*Plus: Release 19.0.0.0.0 - Production on 土 11月 9 00:16:42 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 土 11月 09 2024 00:13:35 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> set linesize 1000 pagesize 1000
SQL> col username for a20
SQL> select sid,serial#,username,server from v$session
2 where username='SCOTT';
SID SERIAL# USERNAME SERVER
---------- ---------- -------------------- ---------------------------
49 55329 SCOTT SHARED ★共有サーバー接続
4. tnsnames.oraを使用した共有サーバー接続設定
tnsnames.ora
ファイルを使用することで、クライアントがOracleデータベースに共有サーバー接続できるよう設定が可能です。以下の例では、tnsnames.ora
で共有サーバー接続を構成する手順を説明します。
tnsnames.oraの設定例
tnsnames.ora
ファイル内で接続方式を指定し、サーバー側で共有サーバー接続が有効になっていることを前提に以下の設定を行います。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = your_service_name)
(SERVER = SHARED) -- ここで共有サーバー接続を指定
)
)
- SERVER パラメータを SHARED に設定することで、共有サーバー接続を利用するようになります。
- SERVICE_NAME には、データベースのサービス名を指定します。
この設定により、クライアントが接続時に共有サーバープロセスを使用するようになります。
5. SGAを活用したパフォーマンス最適化
SGAの適切な構成により、共有サーバー接続のパフォーマンスを大幅に向上させることが可能です。以下は、特に重要なSGAコンポーネントの最適化ポイントです。
5.1 共有プールサイズの調整
共有プールのサイズが不十分だとキャッシュミスが多発し、SQLの再利用が妨げられます。大規模なSQLキャッシュを維持するため、SHARED_POOL_SIZE
パラメータで適切なメモリサイズを設定します。
ALTER SYSTEM SET SHARED_POOL_SIZE = 512M;
5.2 大域メモリキューの調整
バックアップやリカバリなどの重い処理が多い場合、LARGE_POOL_SIZE
を設定することで、共有サーバープロセスのメモリを効率的に確保します。
ALTER SYSTEM SET LARGE_POOL_SIZE = 128M;
5.3 キューのモニタリング
SGA内のキューに格納されたリクエストは、待機時間が増加するとパフォーマンス低下につながる可能性があるため、V$QUEUE
ビューを定期的に監視し、適切な数の共有サーバープロセスを維持します。
SELECT * FROM V$QUEUE WHERE TYPE = 'COMMON';
6. 共有サーバー接続の実例とSGAモニタリング
6.1 企業環境におけるSGA活用事例
例えば、大手企業の社内ポータルやERPシステムで共有サーバー接続が活用されています。社員数が数千人規模であるため、専用サーバー接続に比べ、SGA内の共有プールやキューを活用することで、大量の接続がスムーズに処理されます。
6.2 SGAモニタリングツールの利用
Oracleデータベースのパフォーマンスをリアルタイムで把握するため、SGAのメモリ使用状況や共有プールのヒット率を監視します。以下のビューが有効です:
- V$SGASTAT:SGAの各コンポーネントのメモリ使用状況
- V$SQLAREA:共有プール内のSQLキャッシュ情報を監視し、頻繁に実行されるSQLの解析状況を把握
- V$DISPATCHERおよびV$DISPATCHER_RATE:ディスパッチャーの活動状況や接続リクエストの処理数
SELECT * FROM V$SGASTAT WHERE NAME = 'shared pool';
SELECT SQL_TEXT, EXECUTIONS FROM V$SQLAREA ORDER BY EXECUTIONS DESC;
7. まとめとベストプラクティス
共有サーバー接続は、SGAを効果的に利用することで、多数の同時接続に対して高いパフォーマンスを提供します。Oracleデータベースのリソース消費を最適化し、接続管理の負荷を軽減するためには、以下のベストプラクティスを心がけましょう。
- SGAの共有プールと大域メモリキューを適切に割り当てる:メモリ割り当てを誤ると、SQLキャッシュ不足やメモリ不足によるパフォーマンス低下が発生します。
- 適切なプロセス数の設定と監視:
V$QUEUE
やV$DISPATCHER
を活用し、負荷に応じて共有サーバープロセスの数を調整する。 - tnsnames.oraを利用した設定の確認:
tnsnames.ora
ファイルでの共有サーバー設定が正しく行われているかを確認し、クライアント側からの接続が正しく共有サーバーに向かうようにする。
コメント