Update y bloqueos

02/11/2006 - 18:31 por xtian | Informe spam
Hola a todos, tengo una duda de conceptos, miren cuando hago un query
tan simple como este:
update tabla
set tab_cod = '0001'
where year(tab_fch) = 2002

Que es lo que sucede internamente, se hace un bloqueo completo de la
tabla? lo digo porque tengo una tabla parecida a esta y estoy seguro
que nadie manipula datos tan antiguos del año 2002, sin embargo cuando
corro el update bloqueo a muchos usuarios que supuestamente estan
operando con datos actuales de la tabla y eso no es lo que busco,
supuestamente deberia bloquear solo a aquellos que estan trabajando
data del año 2002, estoy en lo correcto? o hay algo que se me esta
pasando?

Gracias ...

Preguntas similare

Leer las respuestas

#6 Maxi
02/11/2006 - 20:32 | Informe spam
Gracias por la correcion, queria decir otra cosa y me salio cualquiera :S
pero el metodo de bloqueos es como indicas en el post anterior


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Javier Loria" escribió en el mensaje
news:uFYr73q$
Hola Maxi:
Disculpa la correcion: "SQL no bloquea por registros sino por paginas"
no es cierto.
Revisa este codigo en el Query Analizer o en Management Studio:
> CREATE DATABASE Prueba
GO
USE Prueba
GO
CREATE TABLE Demo(
Col1 INT NOT NULL PRIMARY KEY
, Blanco CHAR(100) NOT NULL
)
GO
INSERT Demo(Col1, Blanco)
SELECT 1, 'DEMO1'
UNION ALL
SELECT 2, 'DEMO2'
GO
BEGIN TRAN
UPDATE Demo
SET Blanco='Nueva Demo1'
WHERE Col1=1
> En otra ventana escribe:
> USE Prueba
GO
BEGIN TRAN
UPDATE Demo
SET Blanco='Nueva Demo2'
WHERE Col1=2

> Verás como la primera no bloquea la segunda.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning
"Maxi" wrote in message
news:uZk5hlq$
Hola, depende, SQL no bloquea por registros sino por paginas y hay
ocaciones donde si son muchas las paginas podria hacer un bloqueo general
de la tabla
Ademas en este query estas teniendo un problema importante que es el uso
de funciones en el Where "where year(tab_fch) = 2002"
esto hara que si hay un indice para esa columna no sea usado de forma
eficiente con lo cual la query tardara mas y esto se traduce en mas
tiempo de bloqueo.
Yo te recomiendo que cambies primero esa instruccion en el where por algo
asi como

where tab_fch >= '20020101' and tab_fch <'20030101'




Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"xtian" escribió en el mensaje
news:
Hola a todos, tengo una duda de conceptos, miren cuando hago un query
tan simple como este:
update tabla
set tab_cod = '0001'
where year(tab_fch) = 2002

Que es lo que sucede internamente, se hace un bloqueo completo de la
tabla? lo digo porque tengo una tabla parecida a esta y estoy seguro
que nadie manipula datos tan antiguos del año 2002, sin embargo cuando
corro el update bloqueo a muchos usuarios que supuestamente estan
operando con datos actuales de la tabla y eso no es lo que busco,
supuestamente deberia bloquear solo a aquellos que estan trabajando
data del año 2002, estoy en lo correcto? o hay algo que se me esta
pasando?

Gracias ...






Respuesta Responder a este mensaje
#7 Alejandro Mesa
03/11/2006 - 14:08 | Informe spam
Javier,

Aqui esta la granularidad y jerarquia que usa SQL Server 2005 (muy parecido
es en 2000) para bloquear. Con esto sustentamos lo que dijistes.

Lock Granularity and Hierarchies
http://msdn2.microsoft.com/en-us/li...89849.aspx


AMB

"Javier Loria" wrote:

Hola Maxi:
Disculpa la correcion: "SQL no bloquea por registros sino por paginas"
no es cierto.
Revisa este codigo en el Query Analizer o en Management Studio:
> CREATE DATABASE Prueba
GO
USE Prueba
GO
CREATE TABLE Demo(
Col1 INT NOT NULL PRIMARY KEY
, Blanco CHAR(100) NOT NULL
)
GO
INSERT Demo(Col1, Blanco)
SELECT 1, 'DEMO1'
UNION ALL
SELECT 2, 'DEMO2'
GO
BEGIN TRAN
UPDATE Demo
SET Blanco='Nueva Demo1'
WHERE Col1=1
> En otra ventana escribe:
> USE Prueba
GO
BEGIN TRAN
UPDATE Demo
SET Blanco='Nueva Demo2'
WHERE Col1=2

