Análisis de rendimiento a través de "complementos" de DBMS u otra solución

Análisis de rendimiento a través de "complementos" de DBMS u otra solución

Estoy trabajando en un producto de monitoreo de sistemas que actualmente se enfoca en el rendimiento a nivel del sistema. Nos estamos expandiendo al monitoreo de sistemas de bases de datos. En este momento podemos obtener información de rendimiento simple de una selección de DBMS, como el recuento de conexiones, las tasas de E/S del disco, los tiempos de espera de bloqueo, etc.

Sin embargo, realmente nos gustaría encontrar una forma de medir el tiempo de ejecución de cada consulta que ingresa a un DBMS.sinrequiriendo que el cliente implemente el monitoreo en el código de su aplicación.

Algunas posibles soluciones podrían ser:

  • Algún tipo de proxy que se encuentra entre el cliente y el servidor. SSL podría ser un problema aquí, además requiere que realicemos ingeniería inversa e implementemos el protocolo de red para cada DBMS.
  • Complemento para cada sistema DBMS que registra automáticamente información de rendimiento cuando llega una consulta.

Otros problemas incluyen "anonimizar" el SQL, es decir, tomar algo como SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"y producirlo SELECT * FROM products WHERE price > ? AND name LIKE "%?%", aunque esto no debería ser demasiado difícil con un análisis y una expresión regular inteligentes.

Nos centramos principalmente en:

  • mysql
  • MSSQL
  • Oráculo
  • Redis
  • mongodb
  • memcached

¿Existe algún mecanismo de estilo complemento que podamos utilizar para cualquiera de estos? ¿O hay una solución más sencilla?

Respuesta1

No existe una solución genérica aplicable a todas sus bases de datos. Y tratar de medir el tiempo de respuesta a consultas en Oracle es muy difícil. No he trabajado con análisis de rendimiento en bases de datos memcache/nosql.

Para MySQL haymysqlproxy- que se puede programar fácilmente. Sin embargo, probablemente obtendrá todo lo que necesita del registro de consultas lento (con un umbral de cero). Yo uso una versión modificada deeste guiónpara "anonimizar" mis consultas.

Existen herramientas (muy caras) como la ventaja de cliente de Compuware que puede rastrear el tráfico de la red y deducir métricas de rendimiento en varios niveles (incluida la base de datos). La única herramienta de software gratuita comparable que conozco esPasadoMonlo cual (AFAIK) no proporciona la inspección profunda necesaria para medir los tiempos de respuesta de la base de datos en una conexión TCP persistente.

Si bien sería posible capturar todas las métricas canalizando todo el acceso a través de servicios web, esto introduce latencia en la transacción. Esto es cierto para cualquier operación de tipo proxy, pero será particularmente doloroso para conexiones no persistentes a través de SSL.

¿Ha considerado cómo va a recopilar/mantener/analizar todos estos datos? Quizás quieras echar un vistazo agrafito.

¿Qué tipos de clientes estás utilizando? Antes de comenzar a mirar las bases de datos, debe medir los vínculos de respuesta en el cliente; solo necesita comenzar a preocuparse por el rendimiento de la base de datos si tiene un problema de rendimiento allí. Y si el cliente es un navegador web, entonces esa es una tarea mucho más sencilla. Simplemente configure su servidor web para registrar los tiempos de respuesta y comience a combinar los datos. Incluso puede agregar complementos simples para medir la respuesta de la página, que es un indicador mucho mejor del rendimiento percibido, por ejemplo.El boomerang de Yahoo

información relacionada