Análise de desempenho via "plugins" de DBMS ou outra solução

Análise de desempenho via "plugins" de DBMS ou outra solução

Estou trabalhando em um produto de monitoramento de sistemas que atualmente se concentra no desempenho no nível do sistema. Estamos expandindo para monitorar sistemas de banco de dados. No momento, podemos buscar informações simples de desempenho de uma seleção de DBMS, como contagem de conexões, taxas de E/S de disco, tempos de espera de bloqueio, etc.

No entanto, gostaríamos realmente de medir o tempo de execução de cada consulta que entra em um SGBD,semexigindo que o cliente implemente o monitoramento no código do aplicativo.

Algumas soluções potenciais podem ser:

  • Algum tipo de proxy que fica entre o cliente e o servidor. SSL pode ser um problema aqui, além de exigir que façamos engenharia reversa e implementemos o protocolo de rede para cada SGBD.
  • Plugin para cada sistema DBMS que registra automaticamente informações de desempenho quando uma consulta chega.

Outros problemas incluem "anonimizar" o SQL, ou seja, pegar algo como SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"e produzir SELECT * FROM products WHERE price > ? AND name LIKE "%?%", embora isso não deva ser muito difícil com alguma análise e regex inteligentes.

Estamos nos concentrando principalmente em:

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

Existe algum mecanismo de estilo de plug-in que possamos utilizar para algum desses? Ou existe uma solução mais simples?

Responder1

Não existe uma solução genérica aplicável a todos os seus bancos de dados. E tentar medir o tempo de resposta de consultas no Oracle é muito difícil. Não trabalhei com análise de desempenho em memcache/nosql dbs.

Para mysql existemysqlproxy- que pode ser facilmente programado. No entanto, você provavelmente obterá tudo o que precisa do log de consulta lenta (com limite zero). Eu uso uma versão modificada doeste roteiropara "anonimizar" minhas consultas.

Existem ferramentas (muito caras), como a vantagem do cliente da Compuware, que pode detectar o tráfego de rede e deduzir métricas de desempenho em vários níveis (incluindo banco de dados). A única ferramenta de software livre comparável que conheço éSeg passadaqual (AFAIK) não fornece a inspeção profunda necessária para medir os tempos de resposta do banco de dados em uma conexão TCP persistente.

Embora fosse possível capturar todas as métricas canalizando todo o acesso via webservices, isso introduz latência na transação. Isto é verdade para qualquer operação do tipo proxy - mas será particularmente doloroso para conexões não persistentes através de SSL.

Você já pensou em como irá coletar/manter/analisar todos esses dados? Você pode querer dar uma olhadagrafite.

Que tipos de clientes você está usando? Antes de começar a examinar os bancos de dados, você deve medir os vínculos de resposta no cliente - você só precisa começar a se preocupar com o desempenho do banco de dados se tiver um problema de desempenho nele. E se o cliente for um navegador da Web, essa é uma tarefa muito mais simples. Basta configurar seu servidor web para registrar os tempos de resposta e começar a mesclar os dados. Você pode até adicionar recursos simples para medir a resposta da página - que é um indicador muito melhor do desempenho percebido - por exemploBumerangue do Yahoo

informação relacionada