コンソールログに「Skipping SET(KILL) global ^xxxx during transaction rollback...」のエラーがあります

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

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


詳細は以下の通りです。

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

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       -> 値は、ロールバックでプロセスAが更新をする前の値の 1 には戻っていない
3


ここで、ロールバックの実行にて、ジャーナルファイルの記録より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

 
※バージョンによりメッセージは多少異なります。


該当する製品: Caché, Ensemble, 旧HealthShare, IRIS Data Platform, IRIS for Health
関連トピック:
添付ファイル:

アンケートにご協力をお願いします
このトピックは参考になりましたか?
このトピックに関するお問い合わせ

FAQトップに戻る