Algo confundido en Transacciones en Sql2000

10/07/2006 - 23:35 por Dany Acosta | Informe spam
Amigo estoy probando los niveles de aislamiento de transacciones en 2
ventanas de Query Analyzer de una misma tabla.

Ventana 1 tiene:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Begin Tran
declare @va int
set @va=0
While @va<000
Begin
print @va
Insert into categories (CategoryName,Description) Values ('AAAA','')
set @va = @va + 1
if @va>11000
Begin
Break
End
Else
Continue
End
Commit Tran

Ventana 2 tiene esto
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Begin Tran
Insert into categories (CategoryName,Description) Values ('BBBB','')
Insert into categories (CategoryName,Description) Values ('BBBB','')
Insert into categories (CategoryName,Description) Values ('BBBB','')
Commit Tran

Cuando Ejecuto las 2 ventanas en paralelo supuestamente Una ventana
entra en transaccion y la otra ventana espera que la transaccion se
libere para que haga los cambios en la misma tabla. Pero me doy con la
sorpresa que la ventana 2 termina rapido y despues de un ratito termina
la ventana 1 con los cambios hechos.

Como trabaja el Nivel Serializable?:

Realiza N-Transacciones Aisladas en los Insert,Update,Delete y bloquea
las lecturas con Select hasta que se liberen las transacciones ????

es recomendable trabajar con este tipo de aislamiento en un entorno de
60 usuarios de las cuales 10 Actualizan en una tabla
paralelamente(Instantaneamente) y los otros 50 son lectura de esta tabla
o que tipo de aislamiento debo usar para este entorno???

La Data es constamente consultada.

Gracias y disculpen por lo extenso del mensaje


Dany Acosta
Developers -

Preguntas similare

Leer las respuestas

#1 Maxi
11/07/2006 - 00:39 | Informe spam
Hola Dany, en tu ejemplo estas siempre haciendo insert, porque deberia no
dejarlo hacer? si no estas trabajando sobre los mismos registros. Vos que es
lo q buscas? que mientras alguien haga un insert nadie mas pueda hacerlo?
esto es muy restrictivo segun mi opinion, al igual que el tipo de
aislamiento que has seleccionado.
Mira lo que dicen los BOL

SERIALIZABLE

Se establece un bloqueo de intervalo en el conjunto de datos, lo que impide
que otros usuarios actualicen o inserten filas en el conjunto de datos hasta
que finalice la transacción. Es el más restrictivo de los cuatro niveles de
aislamiento. Al ser menor la simultaneidad, sólo se debe utilizar esta
opción cuando sea necesario. Esta opción tiene el mismo efecto que
establecer HOLDLOCK en todas las tablas y en todas las instrucciones SELECT
de la transacción




Salu2

Microsoft MVP SQL Server
www.sqlgururs.org
Email:


"Dany Acosta" wrote in message
news:
Amigo estoy probando los niveles de aislamiento de transacciones en 2
ventanas de Query Analyzer de una misma tabla.

Ventana 1 tiene:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Begin Tran
declare @va int
set @va=0
While @va<000
Begin
print @va
Insert into categories (CategoryName,Description) Values ('AAAA','')
set @va = @va + 1
if @va>11000
Begin Break
End
Else Continue
End
Commit Tran

Ventana 2 tiene esto
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Begin Tran
Insert into categories (CategoryName,Description) Values ('BBBB','')
Insert into categories (CategoryName,Description) Values ('BBBB','')
Insert into categories (CategoryName,Description) Values ('BBBB','')
Commit Tran

Cuando Ejecuto las 2 ventanas en paralelo supuestamente Una ventana entra
en transaccion y la otra ventana espera que la transaccion se libere para
que haga los cambios en la misma tabla. Pero me doy con la sorpresa que la
ventana 2 termina rapido y despues de un ratito termina la ventana 1 con
los cambios hechos.

Como trabaja el Nivel Serializable?:

