導入失敗しました。
デッドロックが発生した。
やっぱ100台近いクライアントあると
やり直し処理じゃダメだな…。
2つ更新しなきゃいけないテーブルがあり
1つをさっさとコミットして、
もうひとつ更新できないやつは
適当に別プロセス起こして
更新できるまで繰り返すしかないかなあ…
ふと思ったのがOracle9iのoo4
なんか BeginTrans〜CommitTransの間に入れた
更新文を実行した場合場合
他のプロセスがアクセスしても
待たないんだが…なんだろう…
つなわけで、ホテルで簡単な対策を打って
次の日現地で数十台マシン借りてテストすることになった…。
ひとつの修正
有るテーブルが2つの項目を持ち
Aという項目が多数のクライアントから更新され
Bという項目が1つのプログラムから更新される。
結局Bを含んだテーブルを作って独立させてみました
なぜかというとAの項目を更新されている間、
Bの項目は更新できません。つまり待ちます。
もうひとつの修正
あるレコードをInsert時にレコード番号をそのAからとってます(笑)
バッティングしてあたりまえ…。これをシーケンスに変更…
やり直しの回数はかなり減ると思う…。
目標DB更新1秒未満…そうしないと混雑時80台近くの
更新情報が並んでしまう…。