Ejecutar 1 Store Procedured tarda más que ejecutarlo en el SQL Analizer??

02/02/2006 - 15:18 por Manel Gonzalez | Informe spam
Hola a todos
Tengo un caso intrigante

Tengo un SP que realiza el cálculo de costes de 1 obra, 1 delegacion o de
toda la empresa según los parámetros que se pasen. Como podreis imaginar es
bastante complejo (1600 lineas), selecciona registros de muchas tablas y es
consultado continuamente por muchos usuario. Este procedimiento es llamado
por una aplicacion (VB6) que se conecta con ADODB.

El caso es que ultimamente tarda mucho en realizar el cálculo, no importa lo
que pidas (obra, delegacion o empresa). Los tiempos van de 50 seg. a más de
1 minuto y medio. Habia pensado que quizas se me habian degradado algunos
índices, así que hice dbcc dbreindex( <tabla>,'') para todas las tablas que
usa el SP.

Vuelta a realizar pruebas y tampoco... que tarda lo mismo (o sea, mucho).

Me llevo el codigo del SP al SQL Analizer, sustituyo los parametros por los
valores y .. !!tarda 17-18 seg. en ejecutarse!!. Si en el mismo Analizer
escribo "EXECUTE <procedimiento> @param1, @param2." vuelve a tardar más
de 50 seg.

¿Cómo es posible esto? ¿Puede ser que el mismo procedimiento almacenado no
pueda ser ejecutado simultaneamente por 2 usuarios, que se cree un bloqueo y
hasta que no acabe el primero no sea ejecutado para el 2º?

Cualquier opinión al respecto sería de agradecer...

Preguntas similare

Leer las respuestas

#1 Maxi
02/02/2006 - 16:04 | Informe spam
Hola, si hablamos de un SP con 1600 lineas lo que te diria que hay algpo muy
pero muy mal, que han puesto ahi dentro? toda la logica de negocios? es
imposible saber en semejante SP donde esta el problema

Te recomiendo, reestudiar el SP y volverlo a escribir para no tener 1600
lineas.
Tambien podrias usar el profiler.

Tips.

No uses cursores
No abuses de las tablas temporales

Con esto revisa tu Sp's y reescribelo



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


"Manel Gonzalez" escribió en el mensaje
news:
Hola a todos
Tengo un caso intrigante

Tengo un SP que realiza el cálculo de costes de 1 obra, 1 delegacion o de
toda la empresa según los parámetros que se pasen. Como podreis imaginar
es bastante complejo (1600 lineas), selecciona registros de muchas tablas
y es consultado continuamente por muchos usuario. Este procedimiento es
llamado por una aplicacion (VB6) que se conecta con ADODB.

El caso es que ultimamente tarda mucho en realizar el cálculo, no importa
lo que pidas (obra, delegacion o empresa). Los tiempos van de 50 seg. a
más de 1 minuto y medio. Habia pensado que quizas se me habian degradado
algunos índices, así que hice dbcc dbreindex( <tabla>,'') para todas las
tablas que usa el SP.

Vuelta a realizar pruebas y tampoco... que tarda lo mismo (o sea, mucho).

Me llevo el codigo del SP al SQL Analizer, sustituyo los parametros por
los valores y .. !!tarda 17-18 seg. en ejecutarse!!. Si en el mismo
Analizer escribo "EXECUTE <procedimiento> @param1, @param2." vuelve a
tardar más de 50 seg.

¿Cómo es posible esto? ¿Puede ser que el mismo procedimiento almacenado no
pueda ser ejecutado simultaneamente por 2 usuarios, que se cree un bloqueo
y hasta que no acabe el primero no sea ejecutado para el 2º?

Cualquier opinión al respecto sería de agradecer...

Respuesta Responder a este mensaje
#2 Carlos Sacristán
02/02/2006 - 16:10 | Informe spam
Echa un vistazo a estos enlaces, puede que el problema esté por ahí:

parameter sniffing
http://groups.google.com/group/micr...er/msg/...


Statistics Used by the Query Optimizer in Microsoft SQL Server 2000
http://msdn.microsoft.com/library/d...us/dnsq...




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Manel Gonzalez" escribió en el mensaje
news:
Hola a todos
Tengo un caso intrigante

Tengo un SP que realiza el cálculo de costes de 1 obra, 1 delegacion o de
toda la empresa según los parámetros que se pasen. Como podreis imaginar


