Consulta lenta por JDBC, rápida por ODBC

05/07/2006 - 15:54 por Juan Ant. | Informe spam
Tenemos una consulta que si la ejecutamos a través del Query Analyzer,
o cualquier cliente ODBC, tarda en torno a medio segundo. Esta consulta
está integrada dentro de una aplicación web, construida en Java, que
se conecta a Sql Server a través de JDBC.

Hemos creado una traza mediante el Sql Profiler (Analizador de Sql), y
vemos que esta misma consulta tarda algo más de 6 segundos cuando es
ejecutada desde la aplicación web. Además, también se incrementa el
número de lecturas (columna Reads que aparece en la traza). ¿Se os
ocurre algún motivo? Lógicamente, asumimos que la prueba se ha
realizado en idénticas condiciones de carga de sistema, con la base de
datos con el mismo volumen de datos, mismos índices, etc.

¿Existe alguna posibilidad, bien sea a través del Sql Profiler o de
cualquier otro medio, de obtener el plan de ejecución que una consulta
ha empleado? Sé que es posible a través del Query Analyzer. Puedo
llevarme la consulta, lanzarla ahí, y ver su plan de ejecución. Yo
quiero comparar ese plan, el que emplea el Query Analyzer para ejecutar
la consulta en 0.5 segundos, con el que haya empleado la consulta
ejecutada a través de JDBC, que ha tardado 6 segundos. ¿Puedo obtener
ese plan de ejecución?

Gracias!

Preguntas similare

Leer las respuestas

#1 Maxi
05/07/2006 - 16:12 | Informe spam
Hola, bueno aca el problema es sin ninguna duda el driver de java, yo lo que
te recomiendo si no lo has hecho es bajarte desde MS el ultimo driver para
java, esto lo podes encontrar en www.microsoft.com/sql



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


"Juan Ant." escribió en el mensaje
news:
Tenemos una consulta que si la ejecutamos a través del Query Analyzer,
o cualquier cliente ODBC, tarda en torno a medio segundo. Esta consulta
está integrada dentro de una aplicación web, construida en Java, que
se conecta a Sql Server a través de JDBC.

Hemos creado una traza mediante el Sql Profiler (Analizador de Sql), y
vemos que esta misma consulta tarda algo más de 6 segundos cuando es
ejecutada desde la aplicación web. Además, también se incrementa el
número de lecturas (columna Reads que aparece en la traza). ¿Se os
ocurre algún motivo? Lógicamente, asumimos que la prueba se ha
realizado en idénticas condiciones de carga de sistema, con la base de
datos con el mismo volumen de datos, mismos índices, etc.

¿Existe alguna posibilidad, bien sea a través del Sql Profiler o de
cualquier otro medio, de obtener el plan de ejecución que una consulta
ha empleado? Sé que es posible a través del Query Analyzer. Puedo
llevarme la consulta, lanzarla ahí, y ver su plan de ejecución. Yo
quiero comparar ese plan, el que emplea el Query Analyzer para ejecutar
la consulta en 0.5 segundos, con el que haya empleado la consulta
ejecutada a través de JDBC, que ha tardado 6 segundos. ¿Puedo obtener
ese plan de ejecución?

Gracias!
Respuesta Responder a este mensaje
#2 Juan Ant.
05/07/2006 - 17:05 | Informe spam
Gracias Maxi. Probaremos.

Hemos actualizado estadísticas de las dos tablas implicadas en la
SELECT, y la consulta ha pasado a tardar poquísimo. No suena lógico,
¿no? Digo yo que si fuera problema de estadísticas desactualizadas,
sería lento tanto por JDBC como por ODBC, ¿no?

Gracias

Maxi wrote:
Hola, bueno aca el problema es sin ninguna duda el driver de java, yo lo que
te recomiendo si no lo has hecho es bajarte desde MS el ultimo driver para
java, esto lo podes encontrar en www.microsoft.com/sql



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


"Juan Ant." escribió en el mensaje
news:
Tenemos una consulta que si la ejecutamos a través del Query Analyzer,
o cualquier cliente ODBC, tarda en torno a medio segundo. Esta consulta
está integrada dentro de una aplicación web, construida en Java, que
se conecta a Sql Server a través de JDBC.

Hemos creado una traza mediante el Sql Profiler (Analizador de Sql), y
vemos que esta misma consulta tarda algo más de 6 segundos cuando es
ejecutada desde la aplicación web. Además, también se incrementa el
número de lecturas (columna Reads que aparece en la traza). ¿Se os
ocurre algún motivo? Lógicamente, asumimos que la prueba se ha
realizado en idénticas condiciones de carga de sistema, con la base de
datos con el mismo volumen de datos, mismos índices, etc.

¿Existe alguna posibilidad, bien sea a través del Sql Profiler o de
cualquier otro medio, de obtener el plan de ejecución que una consulta
ha empleado? Sé que es posible a través del Query Analyzer. Puedo
llevarme la consulta, lanzarla ahí, y ver su plan de ejecución. Yo
quiero comparar ese plan, el que emplea el Query Analyzer para ejecutar
la consulta en 0.5 segundos, con el que haya empleado la consulta
ejecutada a través de JDBC, que ha tardado 6 segundos. ¿Puedo obtener
ese plan de ejecución?

