|
Yo trabajo con los FIB pero en delphi.
Hay dos formas de hacer commit
Transaction.Commit
Transaction.CommitRetaining
La primera hace el commit y cierra la transacción. La segunda mantiene la trasnacción abierta.
Lo malo de sobreutilizar el CommitRetaining es que al no cerrarse nunca, se van acumulando capas de transacciones hasta que se hace el commit final.
Imagínate dos usuarios y sus transacciones:
USU1-StartTransaction
USU2-StartTransaction
USU1-hace cosas
USU1-CommitRetaining
USU2-hace cosas
USU2.CommitRetaining
En este momento la base de datos tiene registado todo lo que han hecho los dos usuarios, sin poder liberar ninguna transaccion definitivamente. A lo largo del día, esto puede generar una degradación en la eficiencia de la base.
Cuando finalmente USU1 cierra:
USU1.Commit
La base de datos puede hacer una limpieza de trasacciones hasta la próxima que sigue abierta (la de USU2)
Cuando USU2 hace su Commit:
USU2.Commit
Puede limpiar (hacer un commit final) la lista de transacciones de USU2 y a las de USU1 que estén sobre ella.
Espero no haberte liado mucho.
|