Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Bloqueo tabla Sql Server 2008

Estas en el tema de Bloqueo tabla Sql Server 2008 en el foro de Bases de Datos General en Foros del Web. Buenos días. Tengo un problema y espero que me puedan ayudar. Tengo una base de datos sql server 2008. Existen varias aplicaciones java que atacan ...
  #1 (permalink)  
Antiguo 01/06/2017, 02:24
 
Fecha de Ingreso: octubre-2015
Mensajes: 7
Antigüedad: 9 años, 1 mes
Puntos: 0
Bloqueo tabla Sql Server 2008

Buenos días.

Tengo un problema y espero que me puedan ayudar. Tengo una base de datos sql server 2008. Existen varias aplicaciones java que atacan a esa base de datos. Una de ellas lanza un proceso que inserta datos en una tabla. Ese proceso suele tardar hasta 10 minutos haciendo inserts. El problema es que otras aplicaciones intentan leer los campos de esa tabla, y da un error de ReadTimeOut.
Yo, que no tengo mucha idea de base de datos supuse (erroneamente o no) que puede ser que el proceso que hace los inserts bloquee la tabla. ¿Estoy en lo cierto?, si es así, ¿Hay alguna manera de configurar la base de datos para que si una aplicación esta haciendo inserts, otra pueda hacer Select al mismo tiempo?

De antemano, muchas gracias por vuestra ayuda.

Un saludo.
  #2 (permalink)  
Antiguo 01/06/2017, 07:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Bloqueo tabla Sql Server 2008

Asi es, cuando se hace un insert se realiza un bloqueo de la misma, ahora si quieres hacer un select a esa tabla sin esperar a que termine el proceso puedes agregar a tus queries el hit (with nolock) pero con esto puedes obtener lecturas sucias(datos que no son reales).
Nolock

Ahora el problema aqui es un insert que dura mucho tiempo, cuantos registros estas insertando? como se hace la insercion? no has probado a hacer ese mismo insert por batchs, digamos si insertas 10,000 registros en lugar de tratar de insertalos todos en una misma sentencia, tratar de ir insertando de 1000 en 1000?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 01/06/2017, 16:43
 
Fecha de Ingreso: octubre-2015
Mensajes: 7
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Bloqueo tabla Sql Server 2008

Hola Libras. En primer lugar muchas gracias por tu respuesta.

Estoy de acuerdo contigo con que el programa que hace los insert se puede optimizar mucho, el problema es que no lo hice yo, ni siquiera tengo el mantenimiento del mismo, por lo que tengo que adaptarme a el. No sé cuantos registros inserta cada vez que se ejecuta el proceso, pero para que te hagas una idea, tarda entre 10 y 15 minutos.

No entendí muy bien el concepto de "lectura sucia". ¿No hay forma de hacer una select y que devuelva "lo que haya" aunque dentro de 1 minuto haya 100 registros mas?

Muchas gracias por tu ayuda.
Un saludo.
  #4 (permalink)  
Antiguo 02/06/2017, 07:32
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Bloqueo tabla Sql Server 2008

No leiste el link que te mande vdd? ahi se explica el uso de nolock, que es un query hint para que te regrese lo que esta en la tabla sin importar que haya registros insertandose o actualizandose, eso es lo que se llama una lectura sucia, ya que los datos al momento de leerlos pueden no ser correctos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 06/06/2017, 23:58
 
Fecha de Ingreso: octubre-2015
Mensajes: 7
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Bloqueo tabla Sql Server 2008

Hola Libras.

Discúlpame, la primera vez que vi la respuesta no me di cuenta del enlace. Gracias a tu enlace he modificado la query y parece que todo funciona correctamente. Al ser un proceso que se ejecuta cada 15 minutos, aquellos datos que se estuviesen insertado en el momento de la primera lectura, no estarán marcados como enviados, por lo que en la siguiente ejecución del proceso se enviará.

Gracias nuevamente. Un saludo
  #6 (permalink)  
Antiguo 07/06/2017, 08:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Bloqueo tabla Sql Server 2008

Tema fuera del grupo SQL SERVER
__________________
MCTS Isaias Islas

Etiquetas: bloqueo, campos, server, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:31.