Forums Últimos mensajes - Powered by IBM
 
Tags Palabras claves

Bloqueos

08/03/2005 - 21:15 por Jaac | Informe spam
Hola

Tengo una aplicación desarrollada en VB que accede a una base de datos que
comparto con otras aplicaciones desarrolladas por terceros, en un principio
ocurrian muchos errores de mis aplicaciones provocados por DeadLocks, la
solución inmediata fue configurar el nivel de aislamiento de la conexion a
ReadUncommited y establecer de forma explícita el bloqueo de las
transacciones de la siguiente forma:

Consultas: With(Nolock)

Actualizaciones: (WithRowlock)

Esto resolvio la situación, sin embargo en un análisis posterior detectamos
que cada que se ejecutaba cualquier transaccion a base de datos, incluyendo
algun select se bloqueaba la tabla en cuestión, mi pregunta es si hay algún
parametro incluso dentro de la misma base de datos que permita controlar ese
bloqueo a tablas ya que según la documentación de SQL Server 2000 las
transacciones por default bloquean solo los registros.
 

Leer las respuestas

#1 Gustavo Larriera [MVP]
08/03/2005 - 21:22 | Informe spam
El problema está en la lógica de la aplicación. Cuando tienes deadlocks
(interbloqueos) el primer culpable es la aplicación. SQL Server
simplemente sirve sus datos de acuerdo a como la aplicación se los
solicita.

El uso de Read Uncommited y el hint NOLOCK solamente es de utilidad en
ambientes de sólo-lectura. Si los datos están en pleno cambio, solo
provocaras lecturas incorrectas de los mismos.

Puedes preguntar en los foros de programación acerca de cuales son las
practicas recomendadas de programacion concurrente contra la base de
datos. Si no te molesta leer inglés, mira estos artículos (el último
solamente de interes si usas COM+):

SQL Server technical bulletin - How to resolve a deadlock
http://support.microsoft.com/defaul...-us;832524

Minimizing Deadlocks
http://msdn.microsoft.com/library/d...a_3hdf.asp

Troubleshooting Deadlocks
http://msdn.microsoft.com/library/d...e_5xrn.asp

COM+ Transactions Concepts
http://msdn.microsoft.com/library/d...s_6b5f.asp



Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.



"Jaac" wrote in message
news::
Hola

Tengo una aplicación desarrollada en VB que accede a una base de datos
que
comparto con otras aplicaciones desarrolladas por terceros, en un
principio
ocurrian muchos errores de mis aplicaciones provocados por DeadLocks, la

solución inmediata fue configurar el nivel de aislamiento de la conexion
a
ReadUncommited y establecer de forma explà­cita el bloqueo de las
transacciones de la siguiente forma:

Consultas: With(Nolock)

Actualizaciones: (WithRowlock)

Esto resolvio la situación, sin embargo en un anà¡lisis posterior
detectamos
que cada que se ejecutaba cualquier transaccion a base de datos,
incluyendo
algun select se bloqueaba la tabla en cuestión, mi pregunta es si hay
algàºn
parametro incluso dentro de la misma base de datos que permita controlar
ese
bloqueo a tablas ya que segàºn la documentación de SQL Server 2000 las
transacciones por default bloquean solo los registros.

Preguntas similares