Realiza N-Transacciones Aisladas en los Insert,Update,Delete y bloquea las
lecturas con Select hasta que se liberen las transacciones ????

es recomendable trabajar con este tipo de aislamiento en un entorno de 60
usuarios de las cuales 10 Actualizan en una tabla
paralelamente(Instantaneamente) y los otros 50 son lectura de esta tabla o
que tipo de aislamiento debo usar para este entorno???

La Data es constamente consultada.

Gracias y disculpen por lo extenso del mensaje


Dany Acosta
Developers -
Respuesta Responder a este mensaje
#2 Developers - Dany Acosta
11/07/2006 - 04:17 | Informe spam
La idea amigo es aplicar esto sobre una Aplicación para Control de Stocks de Productos y estoy
buscando algún tipo de transacción que me pueda garantizar que no exista desfases de stocks.
Mi duda sobre esto es el tipo de aislamiento es que tan robusto era y si era recomendable, la idea
no es bloquear a todos mientras uno inserta si no que pueda existir varias inserciones a una misma
tabla de diferente usuarios paralelamente pero que no exista un Update de los mismos registros en 2
o mas usuarios.

Realmente me gustaría sus opiones sobre esto y sus experiencias que tuvieran

Gracias


Maxi escribió:
Hola Dany, en tu ejemplo estas siempre haciendo insert, porque deberia no
dejarlo hacer? si no estas trabajando sobre los mismos registros. Vos que es
lo q buscas? que mientras alguien haga un insert nadie mas pueda hacerlo?
esto es muy restrictivo segun mi opinion, al igual que el tipo de
aislamiento que has seleccionado.
Mira lo que dicen los BOL

SERIALIZABLE

Se establece un bloqueo de intervalo en el conjunto de datos, lo que impide
que otros usuarios actualicen o inserten filas en el conjunto de datos hasta
que finalice la transacción. Es el más restrictivo de los cuatro niveles de
aislamiento. Al ser menor la simultaneidad, sólo se debe utilizar esta
opción cuando sea necesario. Esta opción tiene el mismo efecto que
establecer HOLDLOCK en todas las tablas y en todas las instrucciones SELECT
de la transacción


Respuesta Responder a este mensaje
#3 Maxi
11/07/2006 - 14:10 | Informe spam
Bueno eso es asi, pero en tu ejemplo no has hecho eso ;)


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Developers - Dany Acosta" escribió en el mensaje
news:
La idea amigo es aplicar esto sobre una Aplicación para Control de Stocks
de Productos y estoy buscando algún tipo de transacción que me pueda
garantizar que no exista desfases de stocks.
Mi duda sobre esto es el tipo de aislamiento es que tan robusto era y si
era recomendable, la idea no es bloquear a todos mientras uno inserta si
no que pueda existir varias inserciones a una misma tabla de diferente
usuarios paralelamente pero que no exista un Update de los mismos
registros en 2 o mas usuarios.

Realmente me gustaría sus opiones sobre esto y sus experiencias que
tuvieran

Gracias


Maxi escribió:
Hola Dany, en tu ejemplo estas siempre haciendo insert, porque deberia no
dejarlo hacer? si no estas trabajando sobre los mismos registros. Vos que
es lo q buscas? que mientras alguien haga un insert nadie mas pueda
hacerlo? esto es muy restrictivo segun mi opinion, al igual que el tipo
de aislamiento que has seleccionado.
Mira lo que dicen los BOL

SERIALIZABLE

Se establece un bloqueo de intervalo en el conjunto de datos, lo que
impide que otros usuarios actualicen o inserten filas en el conjunto de
datos hasta que finalice la transacción. Es el más restrictivo de los
cuatro niveles de aislamiento. Al ser menor la simultaneidad, sólo se
debe utilizar esta opción cuando sea necesario. Esta opción tiene el
mismo efecto que establecer HOLDLOCK en todas las tablas y en todas las
instrucciones SELECT de la transacción

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