Para otimizar o desempenho de suas instâncias MySQL, o LinkedIn criou uma ferramenta de análise Query para analisar e ajustar queries caras. Ele é executado na camada de rede, armazena tudo dentro de um servidor centralizado e fornece uma interface para usuários analisarem métricas.
O LinkedIn roda uma arquitetura MySQL multi-inquilino. Isto se dá principalmente devido ao fato haver mais de 500 aplicativos que dependem dele, o que significa que o arrendamento único causaria custos de recursos extremamente elevados. O trade-off para esta abordagem significa que as consultas de um aplicativo podem prejudicar o desempenho para outro, e é por isso que é importante para eles serem capazes de compreendê-los e otimizá-los o máximo possível.
O analisador Query é dividido em três componentes:
- Agentes Query: Funciona no node MySQL e coleta métricas sobre como executar queries e seu desempenho.
- Servidor Centralizado: Onde todos os dados sobre consultas são armazenados para relatórios.
- UI: Fica no topo do servidor e fornece um meio fácil de usar para analisar os dados.
Karthik Apigatla, engenheiro sênior do banco de dados no LinkedIn, destaca seus benefícios como:
“…permitindo que nossos engenheiros do banco de dados identifiquem queries problemáticas de uma só vez para comparar uma sobreposição semana a semana da atividade de consulta e para solucionar problemas de desaceleração da base de dados de forma rápida e eficiente.”
Originalmente, foram consideradas soluções fora da caixa, como o MySQL Performance Schema e o log query lento, mas eles vieram com muitos problemas de desempenho. Ao contrário dessas ferramentas, o Query Analyzer é executado nas camadas de rede, minimizando qualquer tipo de perda de desempenho nas instâncias.
O agente captura pacotes query sem modificações e reconstrói o query usando os protocolos MySQL e, em seguida, calcula os tempos de resposta com base em uma diferença de tempo entre quando os pacotes entram pela primeira vez na porta e quando são produzidos pela resposta do banco de dados.
A interface de usuário fornece uma visão tabular de queries distintos para hosts, permitindo que o usuário filtre por períodos de tempo. Queries individuais também podem ser selecionadas, fornecendo gráficos e outras métricas úteis, como carregamento e tempo médio.
A ferramenta também fornece uma métrica de carregamento query que é calculada como ‘tempo de execução * número de execuções’. Ao tomar isso e convertê-lo em uma proporção, ele pode ser comparado com outras queries para ver quais obtiveram a maior porcentagem de carga. Por exemplo, mesmo se um query demorar alguns milissegundos, a métrica ainda seria correta se estiver executando muitas vezes, além de levar a maioria do carregamento.
O LinkedIn não definiu uma linha de tempo específica, mas pretende abrir a ferramenta em um futuro próximo.
***
Com informaçõesde InfoQ: https://www.infoq.com/news/2017/09/mysql-query-analyzer?