Страница 1 из 1

"Застревание" транзакции.

Добавлено: 28 июн 2006, 10:16
v6y
Не знаю как четко сформулировать вопрос, поэтому попробую объяснить на "пальцах".

Запускаю gstat -h, получаю статистику
Database header page information:
...
Oldest transaction 246
Oldest active 247
Oldest snapshot 247
Next transaction 248
...
*END*

Далее, запускаю программу, в которой выполняю:

Код: Выделить всё

isc_attach_database
isc_start_transaction
isc_execute(...,"select * from table",...)
isc_commit_transaction
isc_detach_database
После чего вновь выполняю gstat -h и получаю
Database header page information:
...
Oldest transaction 246
Oldest active 247
Oldest snapshot 247
Next transaction 249
...
*END*
При последующих запусках программы, Next transaction увеличивается, в то время как остальные величины остаются неизменными:
Database header page information:
...
Oldest transaction 246
Oldest active 247
Oldest snapshot 247
Next transaction 250
...
*END*
Опять запускаю, пргорамму, но теперь в ней выполняю:

Код: Выделить всё

isc_attach_database
isc_start_transaction
isc_execute(...,"select * from table",...)
isc_commit_transaction
//"холостая" транзакция
isc_start_transaction 
isc_commit_transaction
isc_detach_database
Теперь статистика выглядит так:
Database header page information:
...
Oldest transaction 251
Oldest active 252
Oldest snapshot 252
Next transaction 253
...
*END*
То есть, чтобы Oldest active не "застревал", необходимо в рамках одного соединения стартануть и завершить мимнмум две тразакции.
Кто-нибудь (если вдруг понял о чем это я :)) может это прокоменитровать?

Добавлено: 28 июн 2006, 10:46
kdv
сервер какой? Если это InterBase, особенно 7.5, то он кэширует информацию о маркерах транзакций, и ее тогда надо смотреть в tmp$database. в FB такого наблюдаться не должно.

Добавлено: 28 июн 2006, 11:14
v6y
kdv писал(а):сервер какой?
>=LI-V1.5.2.4731 Firebird 1.5