Como utilizar correctamente las transacciones

29/10/2007 - 13:52 por Jordi Julià | Informe spam
Hola a todos,

Tengo un problema con las Transacciones al actualizar una base de datos SQL.
No se muy bien que Isolationlevel debo utilizar para una transacción: mi
intención es que o se actualiza todo o no se actualice nada, pero que no me
bloquee las tablas.

Sería posible un bloqueo a nivel de registro y no como lo que me estoy
encontando que es un bloqueo a nivel de tabla.

No se si me explico bien, pero tengo una aplicación que actualiza varios
registros de varias tablas (INSERT y UPDATE), esta actualización es
considereble (todo el proceso puede tardar un par de horas). Me encuentro
que me mantiene bloqueadas las tablas que utiliza. Y desde otro aplicativo
que utiliza la misma base de datos no puede consultarla.

Saludos
Jordi

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
29/10/2007 - 14:10 | Informe spam
Jordi Julià,

1 - Que version de SQL Server usas?
2 - Puedes postear la estructura de la tabla, incluyendo restricciones e
indices?
3 - Puedes postear la sentencia update?
4 - Cuantas filas promedio actualiza esa sentencia?
5 - Puedes postear el plan de ejecución?

Como vez, la información que nos brindas no es suficiente como para poder
darte una sugerencia.


AMB

"Jordi Julià" wrote:

Hola a todos,

Tengo un problema con las Transacciones al actualizar una base de datos SQL.
No se muy bien que Isolationlevel debo utilizar para una transacción: mi
intención es que o se actualiza todo o no se actualice nada, pero que no me
bloquee las tablas.

Sería posible un bloqueo a nivel de registro y no como lo que me estoy
encontando que es un bloqueo a nivel de tabla.

No se si me explico bien, pero tengo una aplicación que actualiza varios
registros de varias tablas (INSERT y UPDATE), esta actualización es
considereble (todo el proceso puede tardar un par de horas). Me encuentro
que me mantiene bloqueadas las tablas que utiliza. Y desde otro aplicativo
que utiliza la misma base de datos no puede consultarla.

Saludos
Jordi



Respuesta Responder a este mensaje
#2 Jordi Julià
29/10/2007 - 15:59 | Informe spam
La versión de SQL es la 2005

Las tablas que se actualizan en la transacción son varias (alrededor de unas
20 tablas)

Las sentencias son de Update o de Insert en función de la tabla (por regla
general, Update en las de menos registros -cabeceras- y Inserts en las de
más registros -detalles.)

El promedio de registros, en las de cabecera hablaríamos de 300.000
registros y en detalle entre 1.000.000 y 3.500.000


Mi idea es esteblecer un modelo de actualización para todo el aplicativo que
estoy de manejando (gestión de una compañia de seguros realizada en VB2005)
para evitar bloqueos y los timeout resultado de estos bloqueos.

He comprobado que si inicio la transaccion en el aplicativo VB2005 con
BeginTransaction(ReadCommited), que es el que me marca por defecto, hasta
que no finalizo la transacción me mantiene bloqueadas las tablas.

Saludos
Jordi

"Alejandro Mesa" escribió en el
mensaje news:
Jordi Julià,

1 - Que version de SQL Server usas?
2 - Puedes postear la estructura de la tabla, incluyendo restricciones e
indices?
3 - Puedes postear la sentencia update?
4 - Cuantas filas promedio actualiza esa sentencia?
5 - Puedes postear el plan de ejecución?

Como vez, la información que nos brindas no es suficiente como para poder
darte una sugerencia.


AMB

"Jordi Julià" wrote:

Hola a todos,

Tengo un problema con las Transacciones al actualizar una base de datos
SQL.
No se muy bien que Isolationlevel debo utilizar para una transacción: mi
intención es que o se actualiza todo o no se actualice nada, pero que no
me
bloquee las tablas.

Sería posible un bloqueo a nivel de registro y no como lo que me estoy
encontando que es un bloqueo a nivel de tabla.

