Ver Mensaje Individual
  #6  
Antiguo 27-11-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Reputación: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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.
Responder Con Cita