Transacciones | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

Transacciones

Consulta, en mi sistema, al generar una serie de registros, demora, pero porque, cuando el tiempo de espera termina, la transaccion queda en el aire, en mi store pongo un begin tran y al final pregunto si no hay error, commit, sino rollback, pero en este store cuando se culmina el tiempo de espera, nunca llega al final para preguntar si hay o no problema, y queda la transaccion abierta, porque?, y como puedo resolver el problema, tengo el problema que demora casi 7 minutos, bueno ahora estoy viendo una manera de evitar los updates directos en esa tabla, primero transfiero los registros a una tabla, actualizo e inserto ahi y estoy por probar eliminar los registros existentes y volver a insertarlos en base a lo que genere en la otra tabla, pero para garantizar que los datos se guarden, tendre que generar transacciones
Si el procedimiento tiene todos los controles como tu lo manifiestas, aunque ocurra una culminación de tiempo de espera, seguramente ocurrirá un rollback implícito. Luis Martin
Moderator
SQL-Server-Performance.com One of the symptoms of an approaching nervous breakdown is the belief that one’s work is terribly important
Bertrand Russell
All postings are provided “AS IS” with no warranties for accuracy.
He realizado pruebas como las que comentás y mi experiencia es que borrar e insertar tarda mas que actualizar.
Si utilizás el SQL Profiler podrías ver la secuencia de ejecución de tu stored procedure, y ver cuanto tarda cada linea, esto te permitirá ver cual fue la última ejecutada y en cual o cuales se demora más para poder hacerle tunning.
Ok, en mi caso parece que no se cumple como me comentas, porque si hago el procedimiento, hace el update sobre una tabla de casi 2 millones de registros, solo para actualizar 1 en 1, lo que hice fue generar un temporal con los registros que se veran afectos (los que pertenecen a un documento, que tienen en promedio 2000 a 5000 registros), y realizo mi procedimiento de actualizar e insertar los nuevos registros y lo hace de manera muy rapida, luego elimino de la tabla real los datos y los inserto a como los tengo en mi nueva tabla y guala, resulta, mas bien me diste una gran idea, que tal si ahora que tengo estos registros, actualizo la tabla grande por medio de su campo pk, ya que en la nueva tengo ese dato, y si no actualiza, lo mando a insertar, eso si puede ser dable, que piesan uds?, se debe a que mi update dice si existe un registro donde corte=’04-000052′, paquete =1, operacion = 4, bloque=4, seccion=200, estudio=1, estilo=’180102′, etc, lo lleve al optimizador de indices y no recomienda uno mas de los indices que ya tengo, en cambio al crear la otra tabla, ahi tengo el campo ticket_codigo, el cual es la pk de mi tabla general. Espero sus comentarios, gracias nuevamente
ah me olvidaba, porque si tengo un tiempo de espera fallido, queda la transaccion abierta hasta que salga del usuario que lo genero?, como puedo evitar esos problemas, o es que sql continua hasta que termine sin importar que diga visual basic?
El problema que tiene tu update es que no encuentra via un indice los registros a actualizar, por eso hace un table scan de 2 millones para actualizar solo 5000.
Si encontrase bién los registros usando un indice no tardaría más que el hacer un delete y luego un insert.
Esta bien,tienes razon en eso, modifique el store ahora ya no borro y elimino, sino hago el update de acuerdo a la nueva tabla que genere y los insert a los registros que no se encuentren, y va muy bien hasta el momento, pero eso si, sin transaccion porque me pone en problema, termina el tiempo de espera y la transaccion nunca culmina hasta que el usuario salga totalmente del sistema, ese problema se lo atribuyo al xp y sql personal que tengo, pero la semana que sigue migrare a sql2000 server con sql standard, gracias por los consejos.
]]>