No se si me explico bien, pero tengo una aplicación que actualiza varios
registros de varias tablas (INSERT y UPDATE), esta actualización es
considereble (todo el proceso puede tardar un par de horas). Me encuentro
que me mantiene bloqueadas las tablas que utiliza. Y desde otro
aplicativo
que utiliza la misma base de datos no puede consultarla.

Saludos
Jordi



Respuesta Responder a este mensaje
#3 jeastman - Hotmail
29/10/2007 - 17:19 | Informe spam
Hola Jordi.

La verdad que aun no entiendo porque demora tanto tiempo ese proceso, un par
de horas es mucho tiempo, podrías pasar la información que solicita el
compañero Aljando, de verdad sería interesante ver que está pasando.

Saludos.

"Jordi Julià" escribió en el mensaje
news:
La versión de SQL es la 2005

Las tablas que se actualizan en la transacción son varias (alrededor de
unas 20 tablas)

Las sentencias son de Update o de Insert en función de la tabla (por regla
general, Update en las de menos registros -cabeceras- y Inserts en las de
más registros -detalles.)

El promedio de registros, en las de cabecera hablaríamos de 300.000
registros y en detalle entre 1.000.000 y 3.500.000


Mi idea es esteblecer un modelo de actualización para todo el aplicativo
que estoy de manejando (gestión de una compañia de seguros realizada en
VB2005) para evitar bloqueos y los timeout resultado de estos bloqueos.

He comprobado que si inicio la transaccion en el aplicativo VB2005 con
BeginTransaction(ReadCommited), que es el que me marca por defecto, hasta
que no finalizo la transacción me mantiene bloqueadas las tablas.

Saludos
Jordi

"Alejandro Mesa" escribió en el
mensaje news:
Jordi Julià,

1 - Que version de SQL Server usas?
2 - Puedes postear la estructura de la tabla, incluyendo restricciones e
indices?
3 - Puedes postear la sentencia update?
4 - Cuantas filas promedio actualiza esa sentencia?
5 - Puedes postear el plan de ejecución?

Como vez, la información que nos brindas no es suficiente como para poder
darte una sugerencia.


AMB

"Jordi Julià" wrote:

Hola a todos,

Tengo un problema con las Transacciones al actualizar una base de datos
SQL.
No se muy bien que Isolationlevel debo utilizar para una transacción: mi
intención es que o se actualiza todo o no se actualice nada, pero que no
me
bloquee las tablas.

Sería posible un bloqueo a nivel de registro y no como lo que me estoy
encontando que es un bloqueo a nivel de tabla.

No se si me explico bien, pero tengo una aplicación que actualiza varios
registros de varias tablas (INSERT y UPDATE), esta actualización es
considereble (todo el proceso puede tardar un par de horas). Me
encuentro
que me mantiene bloqueadas las tablas que utiliza. Y desde otro
aplicativo
que utiliza la misma base de datos no puede consultarla.

Saludos
Jordi









Respuesta Responder a este mensaje
#4 Jordi Julià
29/10/2007 - 19:22 | Informe spam
Hola,

La verdad es que el tiempo de proceso no me preocupa, pero te expongo la
estructura de la acción que realiza:

- Traspaso de una cartera de pólizas de seguros de unas 300 pólizas de un
agente
- Tiene 1 registro para identificar la póliza - UPDATE-INSERT
- Tiene n registros para los suplementos realizados - INSERT
- Tiene 1 registro que identifica al riesgo - INSERT
- Tiene n registros que complementan al riesgo en un promedio de 4 tablas
por producto. -INSERT
- Tiene n registros que identifican las garantias de la póliza (hay
productos con 15 garantias) -INSERT
- Para cada garantia tiene n registros que identifican las Subgaramtias (hay
garantías con 8 subgarantias) -INSERT
- Para cada subgarantia tiene n registros que identifican los importes
asociados (10 por subgarantia) -INSERT
- Tiene n registros para beneficiarios-INSERT
- Tiene n registros para cláusulas particulares-INSERT

- Luego viene todo el tema de los recibos:
- 1 registro de cabecera de recibo -UPDATE_INSERT
- n registros para las comisiones por garantias/subgarantias -INSERT
- n registros para los importes por garantías/subgarantias.-INSERT

