0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Transaction Priority を試す(Oracle AI Database 26ai)

0
Posted at

本記事では Oracle AI Database 26ai の新機能である Priority Transaction の機能を検証しています。

Priority Transaction とは?

Priority Transaction はセッションの設定により、トランザクションの実行に優先順位を制御する機能です。高い優先順位(Priority)を持つトランザクションが、低い優先順位を持つトランザクションの確定を待っている場合、一定時間で低い優先順位のトランザクションを自動的にロールバックします。関連する初期化パラメーターは以下の通りです。

初期化パラメーター 説明 デフォルト値
priority_txns_mode 低優先順位トランザクションの挙動 ROLLBACK
priority_txns_high_wait_target 高優先順位トランザクションの最大待ち時間 2147483647
priority_txns_medium_wait_target MEDIUM優先順位トランザクションの最大待ち時間 2147483647
txn_priority トランザクションの優先順位 HIGH

初期化パラメーター priority_txns_mode は競合が発生した場合の動作を決定します。この初期化パラメーターを TRACK に指定すると、競合の検知のみ行います。

トランザクションの優先順位を決める初期化パラメーター txn_priority はセッション単位で変更できます。指定できる値は HIGH, MEDIUM, LOW の3種類です。以下の例ではカレントセッションの初期化パラメーターを変更しています。

セッション単位で初期化パラメーター txn_priority の変更
SQL> ALTER SESSION SET txn_priority = 'MEDIUM';

Session altered.

初期化パラメーター txn_priority のデフォルト値は HIGH で、この値を維持するセッションではトランザクションは破棄(ロールバック)されません。この初期化パラメーター MEDIUM を設定されたセッションでは、HIGH を設定されたセッションのトランザクションに優先権を奪われる可能性があります。

Priority Transaction の動作検証

Priority Transaction の動作を検証します。

準備

トランザクションの競合を待機する時間は、初期化パラメータ ー priority_txns_high_wait_target と、priority_txns_medium_wait_target で秒数を指定します。優先順位 HIGH のトランザクションは txn_auto_rollback_high_priority_wait_target で指定した秒数を待って、MEDIUM / LOW トランザクションを破棄します。
検証環境ではそれぞれの初期化パラメーターを 10 秒に指定します。以下に設定例を示します。

初期化パラメーターの変更
SQL> ALTER SYSTEM SET priority_txns_high_wait_target = 10;
System altered.

SQL> ALTER SYSTEM SET priority_txns_medium_wait_target = 10;
System altered.

SQL> SHOW PARAMETER priority_txns

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
priority_txns_high_wait_target       integer     10
priority_txns_medium_wait_target     integer     10
priority_txns_mode                   string      ROLLBACK

競合を発生させるためのテーブルを用意します。

テーブルとデータの準備
SQL> CREATE TABLE data1(col1 NUMBER PRIMARY KEY, col2 VARCHAR2(10));
Table created.

SQL> INSERT INTO data1 SELECT LEVEL col1, 'data1' col2 FROM DUAL CONNECT BY LEVEL <= 1000;
1000 rows created.

SQL> COMMIT;
Commit complete.

実行

低い優先順位を持つセッションが UPDATE 文を実行します。

セッション#1:MEDIUM 優先順位セッションの UPDATE
SQL> ALTER SESSION SET txn_priority = 'MEDIUM';
Session altered.

SQL> UPDATE data1 SET col2='UpdMed' WHERE col1 = 1000;
1 row updated.

競合するセッションは無いので、すぐに実行されます。SQL*Plus の自動コミットはデフォルトでオフなので確定(COMMIT)していません。

高優先順位を持つセッションが競合する UPDATE 文を実行します。priority_txns_high_wait_target で指定された秒数(今回は 10 秒)待ってから実行されます。

セッション#2 HIGH 優先順位セッションの UPDATE
SQL> UPDATE data1 SET col2='UpdHigh' WHERE col1 = 1000;  10 秒待機
1 row updated.

低優先順位のセッションでは、テーブルを検索したり、COMMIT 文を実行するとエラー「ORA-63302」と「ORA-63300」が発生します。ROLLBACK 文の実行が必要になります。

セッション#1: 検索エラー
SQL> SELECT * FROM data1 WHERE col1 = 1000;
SELECT * FROM data1 WHERE col1 = 1000
              *
ERROR at line 1:
ORA-63302: Transaction must roll back
ORA-63300: Transaction is automatically rolled back since it is blocking a
higher priority transaction from another session.
Help: https://docs.oracle.com/error-help/db/ora-63302/

SQL> ROLLBACK;
Rollback complete.

V$TRANSACTION 動的パフォーマンス・ビューを確認すると、強制ロールバックされた優先順位 MEDIUM のトランザクションがなくなっていることが確認できます。

トランザクションの確認
SQL> SELECT t.TXN_PRIORITY, t.PRIORITY_TXNS_WAIT_TARGET FROM v$transaction t;

TXN_PRI PRIORITY_TXNS_WAIT_TARGET
------- -------------------------
HIGH                           10

低優先順位のトランザクションがキャンセルされた場合、アラートログには以下のログが出力されました。

アラートログの出力
ORCLPDB1(3):Transaction (sid: 150, serial: 61414, xid: 4.30.920, txn_priority: "MEDIUM") 
terminated by transaction (sid: 12, serial: 18803, xid: xid not available, 
txn_priority: "HIGH") because of the parameter "priority_txns_high_wait_target = 10".

注意点

エラー発生が限定される

理由はわかりませんが、検証環境では低優先順位のトランザクションに関するエラー「ORA-63302」は、セッション初回のトランザクション以外では発生しませんでした。ただし、高優先順位のトランザクションによる強制ロールバック自体は動作しています。これが SQL*Plus の問題なのか仕様なのかは不明です。

似た初期化パラメーターがある

Oracle AI Database 26ai には初期化パラメーター txn_auto_rollback_high_priority_wait_target およびtxn_auto_rollback_medium_priority_wait_target があります。しかしこれらは Oracle Database 23ai の頃に使われていたものなので変更しても効果がありません。

Author: Noriyoshi Shinoda / Date: June 19, 2026

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?