PDA

Ver la Versión Completa : Que es mejor 1 transaccion por registro o 1 para varios.


fredy_boots
29-12-2003, 22:10:43
Hola amigos, estoy teniendo un problema con mi base de datos de Interbase, me ha estado saliendo el error de "Dead lock", aqui me decian que es probable que sea por la cantidad de Transacciones abiertas, mi sistema por cada nuevo registro que agrega un usuario abre una transaccion y quiero modificarlo para que sea una sola transaccion para varios registros nuevos, solo que tengo una duda, al hacer esto, no requiero de mas memoria, o mas espacio en disco?, les agradeceria que me pudieran aconcejar sobre que me conviene mas, pues quiero hacer mas rapido mi programa, gracias.

marcoszorrilla
29-12-2003, 22:36:12
A mi juicio la transación tiene que abarcar un proceso determinado y no un registro, salvo que este solo constituya un proceso.

Por ejemplo, si para grabar una factura, preciso a parte de dar de alta todas las líneas que va a tener, al finalizar la misma actualizar el almacén y grabar en la ficha del cliente la fecha de la factura que será la de la última vez que compró todo este proceso lo incluyo en una transación, a parte de que pudiera haber otras anidadas, si falla alguna parte del proceso, se ejecuta el RollBack y dejamos todo como estaba.

Un Saludo.

fredy_boots
31-12-2003, 18:35:52
Ya se que una transaccion tiene que ver con un proceso en si, perdon pero en mi comentario no especifique, quise decir que en mi sistema este proceso abarca lo que es una alta o una modificacion y hasta ahi, cuando el usuario da guardar en seguida se da el commit, lo que quiero saber es si me convendria dar commit o roollback hasta que el usuario lo desee, osea que pueda dar de alta varios registros y hasta "n" registros dados de alta entoces si, dar commit. No se si me explico.

fredy_boots
31-12-2003, 18:44:54
Perdon, no deberia referirme tanto a "dar de alta registros", mi sistema lo unico que hace es capturar todo lo referente a una cuenta catastral, osea un "A,B,C" comun y corriente, y mi proceso para una transaccion solo abarca una alta o una modificacion; por aqui lei que el error "Internal gds software consistency check (cant continue after bugcheck)" era de interbase y posiblemente de debia a que se abrian muchas transacciones a la vez, es por eso que inicie este hilo, que hago ..... ?

marcoszorrilla
31-12-2003, 19:05:23
Mira este ejemplo, que te viene con los propios componentes IB:

procedure TForm1.ApplyButtonClick(Sender: TObject);

begin
with CustomerQuery do
begin
IBDatabase1.Open;
IBTransaction1.StartTransaction;
Table1.Insert;
Table1.FieldByName('QUANTITY').AsInteger := StrToIn(Edit1.Text);
Table1.Post;
IBTransaction1.Commit;
end;
end;


Si el proceso es dar un alta o hacer una modificación, en mi opinión se debe de finalizar la transacción, el hacer cambios en muchos registros a la vez y no concluir la transacción es lo que puede provocar que otro proceso ataque los mismos datos sin que hayamos finalizado la transacción anterior y pueda terminar produciéndose un fallo, por ejemplo un "DeadLock",

Un Saludo.

fredy_boots
02-01-2004, 20:54:57
Gracias marcos, tienes razon, solo quisiera ver si no me pudieras explicar que es exactamente un "DeadLock" y este error "Key Violation - Internal gds software consistency check (cant continue after bugcheck), este error tiene que ver con la cantidad de transaciones abiuertas? , te agradeceria mucho que me pudieras ayudar, gracias, saludos.