Performance SQL Server

05/09/2005 - 20:17 por Tumba | Informe spam
Hola, otra vez solicitando ayuda. queria saber si me pueden dar una mano para
optimizar el servidor SQL Server ya que esta teniendo problemas para resolver
consultas que antes lo hacia sin problemas.

Tengo un Bucle que recorre una tabla temporal (esta echo con un WHILE porque
estaba con cursores) el problema es que en el recorrido se hace un SQL
Dinamico y se manda a ejecutar unos stored para unos 250 registros. este
Stored tiene problema de bloqueos (deadlocks) lo que hicimos es generar los
stored Procedure que llama para devuelvan un valor sin hacer consultas para
ver cual es el que tenia problemas y nos encontramos que tarda 22 segundos en
hacer el recorrido de los 250 registros llamando a los SP que no devuelven
valores (dummy) ¿Puede ser que demore tanto? ¿como puedo detectar si el
Servidor tiene problemas?

Tambien me gustaria su opinion a pros y contra de reemplazar cursores con
bucles WHILE de una tabla temporal.
EJ:

WHILE (Select Count(*) From #Cargos) > 0
BEGIN
SELECT TOP 1 @idCargo = idCargo, @idUbicacion = idUbicacion


END

DELETE From #Cargos

Preguntas similare

Leer las respuestas

#1 Eleazar
05/09/2005 - 23:06 | Informe spam
Hola solo una observacion (en el ejemplo que nos muestras)
dentro del ciclo nunca eliminas el registro que obtuviste en esa pasada es
decir
antes del END
Delete From #Cargos Where idCargo = @idCargo And idUbicacion = @idUbicacion

WHILE (Select Count(*) From #Cargos) > 0
BEGIN
SELECT TOP 1 @idCargo = idCargo, @idUbicacion = idUbicacion


END

DELETE From #Cargos



"Tumba" escribió en el mensaje
news:
Hola, otra vez solicitando ayuda. queria saber si me pueden dar una mano


para
optimizar el servidor SQL Server ya que esta teniendo problemas para


resolver
consultas que antes lo hacia sin problemas.

Tengo un Bucle que recorre una tabla temporal (esta echo con un WHILE


porque
estaba con cursores) el problema es que en el recorrido se hace un SQL
Dinamico y se manda a ejecutar unos stored para unos 250 registros. este
Stored tiene problema de bloqueos (deadlocks) lo que hicimos es generar


los
stored Procedure que llama para devuelvan un valor sin hacer consultas


para
ver cual es el que tenia problemas y nos encontramos que tarda 22 segundos


en
hacer el recorrido de los 250 registros llamando a los SP que no devuelven
valores (dummy) ¿Puede ser que demore tanto? ¿como puedo detectar si el
Servidor tiene problemas?

Tambien me gustaria su opinion a pros y contra de reemplazar cursores con
bucles WHILE de una tabla temporal.
EJ:

WHILE (Select Count(*) From #Cargos) > 0
BEGIN
SELECT TOP 1 @idCargo = idCargo, @idUbicacion = idUbicacion


END

DELETE From #Cargos



Respuesta Responder a este mensaje
#2 Maxi
05/09/2005 - 23:46 | Informe spam
Hola, esta metodologia no es para nada recomendada, ni el sql dinamico ni
los cursores son tecnicas que ayuden a SQL. Porque no nos cuentas que
quieres realmente hacer y vemos de sacar ese monstruo


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Tumba" escribió en el mensaje
news:
Hola, otra vez solicitando ayuda. queria saber si me pueden dar una mano
para
optimizar el servidor SQL Server ya que esta teniendo problemas para
resolver
consultas que antes lo hacia sin problemas.

Tengo un Bucle que recorre una tabla temporal (esta echo con un WHILE
porque
estaba con cursores) el problema es que en el recorrido se hace un SQL
Dinamico y se manda a ejecutar unos stored para unos 250 registros. este
Stored tiene problema de bloqueos (deadlocks) lo que hicimos es generar
los
stored Procedure que llama para devuelvan un valor sin hacer consultas
para
ver cual es el que tenia problemas y nos encontramos que tarda 22 segundos
en
hacer el recorrido de los 250 registros llamando a los SP que no devuelven
valores (dummy) ¿Puede ser que demore tanto? ¿como puedo detectar si el
Servidor tiene problemas?

Tambien me gustaria su opinion a pros y contra de reemplazar cursores con
bucles WHILE de una tabla temporal.
EJ:

WHILE (Select Count(*) From #Cargos) > 0
BEGIN
SELECT TOP 1 @idCargo = idCargo, @idUbicacion = idUbicacion


END

DELETE From #Cargos



Respuesta Responder a este mensaje
#3 Tumba
07/09/2005 - 02:19 | Informe spam
El problema a resolver es el siguiente.

Existe un cursor (lo mismo probamos con la solución de hacer el bucle con un
while, recorriendo y borrando una tabla temporal) que tiene nombres de store
procedures que deben ejecutarse para completar un cálculo. El cálculo final
es la suma de los 10 cálculos que se realizan en orden para una determinada
entrada. El ejemplo concreto es el siguiente:

Cálculo Orden
pje_porTitulos 1
pje_promedioTitulo 2
pje_antiguedadTitulo 3
pje_porGestion 4
pje_porServiciosDocentes 5
pje_porServiciosDocentesNQN 6
pje_porAntecedentesCulturales 7
pje_OtrosTitulos 8
pje_EgresadosNQN 9
pje_porPrioridad 10

Cada uno de los nombres de estos cálculos se encuentra en una tabla y se
arma una sentencia "EXEC cálculo con parámetros" para cada uno de ellos. Para
hacer este recorrido se usa un cursor o se usa un bucle que inserta los
nombres de los cálculos en una tabla temporal y luego se van eliminando. Esta
tabla temporal (o contenido del cursor) puede llegar a ser de 250 registros.
Es decir, se repetirían los cálculos para 25 entradas, 10 cálculos para cada
entrada.


"Maxi" escribió:

Hola, esta metodologia no es para nada recomendada, ni el sql dinamico ni
los cursores son tecnicas que ayuden a SQL. Porque no nos cuentas que
quieres realmente hacer y vemos de sacar ese monstruo


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Tumba" escribió en el mensaje
news:
> Hola, otra vez solicitando ayuda. queria saber si me pueden dar una mano
> para
> optimizar el servidor SQL Server ya que esta teniendo problemas para
> resolver
> consultas que antes lo hacia sin problemas.
>
> Tengo un Bucle que recorre una tabla temporal (esta echo con un WHILE
> porque
> estaba con cursores) el problema es que en el recorrido se hace un SQL
> Dinamico y se manda a ejecutar unos stored para unos 250 registros. este
> Stored tiene problema de bloqueos (deadlocks) lo que hicimos es generar
> los
> stored Procedure que llama para devuelvan un valor sin hacer consultas
> para
> ver cual es el que tenia problemas y nos encontramos que tarda 22 segundos
> en
> hacer el recorrido de los 250 registros llamando a los SP que no devuelven
> valores (dummy) ¿Puede ser que demore tanto? ¿como puedo detectar si el
> Servidor tiene problemas?
>
> Tambien me gustaria su opinion a pros y contra de reemplazar cursores con
> bucles WHILE de una tabla temporal.
> EJ:
>
> WHILE (Select Count(*) From #Cargos) > 0
> BEGIN
> SELECT TOP 1 @idCargo = idCargo, @idUbicacion = idUbicacion
>
>
> END
>
> DELETE From #Cargos
>
>
>



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