es
bastante complejo (1600 lineas), selecciona registros de muchas tablas y


es
consultado continuamente por muchos usuario. Este procedimiento es llamado
por una aplicacion (VB6) que se conecta con ADODB.

El caso es que ultimamente tarda mucho en realizar el cálculo, no importa


lo
que pidas (obra, delegacion o empresa). Los tiempos van de 50 seg. a más


de
1 minuto y medio. Habia pensado que quizas se me habian degradado algunos
índices, así que hice dbcc dbreindex( <tabla>,'') para todas las tablas


que
usa el SP.

Vuelta a realizar pruebas y tampoco... que tarda lo mismo (o sea, mucho).

Me llevo el codigo del SP al SQL Analizer, sustituyo los parametros por


los
valores y .. !!tarda 17-18 seg. en ejecutarse!!. Si en el mismo Analizer
escribo "EXECUTE <procedimiento> @param1, @param2." vuelve a tardar


más
de 50 seg.

¿Cómo es posible esto? ¿Puede ser que el mismo procedimiento almacenado no
pueda ser ejecutado simultaneamente por 2 usuarios, que se cree un bloqueo


y
hasta que no acabe el primero no sea ejecutado para el 2º?

Cualquier opinión al respecto sería de agradecer...


Respuesta Responder a este mensaje
#3 Manel Gonzalez
02/02/2006 - 16:27 | Informe spam
Hola Maxi,

Sabía que me contestaríais algo asi.

En el store no está la lógica del negocio, símplemente una consulta bastanta
compleja... Además eso no se corresponde con el hecho de que en el analizer
las "mismas" 1600 lineas son ejecutadas por el servidor en un tiempo muy
inferior...

No se usan cursores, aunque si algunas tablas temporales, eso sí, creadas
con unos buenos indices y con sólo los campos necesarios para la consulta...
nada de "select * into #tabla from "

Es más: en noviembre cambiamos el servidor. Ahora tenemos un servidor con 4
procesadores Xeon a 2700 MHZ con SQL2000 y W2k3 y antes teniamos uno de un 4
procesadores Xeon a 700MHZ con NT y SQL7 a otro y nunca dió problemas..
Si sólo hay unos cuantos miles de registros más...

"Maxi" escribió en el mensaje
news:
Hola, si hablamos de un SP con 1600 lineas lo que te diria que hay algpo
muy pero muy mal, que han puesto ahi dentro? toda la logica de negocios?
es imposible saber en semejante SP donde esta el problema

Te recomiendo, reestudiar el SP y volverlo a escribir para no tener 1600
lineas.
Tambien podrias usar el profiler.

Tips.

No uses cursores
No abuses de las tablas temporales

Con esto revisa tu Sp's y reescribelo



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


"Manel Gonzalez" escribió en el mensaje
news:
Hola a todos
Tengo un caso intrigante

Tengo un SP que realiza el cálculo de costes de 1 obra, 1 delegacion o de
toda la empresa según los parámetros que se pasen. Como podreis imaginar
es bastante complejo (1600 lineas), selecciona registros de muchas tablas
y es consultado continuamente por muchos usuario. Este procedimiento es
llamado por una aplicacion (VB6) que se conecta con ADODB.

El caso es que ultimamente tarda mucho en realizar el cálculo, no importa
lo que pidas (obra, delegacion o empresa). Los tiempos van de 50 seg. a
más de 1 minuto y medio. Habia pensado que quizas se me habian degradado
algunos índices, así que hice dbcc dbreindex( <tabla>,'') para todas las
tablas que usa el SP.

Vuelta a realizar pruebas y tampoco... que tarda lo mismo (o sea, mucho).

Me llevo el codigo del SP al SQL Analizer, sustituyo los parametros por
los valores y .. !!tarda 17-18 seg. en ejecutarse!!. Si en el mismo
Analizer escribo "EXECUTE <procedimiento> @param1, @param2." vuelve a
tardar más de 50 seg.

¿Cómo es posible esto? ¿Puede ser que el mismo procedimiento almacenado
no pueda ser ejecutado simultaneamente por 2 usuarios, que se cree un
bloqueo y hasta que no acabe el primero no sea ejecutado para el 2º?

Cualquier opinión al respecto sería de agradecer...





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