2010-07-01 7 views
5

Soy absolutamente nuevo en bases de datos y consultas SQL.Cómo depurar una consulta de base de datos para el rendimiento

Q1. ¿Cuáles son los problemas comunes que uno generalmente enfrenta en las consultas de la base de datos? Probablemente consultas extremadamente grandes, problemas de rendimiento, tiempo de espera y errores de conectividad, exportación de importación y errores de restauración

Q2. ¿Qué enfoque y herramientas debería tener en cuenta al depurar un rendimiento de consulta SQL ?

Será genial si puede compartir algunos de los problemas que enfrenta y cómo avanzó para resolverlo.

+1

Primero nunca utilice el término secuela es SQL. – HLGEM

+0

Entonces, ¿tiene un problema concreto en mente que va a resolver con una base de datos SQL? –

Respuesta

5

Intente utilizar EXPLAIN antes de sus consultas, que le dará una gran visión general de lo que está sucediendo bajo el capó.

Véase también: SQL Performance Tips

+0

Y si no está utilizando MySQL, hay algo muy similar para todos los demás proveedores también. (a veces llamado "Mostrar plan de ejecución", etc.) – GalacticCowboy

+0

exactamente ... :) el punto es aprender a analizar las consultas. – galambalazs

1

Lo más importante para la depuración de consultas SQL es SQL Server http://msdn.microsoft.com/en-us/library/ms187929.aspx

Esto le dará lee, escribe, el tiempo, etc.

Los planes de ejecución son también es muy útil y le mostrará si realizó un escaneo en lugar de una búsqueda o viceversa. Mire en esto también http://msdn.microsoft.com/en-us/library/ms178071.aspx

+0

También incluiré estos consejos antes de su último enlace: https://technet.microsoft.com/en-us/library/ms177500(v=sql.105).aspx – HEDMON

5

Probablemente una de las cosas más importantes que querrá comprender son los índices. Un gran cuello de botella potencial para el rendimiento de las consultas es cuando busca en una columna que no es parte de un índice y causa un escaneo de tabla. Una exploración de tabla significa que cada fila se está escaneando, por lo que, naturalmente, cuantos más registros haya en la (s) tabla (s), peor será el rendimiento.

No estoy seguro de qué base de datos está utilizando, pero desde la perspectiva de SQL Server estaría bien informado sobre cómo usar SQL Profiler. También puede ver el plan de ejecución de una consulta a través de SQL Management Studio, esto le indicará dónde podrían estar los problemas de rendimiento en su consulta.

0

Los problemas que aparecen en las bases de datos no suelen estar relacionados directamente con las consultas, pero los problemas que he tenido que solucionar son la falta de índices (pueden causar consultas realmente lentas en los datos), problemas de integridad de datos porque no se crearon restricciones que permitieran a alguien corromper los datos.

Además, si va a usar transacciones, asegúrese de comprender cómo afectarán el uso simultáneo y saber que no puede seleccionar datos de una tabla que se está modificando en una transacción hasta que se complete la transacción.

Las conexiones y el tiempo de espera no son problemas que he enfrentado normalmente.

En cuanto a las consultas, use los planes de explicación que le permiten identificar cómo el motor de la base de datos ejecutará sus consultas. (Esto identificará cómo se realizarán las uniones y en qué orden y la cardinalidad de sus uniones; si puede reducir las relaciones de muchos a muchos en sus uniones, su consulta se ejecutará más rápido)

+0

usted hace un punto aquí ... necesito vuelve atrás y ve si estoy enfrentando el problema. gracias por la respuesta. – pankajt

1

Si realmente está interesado en la optimización del rendimiento consultas de base de datos que necesita para obtener un gran libro sobre el tema de la base de datos de su elección. La optimización del rendimiento es muy específica de la base de datos.Dicho esto, un problema de comunicación en las consultas de ajuste que debe conocer, independientemente de la base de datos, es que la consulta ajustada devuelva exactamente el mismo conjunto de resultados que la consulta original pero sea más rápida. A veces, el ajuste de la gente olvida esta cosa básica y termina con una consulta que es más rápida pero no hace lo mismo.

Los problemas en las consultas de bases de datos -

resultados erróneos - la consulta no hace realmente lo que usted quiere que haga

Rendimiento - los tiempos de espera de consulta o es demasiado lento. Muchas cosas pueden causar esto, pero un par de causas comunes son mal diseño de la base de datos (no use tablas EAV, por ejemplo), uso de técnicas de consulta de bajo rendimiento como subconsultas correlacionadas, bucles a través de registros de uno en uno, falta de indexación correcta, estadísticas desactualizado, consultas no verificables y, por supuesto, problemas de hardware y red.

Para inserciones, actualizaciones, eliminaciones: puede haber problemas con la integridad de los datos debido a un diseño deficiente de la base de datos (falta de claves externas, falta de valores predeterminados, falta de restricciones) o diseño de consultas. A veces la gente elige crear su propio campo de autoincremencia en lugar de usar lo que viene con la base de datos. Estos pueden toparse con problemas de concurrencia.

Seguridad - la base de datos no protege adecuadamente de datos (cifrado de los datos personales, que codifica para evitar ataques de inyección, lo que limita los derechos de hacer las cosas a la DAT, etc.)

La falta de pruebas de los casos extremos - esto es un problema frecuente en SQl dinámico y desencadenadores especialmente cuando los desarrolladores solo consideran el caso más común y la cosa se rompe cuando el caso límite lo golpea.

+0

Tenemos una aplicación que genera consultas dinámicamente. De acuerdo con la lógica, la consulta a veces abarca páginas con muchas cláusulas IN AND y O ¿Podemos procesar las consultas en lotes o algo que hace que la consulta sea manejable? – pankajt

+0

Sin ver su esquema ni las consultas en sí mismas, realmente no puedo responde eso. No es un entusiasta de la generación automática de consultas en general, con frecuencia están pobremente formadas para el rendimiento. – HLGEM

1

This is a good article sobre cómo optimizar las sentencias SQL y las cosas que han de tener en cuenta:

+0

las mejores prácticas no son específicas de la base de datos ??? ¿Puedo aplicar estas prácticas en cualquier base de datos? – pankajt

+0

Bueno, estos son específicos para MySQL, aunque muchos de ellos se aplican bien a bases de datos en general. – JochenJung

2

I depurado con el método mostrado here y uno de los método ha funcionado para mí.

Comprobé que la consulta se ejecutara por más tiempo y llegué a saber que ciertas consultas estaban bloqueadas y se estaban ejecutando desde hace más de 3-4 horas. Para comprobar desde cuánto tiempo se está ejecutando la consulta, ejecute el siguiente comando:

SELECT max(now() - xact_start) FROM pg_stat_activity 
           WHERE state IN ('idle in transaction', 'active'); 

Si esto es más de una hora, que este es el problema. Kill the long running connection y limita la edad máxima de la conexión desde el lado de la aplicación.

Cuestiones relacionadas