- Y para finalizar los propios logs del traspaso
- 1 registro por pólizas traspasada.-INSERT
- 1 registro por traspaso efectuado.-INSERT

Creo que no me olvido de ninguno, es un proceso lento que esta asumido.
Comprenderás que con la cantidad de tablas que se actualizan una transacción
sea vital, si falla el proceso volverlo para atrás sería terrible.

EL problema que tengo es que bloquea todas estas tablas durante su ejecución
y no me permite consultar otras pólizas de otros agentes. que me bloquee las
que leo y las que actualizo me parece perfecto pero las demás debería
dejarlas libres.

Un saludo y gracias por el interés
Jordi





"jeastman - Hotmail" escribió en el mensaje
news:%
Hola Jordi.

La verdad que aun no entiendo porque demora tanto tiempo ese proceso, un
par de horas es mucho tiempo, podrías pasar la información que solicita el
compañero Aljando, de verdad sería interesante ver que está pasando.

Saludos.

"Jordi Julià" escribió en el mensaje
news:
La versión de SQL es la 2005

Las tablas que se actualizan en la transacción son varias (alrededor de
unas 20 tablas)

Las sentencias son de Update o de Insert en función de la tabla (por
regla general, Update en las de menos registros -cabeceras- y Inserts en
las de más registros -detalles.)

El promedio de registros, en las de cabecera hablaríamos de 300.000
registros y en detalle entre 1.000.000 y 3.500.000


Mi idea es esteblecer un modelo de actualización para todo el aplicativo
que estoy de manejando (gestión de una compañia de seguros realizada en
VB2005) para evitar bloqueos y los timeout resultado de estos bloqueos.

He comprobado que si inicio la transaccion en el aplicativo VB2005 con
BeginTransaction(ReadCommited), que es el que me marca por defecto, hasta
que no finalizo la transacción me mantiene bloqueadas las tablas.

Saludos
Jordi

"Alejandro Mesa" escribió en el
mensaje news:
Jordi Julià,

1 - Que version de SQL Server usas?
2 - Puedes postear la estructura de la tabla, incluyendo restricciones e
indices?
3 - Puedes postear la sentencia update?
4 - Cuantas filas promedio actualiza esa sentencia?
5 - Puedes postear el plan de ejecución?

Como vez, la información que nos brindas no es suficiente como para
poder
darte una sugerencia.


AMB

"Jordi Julià" wrote:

Hola a todos,

Tengo un problema con las Transacciones al actualizar una base de datos
SQL.
No se muy bien que Isolationlevel debo utilizar para una transacción:
mi
intención es que o se actualiza todo o no se actualice nada, pero que
no me
bloquee las tablas.

Sería posible un bloqueo a nivel de registro y no como lo que me estoy
encontando que es un bloqueo a nivel de tabla.

No se si me explico bien, pero tengo una aplicación que actualiza
varios
registros de varias tablas (INSERT y UPDATE), esta actualización es
considereble (todo el proceso puede tardar un par de horas). Me
encuentro
que me mantiene bloqueadas las tablas que utiliza. Y desde otro
aplicativo
que utiliza la misma base de datos no puede consultarla.

Saludos
Jordi













Respuesta Responder a este mensaje
#5 jeastman - Hotmail
29/10/2007 - 19:36 | Informe spam
Mira, aun así, a simple vista me parece mucho tiempo, pero como tu no tienes
problema con los tiempos te recomiendo que te des un vistazo a:

nivel de aislamiento actual (en los libros de pantalla, por ahi tendrás
acceso a más información)

Leete en los mismos libros el siguiente tema: Sugerencias de bloqueo

Saludos.

"Jordi Julià" escribió en el mensaje
news:
Hola,

La verdad es que el tiempo de proceso no me preocupa, pero te expongo la
estructura de la acción que realiza:

