Problema raro con bloqueos

03/03/2004 - 10:10 por Antonio | Informe spam
Hola a todos, os escribo porque tengo un problema
bastante raro con los bloqueos del sql server 2000.
Tengo una base de datos de un cliente que utilizan muchos
usuarios a la vez aproximadamente unos 60 o mas usuarios,
los usuarios entran a la base de datos mediante una
aplicacion hecha en Visual Basic 6.0 conectandose por
ODBC mediante ADO.
El caso es que tengo un proceso bastante critico con
transacciones y por tanto cuando algun usuario lo realiza
hago un BeginTrans y al finalizar hago un Committrans (o
si la transaccion falla hago un rollback). Este proceso
bloquea varios registros de varias tablas mientras dura
el mismo (lo cual es normal), pero lo que me ocurre es
que no solo me bloquea los registros en uso, sino que me
bloquea toda la tabla y a los demas usuarios no les deja
usarla para nada, aunque pretendan entrar a otros
registros que no tienen nada que ver con la transacción.
Ahora aqui viene lo raro, me hice una copia de la base de
datos para hacer pruebas con ella en mi oficina y hago
exactamente el mismo proceso que a ellos les produce el
bloqueo y a mi solo me bloquea la fila, no la tabla como
les ocurre a ellos!!!.
Por que puede ser esto??, puede ser debido a que entran
muchos usuarios a la base de datos a la vez y por eso es
mas restrictivo el sql server???. Yo he probado en mi
oficina con 3 o 4 personas a la vez con su misma base de
datos pero no me bloquea nunca la tabla, solo los
registros que tiene en uso el proceso.

Siento el ladrillo, ojala alguien me pueda explicar a que
se debe a ver si asi puedo atajar el problema porque me
tiene loco.

Gracias.

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
03/03/2004 - 14:09 | Informe spam
Hola!! me parece que tenes un TABLOCK por ahi!

Primero yo revisaria este store "sp_tableoption"

por si la tabla esta configurada como para bloqueos de tabla y no de pagina
cuando haces algun bulk!!

Porque tambien no revisas con el admin coorporativo los bloqueos en ese
momento como estan?

Yo te cuento que tengo mas de 100 usuarios y ese problema lo tengo
controlado!!!

Revisate esto y seguimos


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Antonio" escribió en el mensaje
news:645b01c400ff$4fe5feb0$
Hola a todos, os escribo porque tengo un problema
bastante raro con los bloqueos del sql server 2000.
Tengo una base de datos de un cliente que utilizan muchos
usuarios a la vez aproximadamente unos 60 o mas usuarios,
los usuarios entran a la base de datos mediante una
aplicacion hecha en Visual Basic 6.0 conectandose por
ODBC mediante ADO.
El caso es que tengo un proceso bastante critico con
transacciones y por tanto cuando algun usuario lo realiza
hago un BeginTrans y al finalizar hago un Committrans (o
si la transaccion falla hago un rollback). Este proceso
bloquea varios registros de varias tablas mientras dura
el mismo (lo cual es normal), pero lo que me ocurre es
que no solo me bloquea los registros en uso, sino que me
bloquea toda la tabla y a los demas usuarios no les deja
usarla para nada, aunque pretendan entrar a otros
registros que no tienen nada que ver con la transacción.
Ahora aqui viene lo raro, me hice una copia de la base de
datos para hacer pruebas con ella en mi oficina y hago
exactamente el mismo proceso que a ellos les produce el
bloqueo y a mi solo me bloquea la fila, no la tabla como
les ocurre a ellos!!!.
Por que puede ser esto??, puede ser debido a que entran
muchos usuarios a la base de datos a la vez y por eso es
mas restrictivo el sql server???. Yo he probado en mi
oficina con 3 o 4 personas a la vez con su misma base de
datos pero no me bloquea nunca la tabla, solo los
registros que tiene en uso el proceso.

Siento el ladrillo, ojala alguien me pueda explicar a que
se debe a ver si asi puedo atajar el problema porque me
tiene loco.

Gracias.




Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 21/02/2004
Respuesta Responder a este mensaje
#2 Javier Loria
03/03/2004 - 21:52 | Informe spam
Hola Antonio:
MS SQL tiene una arquitectura que escala los locks, esto es si bloqueas
una fila, y luego otra, y despues otra, el servidor puede tomar la desicion
de "escalar" el bloque "olvidandose" de bloquear filas y bloqueando paginas
o tablas completas.
Las pruebas que estas haciendo probablmente no te sirven mucho porque no
emulan el ambiente de produccion. Prueba respaldar la base de datos y
activar el Analizador de SQL para capturar las sentencias que es estan
enviando al servidor. Luego restauras la BD en tu maquina de desarrollo y
ejecutas las sentencias para simular y estudiar la carga del servidor.
Una recomendacion adicional, no uses ODBC desde ADO para atacar una BD
de SQL 2000, es mucho mejor (mas rapido) si usas directamente OLE DB.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Antonio escribio:
Hola a todos, os escribo porque tengo un problema
bastante raro con los bloqueos del sql server 2000.
Tengo una base de datos de un cliente que utilizan muchos
usuarios a la vez aproximadamente unos 60 o mas usuarios,
los usuarios entran a la base de datos mediante una
aplicacion hecha en Visual Basic 6.0 conectandose por
ODBC mediante ADO.
El caso es que tengo un proceso bastante critico con
transacciones y por tanto cuando algun usuario lo realiza
hago un BeginTrans y al finalizar hago un Committrans (o
si la transaccion falla hago un rollback). Este proceso
bloquea varios registros de varias tablas mientras dura
el mismo (lo cual es normal), pero lo que me ocurre es
que no solo me bloquea los registros en uso, sino que me
bloquea toda la tabla y a los demas usuarios no les deja
usarla para nada, aunque pretendan entrar a otros
registros que no tienen nada que ver con la transacción.
Ahora aqui viene lo raro, me hice una copia de la base de
datos para hacer pruebas con ella en mi oficina y hago
exactamente el mismo proceso que a ellos les produce el
bloqueo y a mi solo me bloquea la fila, no la tabla como
les ocurre a ellos!!!.
Por que puede ser esto??, puede ser debido a que entran
muchos usuarios a la base de datos a la vez y por eso es
mas restrictivo el sql server???. Yo he probado en mi
oficina con 3 o 4 personas a la vez con su misma base de
datos pero no me bloquea nunca la tabla, solo los
registros que tiene en uso el proceso.

Siento el ladrillo, ojala alguien me pueda explicar a que
se debe a ver si asi puedo atajar el problema porque me
tiene loco.

Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida