メッセージ・ログ(messages.log)/コンソール・ログ(cconsole.log) に出力される「Skipping SET(KILL) global ^xxxx during transaction rollback...」のメッセージとは
これは、InterSystems FAQサイトの記事です。
このメッセージが出力される要因は以下の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 ...
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と記録される
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>
TL1:USER>S ^TEMP=3 -> 別プロセスより更新
TL1:USER>TC
USER>
*プロセスA
TL1:USER>TRO -> ロールバック
USER>w ^TEMP
3 -> 値は、ロールバックでプロセスAが更新をする前の値の 1 には戻っていない
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
(transaction may not have been properly locked) in journal c:\intersystems\cache\mgr\journal\20130122.001
location 159100