- Traspaso de una cartera de pólizas de seguros de unas 300 pólizas de un
agente
- Tiene 1 registro para identificar la póliza - UPDATE-INSERT
- Tiene n registros para los suplementos realizados - INSERT
- Tiene 1 registro que identifica al riesgo - INSERT
- Tiene n registros que complementan al riesgo en un promedio de 4 tablas
por producto. -INSERT
- Tiene n registros que identifican las garantias de la póliza (hay
productos con 15 garantias) -INSERT
- Para cada garantia tiene n registros que identifican las Subgaramtias
(hay garantías con 8 subgarantias) -INSERT
- Para cada subgarantia tiene n registros que identifican los importes
asociados (10 por subgarantia) -INSERT
- Tiene n registros para beneficiarios-INSERT
- Tiene n registros para cláusulas particulares-INSERT

- Luego viene todo el tema de los recibos:
- 1 registro de cabecera de recibo -UPDATE_INSERT
- n registros para las comisiones por garantias/subgarantias -INSERT
- n registros para los importes por garantías/subgarantias.-INSERT

- Y para finalizar los propios logs del traspaso
- 1 registro por pólizas traspasada.-INSERT
- 1 registro por traspaso efectuado.-INSERT

Creo que no me olvido de ninguno, es un proceso lento que esta asumido.
Comprenderás que con la cantidad de tablas que se actualizan una
transacción sea vital, si falla el proceso volverlo para atrás sería
terrible.

EL problema que tengo es que bloquea todas estas tablas durante su
ejecución y no me permite consultar otras pólizas de otros agentes. que me
bloquee las que leo y las que actualizo me parece perfecto pero las demás
debería dejarlas libres.

Un saludo y gracias por el interés
Jordi





"jeastman - Hotmail" escribió en el mensaje
news:%
Hola Jordi.

La verdad que aun no entiendo porque demora tanto tiempo ese proceso, un
par de horas es mucho tiempo, podrías pasar la información que solicita
el compañero Aljando, de verdad sería interesante ver que está pasando.

Saludos.

"Jordi Julià" escribió en el mensaje
news:
La versión de SQL es la 2005

Las tablas que se actualizan en la transacción son varias (alrededor de
unas 20 tablas)

Las sentencias son de Update o de Insert en función de la tabla (por
regla general, Update en las de menos registros -cabeceras- y Inserts en
las de más registros -detalles.)

El promedio de registros, en las de cabecera hablaríamos de 300.000
registros y en detalle entre 1.000.000 y 3.500.000


Mi idea es esteblecer un modelo de actualización para todo el aplicativo
que estoy de manejando (gestión de una compañia de seguros realizada en
VB2005) para evitar bloqueos y los timeout resultado de estos bloqueos.

He comprobado que si inicio la transaccion en el aplicativo VB2005 con
BeginTransaction(ReadCommited), que es el que me marca por defecto,
hasta que no finalizo la transacción me mantiene bloqueadas las tablas.

Saludos
Jordi

"Alejandro Mesa" escribió en
el mensaje news:
Jordi Julià,

1 - Que version de SQL Server usas?
2 - Puedes postear la estructura de la tabla, incluyendo restricciones
e
indices?
3 - Puedes postear la sentencia update?
4 - Cuantas filas promedio actualiza esa sentencia?
5 - Puedes postear el plan de ejecución?

Como vez, la información que nos brindas no es suficiente como para
poder
darte una sugerencia.


AMB

"Jordi Julià" wrote:

Hola a todos,

Tengo un problema con las Transacciones al actualizar una base de
datos SQL.
No se muy bien que Isolationlevel debo utilizar para una transacción:
mi
intención es que o se actualiza todo o no se actualice nada, pero que
no me
bloquee las tablas.

Sería posible un bloqueo a nivel de registro y no como lo que me estoy
encontando que es un bloqueo a nivel de tabla.

No se si me explico bien, pero tengo una aplicación que actualiza
varios
registros de varias tablas (INSERT y UPDATE), esta actualización es
considereble (todo el proceso puede tardar un par de horas). Me
encuentro
que me mantiene bloqueadas las tablas que utiliza. Y desde otro
aplicativo
que utiliza la misma base de datos no puede consultarla.

Saludos
Jordi

















Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida