Error 1204

08/06/2005 - 11:03 por Javi | Informe spam
Hola.
A ver si me podeis echar una mano con este error:

"The SQL Server cannot obtain a LOCK resource at this time. Rerun your
statement when there are fewer active users or ask the system administrator
to check the SQL Server lock and memory configuration."

Tengo dos trabajos:
El primero carga datos de ventas diariamente a las 7:00
El segundo actualiza 10000 registros de la tabla de ventas en un trabajo
programado para que se ejecute automaticamente cuando la CPU está sin usar.

Como el segundo se ejecuta aleatoriamente, a veces me coinciden y me provoca
este error. Ya lo he corregido para que no me coincidan y que no se produzca
el error, pero me gustaría saber, por qué ocurre.

Más información: el error me ocurre cuando ejecuto la siguiente consulta:

SELECT
COUNT(ID_ART)
FROM
Ventas
WHERE
articulo_actualizado IS NULL

La tabla de Ventas tiene más de 46 millones de registros y la ejecución de
la consulta anterior me tarda aprox. 9 minutos. He comprobado con el monitor
del sistema que cuando ejecuto esta consulta, el número de "Lock
Requests/sec" crece hasta más de 2 millones y si coincide con el otro
trabajo, pues me produce el error.

¿Alguien puede explicarme que tiene esta consulta que me hace crecer tanto
el número de Locks?
¿Alguna idea de como obtener el mismo resultado sin que me provoque este
problema?

Muchas gracias a todos

Javi

Preguntas similare

Leer las respuestas

#1 Miguel Egea
08/06/2005 - 12:43 | Informe spam
Create un índice (si no lo tienes ya ) por el campo articuloactualizado.
después utiliza el procedimiento almacenado sp_indexoption para no permitir
bloqueos a nivel de registro ni página.

En este tipo de cosas interviene además el nivel de aislamiento, esto puede
ayudarte. Intentaré (no prometo nada que ando muy liado) publicar en
portalsql la explicación detallada de este ejemplo, si lo miras en cualquier
caso seguramente veas un detalle del funcionamiento ylos bloqueos que se
generan. (ojo que hayan menos registros en syslocks no quiere decir que hayan
menos bloqueos).

use test
go
drop table t
go
create table t (id int identity(1,1), texto char(8000) default '')
go
declare @i int
set @i=0
while @i<500
begin
insert into t default values
set @i=@i+1
end
go
create index ix_t_id on t (id)
go
set transaction isolation level read committed
go
begin tran
select id from t
exec sp_lock
commit
go
set transaction isolation level repeatable read
go
begin tran
select id from t
exec sp_lock
commit
go

exec sp_indexoption 't.ix_t_id', 'allowrowlocks','false'
exec sp_indexoption 't.ix_t_id', 'allowpagelocks','false'
go
set transaction isolation level repeatable read
go
begin tran
select id from t
exec sp_lock
commit
go

Saludos

"Javi" escribió:

Hola.
A ver si me podeis echar una mano con este error:

"The SQL Server cannot obtain a LOCK resource at this time. Rerun your
statement when there are fewer active users or ask the system administrator
to check the SQL Server lock and memory configuration."

Tengo dos trabajos:
El primero carga datos de ventas diariamente a las 7:00
El segundo actualiza 10000 registros de la tabla de ventas en un trabajo
programado para que se ejecute automaticamente cuando la CPU está sin usar.

Como el segundo se ejecuta aleatoriamente, a veces me coinciden y me provoca
este error. Ya lo he corregido para que no me coincidan y que no se produzca
el error, pero me gustaría saber, por qué ocurre.

Más información: el error me ocurre cuando ejecuto la siguiente consulta:

SELECT
COUNT(ID_ART)
FROM
Ventas
WHERE
articulo_actualizado IS NULL

La tabla de Ventas tiene más de 46 millones de registros y la ejecución de
la consulta anterior me tarda aprox. 9 minutos. He comprobado con el monitor
del sistema que cuando ejecuto esta consulta, el número de "Lock
Requests/sec" crece hasta más de 2 millones y si coincide con el otro
trabajo, pues me produce el error.

¿Alguien puede explicarme que tiene esta consulta que me hace crecer tanto
el número de Locks?
¿Alguna idea de como obtener el mismo resultado sin que me provoque este
problema?

Muchas gracias a todos

Javi



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