記事
Tomoko Furuzono · 2021年12月7日 2m read

メッセージ・ログ(messages.log)/コンソール・ログ(cconsole.log) に出力される「Skipping SET(KILL) global ^xxxx during transaction rollback...」のメッセージとは

これは、InterSystems FAQサイトの記事です。

このメッセージが出力される要因は以下の2つになります。

  1. 同じデータに対して適切に排他を行わずに、別々のプロセスから更新が行われている
  2. ロールバックが発生している

詳細は以下の通りです。 メッセージログ/コンソールログに、以下のようなメッセージがある場合、これはロールバック処理にて出力されています。
※バージョンによってメッセージは多少異なります。

Skipping SET due to compare and swap failed on ...
Skipping KILL due to compare and swap failed on ...
---
Skipping Set global ^xxx during transaction rollback (transaction may not have been properly locked) in journal ...
Skipping KILL as node ^xxx exists in ...
---
Skipped rolling back x update(s) in ...
Total 1 update(s) were skipped during rollback of transaction beginning at address ...
 
以下の例のように、ロールバック処理で、更新したグローバル変数の値を元の値に戻す際に、別のプロセスにより、そのグローバルが既に更新されてしまった場合に出力されます。
 

*プロセスA 

USER>W ^TEMP
1                              -> 更新処理前の値
USER>TS
TL1:USER>s ^TEMP=2          -> ジャーナルファイルにnew value =2, old value =1と記録される
 
 
*プロセスB
 
USER>TS
TL1:USER>S ^TEMP=3      -> 別プロセスより更新
TL1:USER>TC
USER>

 

*プロセスA 

TL1:USER>TRO        -> ロールバック
USER>w ^TEMP       
3                                 -> 値は、ロールバックでプロセスAが更新をする前の値の 1 には戻っていない

 

ここで、ロールバックの実行にて、ジャーナルファイルの記録よりold value の1に戻そうとしたが、値が別プロセスにより変更されていた為、ロールバックにより値を戻すのをskipします。
その際、コンソールに以下のようなメッセージが出力されます。

Skipping Set global ^["^^c:\intersystems\cache\mgr\user\"]TEMP during transaction rollback 
(transaction may not have been properly locked) in journal c:\intersystems\cache\mgr\journal\20130122.001 
location 159100
10
1 0 0 10
続けるにはログインするか新規登録を行ってください