Evitar locks en ejecuciones de SP's

11/09/2009 - 17:09 por jose | Informe spam
Buenos días. Existe la posibilidad de setear a nivel base de datos SET
TRANSACTION ISOLATION LEVEL READ UNCOMMITTED?

Tengo entendido que en SQL2005 o superior hay que ejecutar:

ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT ON;

Es realmente así?
es posible hacer esto en SQL 2000?

Necesito setear en SQL 2000 lectura sucia para los SPs y evitar lockeos.
Pero tengo 1000 sp's que no puedo modificar uno por uno, tampoco setearlo a
nivel servidor.

Deseo hacerlo a nivel base de datos.

muchas gracias

Preguntas similare

Leer las respuestas

#1 Emilio Boucau
11/09/2009 - 17:19 | Informe spam
Jose,

Hasta donde se, no hay manera de cambiar eso del lado del server / base en
SQL Server 2000. De todas maneras, tu decision de permitir por default
dirty reads en los SPs me parece francamente peligroso, a menos que tengas
muy buenas razones de negocio y asi lo manejes dentro del codigo. La
cantidad de inconsistencias de datos que te vas a generar sera abismal
(dirty reads, phantom rows, lost updates, etc.). Evitar lockeos no es razon
suficiente, pensa que los locks estan para algo, no ? Deberias analizar que
codigo tiene problemas y ver de mejorar eso.

Saludos !

Emilio Boucau
Buenos Aires - Argentina

"jose" wrote in message
news:
Buenos días. Existe la posibilidad de setear a nivel base de datos SET
TRANSACTION ISOLATION LEVEL READ UNCOMMITTED?

Tengo entendido que en SQL2005 o superior hay que ejecutar:

ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT ON;

Es realmente así?
es posible hacer esto en SQL 2000?

Necesito setear en SQL 2000 lectura sucia para los SPs y evitar lockeos.
Pero tengo 1000 sp's que no puedo modificar uno por uno, tampoco setearlo
a
nivel servidor.

Deseo hacerlo a nivel base de datos.

muchas gracias
Respuesta Responder a este mensaje
#2 Ruben Garrigos
11/09/2009 - 17:23 | Informe spam
Hola jose,

El nivel de aislamiento read committed snapshot no equivale a la lectura
sucia pero sí soluciona gran parte de los problemas de bloqueos más típicos
entre lectores y escritores. En SQL 2000 no dispones de dicho nivel de aislamiento
pues depende de características propias del motor de SQL Server 2005 o superior.

Lo que comentas de utilizar el nivel de aislamiento a READ UNCOMMITTED no
necesitas hacerlo en cada SP, pues podrías lanzar dicho comando SET una única
vez por sesión y sería suficiente. Obviamente si alguno de los procedimientos
sobreescribe dicho nivel de aislamiento o realiza operaciones de modificación
(un simple insert/update/delete) no obtendrías prácticamente ventaja en su
uso. Piensa que lo que consigues con ese nivel de aislamiento es realizar
lecturas que no adquieren bloqueos compartidos sobre las páginas arriesgándote
a todo tipo de artefactos siendo el más conocido la lectura sucia (lectura
de datos que aún no se han confirmado).

Te recomiendo encarecidamente que busques solucionar tus problemas de bloqueos
analizando la razón por la que se producen y mejorando tu indexación, mantenimiento
de base de datos, calidad del código, etc. en vez de depender de la lectura
sucia. La migración a SQL Server 2005 te proporcionará también la opción
de utilizar el nivel de aislamiento READ COMMITTED SNAPSHOT el cual te puede
ser útil aunque debes analizar también el impacto que tendrá sobre otros
aspectos (como la carga sobre tempdb).

Un saludo,

Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba

Buenos días. Existe la posibilidad de setear a nivel base de datos SET
TRANSACTION ISOLATION LEVEL READ UNCOMMITTED?

Tengo entendido que en SQL2005 o superior hay que ejecutar:

ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT ON;
Es realmente así?
es posible hacer esto en SQL 2000?
Necesito setear en SQL 2000 lectura sucia para los SPs y evitar
lockeos. Pero tengo 1000 sp's que no puedo modificar uno por uno,
tampoco setearlo a nivel servidor.

Deseo hacerlo a nivel base de datos.

muchas gracias

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