専用サーバー接続とは?
Oracleデータベースは、クライアントとデータベース間の通信を2つの異なる方式で行います。1つは専用サーバー接続、もう1つは共有サーバー接続です。この記事では、特に専用サーバー接続に焦点を当て、効率的な接続方式の選択方法や設定方法を解説します。
専用サーバー接続では、クライアント接続ごとに専用のサーバー・プロセスが割り当てられ、データベースに対するクエリ実行やデータ処理が行われます。このため、各接続に対し独立したプロセスとメモリ領域が確保され、他の接続と干渉しにくいのが特徴です。
PGAの役割とリソース消費の管理
専用サーバー接続で利用されるPGA(Program Global Area) は、各接続のセッション情報やソート、ハッシュ結合といったデータ処理に必要な情報を保持するメモリ領域です。専用サーバー接続ではPGAが接続ごとに割り当てられるため、メモリ消費がクライアント数に比例して増加します。
PGAサイズの設定方法
PGAメモリ使用量を適切に管理するには、次のパラメータを確認し設定します。
pga_aggregate_target
サーバー全体でPGAに割り当てるメモリの目標値です。Oracleが自動的にメモリを調整し、負荷に応じて適切なメモリ割り当てを行います。pga_aggregate_limit
PGAに割り当てられるメモリの上限を設定します。この上限を設定しておくことで、予期せぬメモリ消費の増加を防ぐことができます。
設定例:
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE = BOTH;
ALTER SYSTEM SET pga_aggregate_limit = 2G SCOPE = BOTH;
専用サーバー接続のメリットとデメリット
メリット
- 高い安定性とパフォーマンス
- 専用サーバー接続では、各接続が独立したプロセスで動作するため、他の接続の影響を受けず、安定した応答時間が期待できます。特に、大規模なデータ処理を行う場合や、パフォーマンスが重視される環境に適しています。
- デバッグとトラブルシューティングの容易さ
- 接続ごとに専用プロセスがあるため、トラブル発生時には影響範囲を特定しやすく、問題の解決が迅速に行えます。特定のセッションでリソースを多く消費する場合も、原因が明確になりやすいです。
デメリット
- リソースの大量消費
- 接続ごとに独立したプロセスとPGAメモリが必要なため、多数のクライアントが同時接続する場合、サーバーのCPUやメモリの消費量が増加します。
- スケーラビリティの限界
- 専用サーバー接続は大量の同時接続に対してスケーラブルではありません。大規模環境では、リソース消費の観点から共有サーバー接続のほうが適している場合があります。
専用サーバー接続と共有サーバー接続の使い分け
専用サーバー接続は高負荷処理を伴う業務に最適ですが、効率的なリソース活用が求められる環境では共有サーバー接続との併用が効果的です。
使用シナリオ別の推奨接続方式
- 大規模なバッチ処理やデータ分析が多い場合
専用サーバー接続が適しています。大量のデータ処理を並列で行う際も、独立したプロセスが確保されるため、パフォーマンスを犠牲にせず安定的に処理できます。 - 一般ユーザーによる参照系の操作が多い場合
共有サーバー接続が適しています。軽いクエリやデータ参照が中心のユーザーには、共有サーバーを使用してリソースの無駄を減らします。 - 混在環境
高負荷のデータ処理を行うユーザーには専用サーバー接続を提供し、参照系の操作を行うユーザーには共有サーバー接続を提供することで、負荷の分散が可能になります。
専用サーバー接続の設定方法
専用サーバー接続を設定するには、listener.ora と tnsnames.ora の2つの構成ファイルの編集が必要です。
listener.oraの設定
専用サーバー接続用にリスナーを設定するには、listener.ora
に以下のように記述します。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(PROGRAM = oracle)
)
)
tnsnames.oraの設定
tnsnames.ora
で専用サーバー接続を指定するには、SERVER = dedicated
を設定します。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
(CONNECT_DATA =
(SERVER = dedicated)
(SERVICE_NAME = orcl)
)
)
この設定により、クライアントは専用サーバー接続としてデータベースに接続することができます。
共有サーバー接続の設定(併用する場合)
共有サーバー接続を有効にするには、以下のようにSERVER = shared
を指定します。
ORCL_SHARED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = orcl)
)
)
接続方式の動作確認と管理
動作確認
リスナーを再起動し、新しい設定が反映されていることを確認します。
lsnrctl stop
lsnrctl start
接続方式の動作確認
クライアントから接続してプロセスを確認し、専用サーバー接続が使用されているか確認できます。
SELECT sid, serial#, server
FROM v$session
WHERE username = 'ユーザー名';
[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 ★専用サーバー接続
トラブルシューティング
- メモリ不足エラーが発生する場合は、
pga_aggregate_limit
を増やすか、共有サーバー接続の併用を検討してください。 - 遅延が発生する場合、高負荷な処理を専用サーバー接続に限定し、その他のユーザーを共有サーバー接続に切り替えることで改善することが多いです。
まとめとベストプラクティス
専用サーバー接続は、PGAを活用して高いパフォーマンスを提供しますが、大量の同時接続に対してはリソース消費が激しく、スケーラビリティに課題が生じます。したがって、次のベストプラクティスに基づいて利用することが推奨されます。
- 接続の負荷レベルに応じて接続方式を選択する
高負荷処理には専用サーバー接続を、軽負荷処理には共有サーバー接続を割り当て、効率的にリソースを活用します。 - PGAメモリの上限を適切に設定する
メモリ消費を適切に管理するため、pga_aggregate_target
やpga_aggregate_limit
を環境に合わせて設定します。 - リソース使用状況の監視
v$session
ビューや他の管理ビューを使用し、接続ごとの負荷を定期的に監視することで、リソース不足やパフォーマンス低下を事前に防ぎます。
このように、用途に応じた接続方式を活用し、Oracleデータベースの効率的な運用を実現することが可能です。
[参考]
Oracle Database Net Services 管理者ガイド 19c
コメント