Gracias!
Respuesta Responder a este mensaje
#3 Juan Ant.
05/07/2006 - 17:10 | Informe spam
Añado algo: el procedimiento sp_updatestats actualiza las
estadísticas de toda la base de datos... pero, ¿con qué opciones? Lo
digo porque si lo haces a través del Query Analyzer tienes una serie
de opciones para marcar/desmarcar, como por ejemplo, si deseas incluir
estadísticas de columnas, entre otras.

Gracias
Respuesta Responder a este mensaje
#4 Maxi
05/07/2006 - 17:23 | Informe spam
mmm, es ilogico que pase eso, deberia andar lento en todo :S


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


"Juan Ant." escribió en el mensaje
news:

Gracias Maxi. Probaremos.

Hemos actualizado estadísticas de las dos tablas implicadas en la
SELECT, y la consulta ha pasado a tardar poquísimo. No suena lógico,
¿no? Digo yo que si fuera problema de estadísticas desactualizadas,
sería lento tanto por JDBC como por ODBC, ¿no?

Gracias

Maxi wrote:
Hola, bueno aca el problema es sin ninguna duda el driver de java, yo lo
que
te recomiendo si no lo has hecho es bajarte desde MS el ultimo driver para
java, esto lo podes encontrar en www.microsoft.com/sql



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


"Juan Ant." escribió en el mensaje
news:
Tenemos una consulta que si la ejecutamos a través del Query Analyzer,
o cualquier cliente ODBC, tarda en torno a medio segundo. Esta consulta
está integrada dentro de una aplicación web, construida en Java, que
se conecta a Sql Server a través de JDBC.

Hemos creado una traza mediante el Sql Profiler (Analizador de Sql), y
vemos que esta misma consulta tarda algo más de 6 segundos cuando es
ejecutada desde la aplicación web. Además, también se incrementa el
número de lecturas (columna Reads que aparece en la traza). ¿Se os
ocurre algún motivo? Lógicamente, asumimos que la prueba se ha
realizado en idénticas condiciones de carga de sistema, con la base de
datos con el mismo volumen de datos, mismos índices, etc.

¿Existe alguna posibilidad, bien sea a través del Sql Profiler o de
cualquier otro medio, de obtener el plan de ejecución que una consulta
ha empleado? Sé que es posible a través del Query Analyzer. Puedo
llevarme la consulta, lanzarla ahí, y ver su plan de ejecución. Yo
quiero comparar ese plan, el que emplea el Query Analyzer para ejecutar
la consulta en 0.5 segundos, con el que haya empleado la consulta
ejecutada a través de JDBC, que ha tardado 6 segundos. ¿Puedo obtener
ese plan de ejecución?

Gracias!
Respuesta Responder a este mensaje
#5 Juan Ant.
05/07/2006 - 17:52 | Informe spam
Así pienso yo también. Comparando planes de ejecución, éstos son
diferentes, por lo que es lógico que la consulta no tarde lo mismo.
Pero no me parece lógico que genere planes de ejecución diferentes
porque esto no debería depender del driver. ¿No te parece?

Maxi wrote:
mmm, es ilogico que pase eso, deberia andar lento en todo :S


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


"Juan Ant." escribió en el mensaje
news:

Gracias Maxi. Probaremos.

Hemos actualizado estadísticas de las dos tablas implicadas en la
SELECT, y la consulta ha pasado a tardar poquísimo. No suena lógico,
¿no? Digo yo que si fuera problema de estadísticas desactualizadas,
sería lento tanto por JDBC como por ODBC, ¿no?

Gracias

Maxi wrote:
> Hola, bueno aca el problema es sin ninguna duda el driver de java, yo lo
> que
> te recomiendo si no lo has hecho es bajarte desde MS el ultimo driver para
> java, esto lo podes encontrar en www.microsoft.com/sql
>
>
>
> Salu2
> Maxi [MVP SQL SERVER]
> www.sqlgurus.org
>
>
> "Juan Ant." escribió en el mensaje
> news:
> Tenemos una consulta que si la ejecutamos a través del Query Analyzer,
> o cualquier cliente ODBC, tarda en torno a medio segundo. Esta consulta
> está integrada dentro de una aplicación web, construida en Java, que
> se conecta a Sql Server a través de JDBC.
>
> Hemos creado una traza mediante el Sql Profiler (Analizador de Sql), y
> vemos que esta misma consulta tarda algo más de 6 segundos cuando es
> ejecutada desde la aplicación web. Además, también se incrementa el
> número de lecturas (columna Reads que aparece en la traza). ¿Se os
> ocurre algún motivo? Lógicamente, asumimos que la prueba se ha
> realizado en idénticas condiciones de carga de sistema, con la base de
> datos con el mismo volumen de datos, mismos índices, etc.
>
> ¿Existe alguna posibilidad, bien sea a través del Sql Profiler o de
> cualquier otro medio, de obtener el plan de ejecución que una consulta
> ha empleado? Sé que es posible a través del Query Analyzer. Puedo
> llevarme la consulta, lanzarla ahí, y ver su plan de ejecución. Yo
> quiero comparar ese plan, el que emplea el Query Analyzer para ejecutar
> la consulta en 0.5 segundos, con el que haya empleado la consulta
> ejecutada a través de JDBC, que ha tardado 6 segundos. ¿Puedo obtener
> ese plan de ejecución?
>
> Gracias!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida