TO Stich_MS: К сожалению когда один батч выполняет
PHP код:
select pessimisticLock firstonly trans
where trans.open == true;
То второй батч при выборе этой же линии, ждет пока снимется лок сделаный первым батчем. Т.е. получается вообще плохо.
To Hyper: вот это подход я понимаю

, но всетаки запуск больше двух батчей не приведет к ускорению работы.
Пришлось сделать так:
1) Добавить на таблицу поле Blocked
2) Переделать метод так:
PHP код:
run()
{
Trans trans;
Trans buffer;
boolean setBlocked(boolean _blocked)
{
if (_blocked && trans.blocked)
return false;
ttsbegin;
buffer = Trans::find(trans.recId, true);
buffer.blocked = true;
buffer.update();
ttscommit;
return buffer.blocked;
}
try
{
while select trans where trans.open == true && trans.blocked == false
{
if(setBlocked(true))
{
ttsbegin;
buffer = Trans::find(trans.recid, true);
...
buffer.open = false;
buffer.update();
ttscommit;
setBlocked(false);
}
}
}
catch (Exception::Error)
{
setBlocked(false);
}
catch (Exception::UpdateConflict)
{
retry;
}
}
Всех с Праздником!