> Verás como la primera no bloquea la segunda.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning
"Maxi" wrote in message
news:uZk5hlq$
> Hola, depende, SQL no bloquea por registros sino por paginas y hay
> ocaciones donde si son muchas las paginas podria hacer un bloqueo general
> de la tabla
> Ademas en este query estas teniendo un problema importante que es el uso
> de funciones en el Where "where year(tab_fch) = 2002"
> esto hara que si hay un indice para esa columna no sea usado de forma
> eficiente con lo cual la query tardara mas y esto se traduce en mas tiempo
> de bloqueo.
> Yo te recomiendo que cambies primero esa instruccion en el where por algo
> asi como
>
> where tab_fch >= '20020101' and tab_fch <'20030101'
>
>
>
>
> Salu2
>
> Microsoft MVP SQL Server
> Culminis Speaker
> INETA Speaker
>
> "xtian" escribió en el mensaje
> news:
> Hola a todos, tengo una duda de conceptos, miren cuando hago un query
> tan simple como este:
> update tabla
> set tab_cod = '0001'
> where year(tab_fch) = 2002
>
> Que es lo que sucede internamente, se hace un bloqueo completo de la
> tabla? lo digo porque tengo una tabla parecida a esta y estoy seguro
> que nadie manipula datos tan antiguos del año 2002, sin embargo cuando
> corro el update bloqueo a muchos usuarios que supuestamente estan
> operando con datos actuales de la tabla y eso no es lo que busco,
> supuestamente deberia bloquear solo a aquellos que estan trabajando
> data del año 2002, estoy en lo correcto? o hay algo que se me esta
> pasando?
>
> Gracias ...
>
>



Respuesta Responder a este mensaje
#8 Javier Loria
03/11/2006 - 16:26 | Informe spam
Hola Alejandro:
Muchas gracias, lo habia buscado y no lo habia encontrado.
Saludos,


Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Alejandro Mesa" wrote in message
news:
Javier,

Aqui esta la granularidad y jerarquia que usa SQL Server 2005 (muy
parecido
es en 2000) para bloquear. Con esto sustentamos lo que dijistes.

Lock Granularity and Hierarchies
http://msdn2.microsoft.com/en-us/li...89849.aspx


AMB

"Javier Loria" wrote:

Hola Maxi:
Disculpa la correcion: "SQL no bloquea por registros sino por
paginas"
no es cierto.
Revisa este codigo en el Query Analizer o en Management Studio:
>> CREATE DATABASE Prueba
GO
USE Prueba
GO
CREATE TABLE Demo(
Col1 INT NOT NULL PRIMARY KEY
, Blanco CHAR(100) NOT NULL
)
GO
INSERT Demo(Col1, Blanco)
SELECT 1, 'DEMO1'
UNION ALL
SELECT 2, 'DEMO2'
GO
BEGIN TRAN
UPDATE Demo
SET Blanco='Nueva Demo1'
WHERE Col1=1
>> En otra ventana escribe:
>> USE Prueba
GO
BEGIN TRAN
UPDATE Demo
SET Blanco='Nueva Demo2'
WHERE Col1=2

>> Verás como la primera no bloquea la segunda.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning
"Maxi" wrote in message
news:uZk5hlq$
> Hola, depende, SQL no bloquea por registros sino por paginas y hay
> ocaciones donde si son muchas las paginas podria hacer un bloqueo
> general
> de la tabla
> Ademas en este query estas teniendo un problema importante que es el
> uso
> de funciones en el Where "where year(tab_fch) = 2002"
> esto hara que si hay un indice para esa columna no sea usado de forma
> eficiente con lo cual la query tardara mas y esto se traduce en mas
> tiempo
> de bloqueo.
> Yo te recomiendo que cambies primero esa instruccion en el where por
> algo
> asi como
>
> where tab_fch >= '20020101' and tab_fch <'20030101'
>
>
>
>
> Salu2
>
> Microsoft MVP SQL Server
> Culminis Speaker
> INETA Speaker
>
> "xtian" escribió en el mensaje
> news:
> Hola a todos, tengo una duda de conceptos, miren cuando hago un query
> tan simple como este:
> update tabla
> set tab_cod = '0001'
> where year(tab_fch) = 2002
>
> Que es lo que sucede internamente, se hace un bloqueo completo de la
> tabla? lo digo porque tengo una tabla parecida a esta y estoy seguro
> que nadie manipula datos tan antiguos del año 2002, sin embargo cuando
> corro el update bloqueo a muchos usuarios que supuestamente estan
> operando con datos actuales de la tabla y eso no es lo que busco,
> supuestamente deberia bloquear solo a aquellos que estan trabajando
> data del año 2002, estoy en lo correcto? o hay algo que se me esta
> pasando?
>
> Gracias ...
>
>



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