LoginSignup
2
1

More than 3 years have passed since last update.

初期化パラメーターmax_idle_blocker_timeを試す(Oracle Database 19c)

Last updated at Posted at 2020-06-30

max_idle_blocker_timeとは

 初期化パラメーターmax_idle_blocker_timeは、Oracle Database 19c以降で使用できる初期化パラメーターです。特定のSQL文をブロックしているセッションが、指定された分数アイドル状態になるとセッションを切断します。

設定

 初期化パラメーターmax_idle_blocker_timeにはアイドル時間を分単位で指定します。デフォルト値は0で無効になっています。この初期化パラメーターはインスタンス単位で指定できますが、セッション単位では指定できません。当初は マニュアルには記載されていませんでしたが、その後掲載されるようになりました。下記の例では、1分が指定されています。

SQL> ALTER SYSTEM SET max_idle_blocker_time = 1;

System altered.

動作

「セッション#1」がDELETE文を実行します。max_idle_blocker_timeには1分が指定されているものとします。

SQL> SET AUTOCOMMIT OFF
SQL> DELETE FROM data1 WHERE c1=100;

3 rows deleted.

「セッション#2」はSELECT FOR UPDATE文を実行して、「セッション#1」が実行したDELETE文の対象レコードが確定するまで待機します。

SQL> SELECT * FROM data1 WHERE c1=100 FOR UPDATE;

1分が経過すると、「セッション#1」は強制的に切断され、「セッション#2」はレコードが返ります。下記の例は「セッション#1」でSELECT文を実行していますが、既に切断されているためエラー「ORA-03135: connection lost contact」が発生している様子です。

SQL> SELECT * FROM DUAL;
SELECT * FROM DUAL
            *
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 26893
Session ID: 281 Serial number: 50063

制約と注意点

 アイドル状態になるとセッションを切る機能には初期化パラメーターmax_idle_timeもあります。こちらはブロックしている/していないにかかわらず、一定時間アイドル状態になるとセッションを切断します。max_idle_blocker_timeは、ブロックしているセッションが切断されることが異なります。
 マニュアルには「Therefore, in order for MAX_IDLE_BLOCKING_TIME to be effective, its limit must be less than the MAX_IDLE_TIME limit.」と記載されており、max_idle_blocker_time < max_idle_time とする必要があります。しかし、システム的な制限はかけられていないため、max_idle_blocker_timeの方が大きい値に設定できます。この場合は、先にmax_idle_timeが動作します。

SQL> ALTER SYSTEM SET max_idle_time = 3;

System altered.

SQL> ALTER SYSTEM SET max_idle_blocker_time = 5;

System altered.

Resource Managerには古いバージョンから既に同じ名前のディレクティブが存在します。こちらは秒数で指定します。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1