リソースを制限する
Resource Manager を利用できない環境においてプロファイルを使いセッションおよび SQL 単位で使用するリソースを制限する方法。
プロファイルの作成
プロファイル hoge の作成例(リソース制限に関する部分のみ)
CREATE PROFILE hoge LIMIT
SESSIONS_PER_USER 1
CONNECT_TIME 1
IDLE_TIME 1
CPU_PER_SESSION 100
CPU_PER_CALL 100
LOGICAL_READS_PER_SESSION 100
LOGICAL_READS_PER_CALL DEFAULT
PRIVATE_SGA DEFAULT
COMPOSITE_LIMIT UNLIMITED ;
初期状態で DEFAULT プロファイルが用意されている。
DEFAULT は DEFAULT プロファイルから値を継承することをあらわし UNLIMITED は無制限をあらわす。
(DEFAULT プロファイルはデフォルト状態では全て UNLIMITED に設定されている)
リソース制限可能な項目
| リソース名 | 内容 | 単位 |
| SESSIONS_PER_USER | 同時接続数の制限 | 接続数 |
| CONNECT_TIME | セッションでの総接続時間 | 分 |
| IDLE_TIME | セッションでアイドル状態が許される時間 | 分 |
| CPU_PER_SESSION | セッション単位での CPU 時間 | 1/100秒 |
| CPU_PER_CALL | 1 コール (SQL) 単位での CPU 時間 | 1/100秒 |
| LOGICAL_READS_PER_SESSION | セッション単位での論理読み込みブロック数 | ブロック |
| LOGICAL_READS_PER_CALL | SQL 単位での論理読み込みブロック数 | ブロック |
| PRIVATE_SGA | 共有サーバー接続においてセッション単位でのプライベート領域(SGA 共有プール内)の大きさ | バイト |
| COMPOSITE_LIMIT | セッション単位でのリソースの総コスト | サービス(※) |
(※) サービスの単位は
CPU_PER_SESSION
LOGICAL_READS_PER_SESSION
CONNECT_TIME
PRIVATE_SGA
の重み付け合計により算出する。
重み付けは ALTER RESOURCE COST によって設定する。(デフォルトは全て 0)
REOURCE_COST データディクショナリ参照
プロファイルの適用とリソース制限の有効化
リソース制限はデフォルトで無効になっているので以下のコマンドで有効にする。
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE ;
ALTER USER user_name PROFILE hoge ;
-- 上で変更したデフォルトプロファイルに戻す ALTER USER 文
-- ALTER USER user_name PROFILE default ;
適用後に各種リソース制限を超えた場合には以下のようなエラーが出力される。場合によってはロールバック、ログオフがされる。アプリケーションが生存している場合、使用したリソースは解放されているがアプリケーションがエラーを受け取るまではセッション情報が残されているようである。
- ORA-02399: 最大接続時間を超えました。ログオフ中です。
- ORA-02391: 同時実行のSESSION_PER_USER制限を超えました。
- ORA-02396: 最大アイドル時間を超えました。再接続してください。
- ORA-02392: CPU使用に対するセッション制限を超えました。ログオフ中です。
- ORA-02394: I/O使用に対するセッション制限を超えました。ログオフ中です。
- ORA-02395: I/O使用に対するコール制限を超えました。
- ORA-02393: CPU使用に対するコール制限を超えました。
- ORA-02390: COMPOSITE_LIMITを超えました。ログオフ中です。
リソースの制限を本格的に行なう場合には、より多機能な Resource Manager を使用する。(EE 版のみ)
Resource Manager を使用するには Enterprise Edition が必要
(サイト統合にともない代替情報の URL は不明)
参考: Oracle 10g Technical Data 主要機能一覧
/ Oracle 9i Technical Data 主要機能一覧
(oracle.co.jp)