このまま富士の樹海に消えたい…(笑)

導入失敗しました。
デッドロックが発生した。

やっぱ100台近いクライアントあると
やり直し処理じゃダメだな…。

2つ更新しなきゃいけないテーブルがあり
1つをさっさとコミットして、
もうひとつ更新できないやつは
適当に別プロセス起こして
更新できるまで繰り返すしかないかなあ…

ふと思ったのがOracle9iのoo4
なんか BeginTrans〜CommitTransの間に入れた
更新文を実行した場合場合
他のプロセスがアクセスしても
待たないんだが…なんだろう…

つなわけで、ホテルで簡単な対策を打って
次の日現地で数十台マシン借りてテストすることになった…。

ひとつの修正
有るテーブルが2つの項目を持ち
Aという項目が多数のクライアントから更新され
Bという項目が1つのプログラムから更新される。

結局Bを含んだテーブルを作って独立させてみました
なぜかというとAの項目を更新されている間、
Bの項目は更新できません。つまり待ちます。

もうひとつの修正
あるレコードをInsert時にレコード番号をそのAからとってます(笑)
バッティングしてあたりまえ…。これをシーケンスに変更…

やり直しの回数はかなり減ると思う…。

目標DB更新1秒未満…そうしないと混雑時80台近くの
更新情報が並んでしまう…。