2009-08-21 20 views
7

Soy nuevo en Oracle db. Tengo 2 consultas que devuelven el mismo conjunto de resultados. Quiero medir el rendimiento de cada uno de ellos y elegir el mejor. ¿Cómo hago eso usando Oracle SQL developer? Recuerdo haber leído que ciertas herramientas proporcionan estadísticas. ¿Alguna sugerencia sobre cómo leer estas estadísticas?Cómo medir el rendimiento de la consulta en el oráculo

Actualización: Como lo sugirió Rob Van, utilicé la utilidad tkprof para encontrar el rendimiento de mis consultas. Algunos parámetros que pude entender (contar, filas, tiempo transcurrido, tiempo de ejecución), pero la mayoría no pude. ¿Alguien puede ayudarme con la importancia de esos parámetros? A continuación se muestran los resultados.

Query 1: 
call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.01  0.01   0   0   0   0 
Execute  1  0.00  0.00   0   0   0   0 
Fetch  49  0.26  0.32   45  494   0  23959 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  51  0.28  0.33   45  494   0  23959 

Query2: 
call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.00  0.00   0   0   0   0 
Execute  1  0.00  0.00   0   0   0   0 
Fetch  33  0.25  0.24   0  904   0  15992 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  35  0.25  0.24   0  904   0  15992 

Puedo decidir que la consulta 2 es mejor que la consulta 1. ¿Alguna ayuda sobre qué disco, consulta y parámetros actuales significan?

+0

Usted ha mencionado que la consulta 1 y la consulta 2 devuelve el mismo conjunto de resultados. Sin embargo, el archivo tkprof muestra que la consulta 1 devuelve 23959 filas y la consulta 2 devuelve 15992 filas. No es exactamente igual ... –

+0

Okie la consulta es parte de una creación de vista. El número de filas devueltas es diferente porque la forma en que las consultas crean la vista es diferente. La primera consulta usa uniones y la segunda consulta usa LOJ y dado que la primera consulta usa unios, algunos registros están duplicados, lo que no sucede en el caso de la segunda consulta – Cshah

Respuesta

9

Hay un botón encima del editor SQL llamado "Explain Plan". Esta herramienta le dirá qué cuesta cada ruta y cómo la declaración usará índices y particiones. Tenga en cuenta que puede recibir un error, su DBA necesitará activar una característica para su cuenta de usuario, creo que es "rastreo", pero podría estar equivocado en ese punto. La lectura de la salida de ejecución de declaración puede ser un desafío al principio, pero es una buena herramienta para ayudar a escribir un buen SQL.

+0

Thx.Yep vi los resultados en la pestaña de explicación. Aparece una columna llamada costo con números. Tendría que profundizar en los documentos de Oracle para interpretar lo que significan estos números – Cshah

+2

. Recomiendo profundizar en esos documentos. Realice búsquedas en Google sobre la optimización y la optimización de Oracle. (Burleson tiene algunas cosas buenas, google "Oracle Burleson" para ver un sitio de consultoría que incluye consejos). Y mira esto para obtener una visión general de lo que ves con "explicar el plan". http://www.akadia.com/services/ora_interpreting_explain_plan.html Como se menciona en otro comentario, simplemente verificar la velocidad no significa mucho. El entorno puede cambiar las cosas; en un contexto, la rapidez puede ser lenta en otro. – user158017

+0

Pero aprender las cosas puede llevar tiempo. Lo mejor es que compruebe la velocidad por ahora, y luego absorba todo lo que pueda y sintonice sobre la marcha. – user158017

1

Respuesta básica: ejecute cada consulta un par de veces y vea cuál es más rápido. La mejor parte: puede hacerlo sin tener que aprender sobre el rendimiento de Oracle. Lo único que debe saber es que no puede confiar en el primer intento, porque la mayoría de las veces leerá datos del disco, mientras que el segundo intentará usar datos en caché de la memoria RAM. Es por eso que intenta cada consulta un par de veces.

+1

¿Qué sucede si la consulta "más rápida" usa mucho espacio temporal? Una vez que se movió a producción, con múltiples usuarios que usan ese espacio de temperatura, la consulta "más rápida" podría volverse más lenta porque podría comenzar a paginar. El problema para determinar la velocidad de consulta es que la respuesta siempre es "depende". es mejor utilizar el plan de explicación, tomar nota del espacio temporal utilizado, y luego evaluar en términos del entorno del servidor. Aunque es difícil hacerlo bien, todavía estoy aprendiendo. – user158017

+1

El plan de explicación es bueno, pero primero debes poder leerlo. Si tiene que elegir hoy entre dos consultas y no ha visto las herramientas del plan en toda su vida, esas NESTED LOOP/HASH JOIN/INDEX RANGE SCAN/INDEX FFS no lo ayudarán realmente. Si tiene semanas disponibles, entonces seguro, primero aprenda la optimización del rendimiento de Oracle y luego escriba las consultas. – jva

3

En OTN, Randolf Geist y yo hemos escrito dos publicaciones sobre cómo medir el rendimiento. Si haces lo que se indica en esos hilos, habrás reunido información para poder elegir la mejor.

Si desea la versión completa, visite Randolf's.

Si desea una versión corta, visite mine:

Ambos hilos explican cómo utilizar explicar el plan y el rastreo para ver dónde se gasta el tiempo. Entonces depende de usted decidir qué califica exactamente como "mejor". Este puede ser el tiempo transcurrido más corto, la menor cantidad de recursos usados, o el menor número de cierres, o tal vez alguna otra cosa.

Espero que esto ayude.

Saludos, Rob.

1

Me temo que EXPLAIN PLAN es la única manera. Comience asumiendo que un costo menor (si mira el plan explicativo que debería ser una columna llamada COST) es mejor, pero necesita leer sobre ello para que aprenda más y más. ¿Quizás tengas un DBA allí con el que puedas chatear? Sin tener sus datos y las consultas es difícil asesorar más

Para cualquier cosa relacionada con el desarrollo de Oracle, un buen lugar para comenzar es cualquier cosa de Tom Kyte (Google él) o busque a través de the Ask Tom website. Si realmente desea involucrarse

Solo ejecutar la consulta unas pocas veces es una muy mala idea, lo que equivale a simplemente aceptar que el costo del plan de explicación le indica la mejor consulta. Realmente debe tener en cuenta los recursos que está tomando su consulta y, por lo tanto, cómo podría afectar su sistema de producción.

Dependiendo de la frecuencia con la que se llama a la consulta afecta a qué tan bien necesita seguir el rendimiento de una consulta (lo siento por los puristas, pero lo hace). Si la consulta solo se ejecuta una vez a la semana y tarda un minuto en ejecutarse sin afectar a nada más, ¿necesita optimizar esa consulta? ¿Es más fácil para el mantenimiento usar una consulta que es más fácil de seguir lógicamente?

Si la consulta se llama varias veces por segundo, entonces usted necesita para entender por completo el plan de explicar, y tienen una mayor comprensión de cómo se puede optimizar la consulta a su mejor desempeño

Cuestiones relacionadas