Есть служба, которая постоянно обновляет несколько записей в базе (firebird Superserver 2.5.3), на другом сервере. Транзакции, в которых идет обновление, имеют параметры read_committed rec_version nowait. Иногда бывает, что служба отваливается (либо комп вырубился, либо еще как-то), оставляя (видимо) незавершенные транзакции. После перезапуска получаю в логе такое:
lock conflict on no wait transaction
deadlock
update conflicts with concurrent update
concurrent transaction number is 41571292 [UPDATE ...]
и в больших количествах — служба обновляет довольно часто.
В логе firebird много записей типа:
SRV (Client) Tue Feb 10 20:47:19 2015
INET/inet_error: read errno = 10038
SRV (Server) Tue Feb 10 21:05:45 2015
INET/inet_error: read errno = 10054
Я правильно понимаю, что это и есть зависшие транзакции, которые блокируют запись и не разблокируют ее, пока винда по keepalive таймауту не почистит дохлый коннект с клиентом и ФБ не откатит? По умолчанию keepalive timeout в винде — 2 часа. Неужели нужно везде, где стоит сервер ФБ, править его в реестре? Dummy в ФБ не использую.
А может я вообще что-то не так делаю?
Здравствуйте, Alexio, Вы писали:
A>Есть служба, которая постоянно обновляет несколько записей в базе (firebird Superserver 2.5.3), на другом сервере. Транзакции, в которых идет обновление, имеют параметры read_committed rec_version nowait. Иногда бывает, что служба отваливается (либо комп вырубился, либо еще как-то), оставляя (видимо) незавершенные транзакции.
http://ibase.ru/devinfo/keepalive.htm
Здравствуйте, DarkMaster, Вы писали:
DM>http://ibase.ru/devinfo/keepalive.htm
Я читал эту статью поэтому и спросил, единственный ли это способ. Как-то не айс у всех юзеров править реестр в этой части.