O back-end do banco de dados afeta o aplicativo, o que pode afetar o desempenho organizacional. Quando isso acontece, os responsáveis tendem a querer uma solução rápida. Existem muitos caminhos diferentes para melhorar o desempenho no MySQL. Como uma escolha muito popular para muitas organizações, é bastante comum encontrar uma instalação do MySQL com a configuração padrão. No entanto, isso pode não ser apropriado para suas necessidades de carga de trabalho e configuração.
Neste blog, ajudaremos você a entender melhor a carga de trabalho do seu banco de dados e as coisas que podem prejudicá-lo. O conhecimento de como usar recursos limitados é essencial para quem gerencia o banco de dados, especialmente se você executa seu sistema de produção no banco de dados MySQL.
Para garantir que o banco de dados funcione conforme o esperado, começaremos com as ferramentas gratuitas de monitoramento do MySQL. Em seguida, examinaremos os parâmetros MySQL relacionados que você pode ajustar para melhorar a instância do banco de dados. Também veremos a indexação como um fator no gerenciamento de desempenho do banco de dados.
Para obter o uso ideal dos recursos de hardware, analisaremos a otimização do kernel e outras configurações cruciais do sistema operacional. Finalmente, examinaremos as configurações modernas baseadas na Replicação MySQL e como ela pode ser examinada em termos de atraso de desempenho.
Identificando problemas de desempenho do MySQL
Esta análise ajuda você a entender melhor a integridade e o desempenho do seu banco de dados. As ferramentas listadas abaixo podem ajudar a capturar e entender cada transação, permitindo que você fique por dentro de seu desempenho e consumo de recursos.
PMM (Monitoramento e Gerenciamento de Percona)
A ferramenta de monitoramento e gerenciamento Percona é uma coleção de ferramentas de código aberto dedicadas aos bancos de dados MySQL, MongoDB e MariaDB (no local ou na nuvem). O PPM é gratuito e é baseado no conhecido banco de dados de séries temporais Grafana e Prometheus. Ele fornece uma análise completa baseada em tempo para MySQL. Ele oferece painéis pré-configurados que ajudam a entender a carga de trabalho do banco de dados.
O PMM usa um modelo cliente/servidor. Você terá que baixar e instalar o cliente e o servidor. Para o servidor, você pode usar o Docker Container. É tão fácil quanto extrair a imagem de encaixe do servidor PMM, criar um contêiner e iniciar o PMM.
Puxar imagem do servidor PMM
docker pull percona/pmm-server:2
2: Pulling from percona/pmm-server
ab5ef0e58194: Downloading 2.141MB/75.78MB
cbbdeab9a179: Downloading 2.668MB/400.5MB
Criar contêiner PMM
docker create \
-v /srv \
--name pmm-data \
percona/pmm-server:2 /bin/true
Executar contêiner
docker run -d \
-p 80:80 \
-p 443:443 \
--volumes-from pmm-data \
--name pmm-server \
--restart always \
percona/pmm-server:2
Você também pode verificar como fica sem uma instalação. Uma demonstração do PMM está disponível aqui.
Outra ferramenta que faz parte do conjunto de ferramentas do PMM é o Query Analytics (QAN). A ferramenta QAN acompanha o tempo de execução das consultas. Você pode até obter detalhes de consultas SQL. Ele também fornece uma visão histórica dos diferentes parâmetros que são críticos para o desempenho ideal de um servidor de banco de dados MySQL. Isso geralmente ajuda a entender se alguma alteração no código pode prejudicar seu desempenho. Por exemplo, um novo código foi introduzido sem o seu conhecimento. Um uso simples seria exibir consultas SQL atuais e destacar problemas para ajudá-lo a melhorar o desempenho de seu banco de dados.
O PMM oferece visibilidade pontual e histórica do desempenho do banco de dados MySQL. Os painéis podem ser personalizados para atender às suas necessidades específicas. Você pode até expandir um painel específico para encontrar as informações desejadas sobre um evento passado.
Monitoramento de banco de dados gratuito com ClusterControl
ClusterControl fornece monitoramento em tempo real de toda a infraestrutura de banco de dados. Ele suporta vários sistemas de banco de dados começando com MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (ambos Percona e MariaDB), MongoDB, PostgreSQL e TimescaleDB. Os módulos de monitoramento e implantação são de uso gratuito.
ClusterControl consiste em vários módulos. No ClusterControl Community Edition gratuito, podemos usar:
Os consultores de desempenho oferecem conselhos específicos sobre como resolver problemas de banco de dados e servidor, como como desempenho, segurança, gerenciamento de log, configuração e planejamento de capacidade. Os relatórios operacionais podem ser usados para garantir a conformidade em centenas de instâncias. No entanto, monitoramento não é gerenciamento. O ClusterControl possui recursos como gerenciamento de backup, recuperação/failover automatizado, implantação/escalonamento, atualizações contínuas, segurança/criptografia, gerenciamento de balanceador de carga e assim por diante.
Monitoramento e Consultores
O ClusterControl Community Edition oferece monitoramento de banco de dados gratuito que fornece uma visão unificada de todas as suas implantações em data centers e permite detalhar nós individuais. Semelhante ao PMM, podemos encontrar painéis baseados em dados em tempo real. É saber o que está acontecendo agora, com métricas de alta resolução para maior precisão, painéis pré-configurados e uma ampla gama de serviços de notificação de terceiros para alertas.
Os sistemas locais e em nuvem podem ser monitorados e gerenciados a partir de um único ponto . Verificações de integridade inteligentes são implementadas para topologias distribuídas, por exemplo, detecção de particionamento de rede, aproveitando a visão do balanceador de carga dos nós do banco de dados.
ClusterControl Workload Analytics em um dos componentes de monitoramento que podem ajudá-lo facilmente a rastrear suas atividades de banco de dados. Ele fornece clareza em transações/consultas de aplicativos. As exceções de desempenho nunca são esperadas, mas ocorrem e são fáceis de perder em um mar de dados. A descoberta de valores atípicos obterá todas as consultas que repentinamente começarem a ser executadas muito mais lentamente do que o normal. Ele rastreia a média móvel e o desvio padrão dos tempos de execução da consulta e detecta/alerta quando a diferença entre o valor excede a média em dois desvios padrão.
Como podemos ver na imagem abaixo, conseguimos capturar algumas consultas que entre um dia tendem a alterar o tempo de execução em um horário específico.
Para instalar o ClusterControl clique aqui e baixe o script de instalação. O script de instalação cuidará das etapas de instalação necessárias.
Você também deve verificar o ClusterControl Demo para vê-lo em ação.
Você também pode obter uma imagem docker com ClusterControl.
$ docker pull severalnines/clustercontrol
Para obter mais informações sobre isso, siga este artigo.
Indexação do banco de dados MySQL
Sem um índice, a execução dessa mesma consulta resulta em uma verificação de cada linha para os dados necessários. A criação de um índice em um campo em uma tabela cria uma estrutura de dados extra, que é o valor do campo e um ponteiro para o registro ao qual está relacionado. Em outras palavras, a indexação produz um atalho, com tempos de consulta muito mais rápidos em tabelas extensas. Sem um índice, o MySQL deve começar com a primeira linha e então ler toda a tabela para encontrar as linhas relevantes.
De um modo geral, a indexação funciona melhor nas colunas que são o assunto das cláusulas WHERE em suas consultas normalmente executadas.
As tabelas podem ter vários índices. O gerenciamento de índices inevitavelmente exigirá a capacidade de listar os índices existentes em uma tabela. A sintaxe para visualizar um índice está abaixo.
Para verificar os índices na tabela MySQL, execute:
SHOW INDEX FROM table_name;
Como os índices são usados apenas para acelerar a busca por um campo correspondente nos registros, é lógico que a indexação de campos usados apenas para saída seria simplesmente um desperdício de espaço em disco. Outro efeito colateral é que os índices podem estender as operações de inserção ou exclusão e, portanto, quando não forem necessários, devem ser evitados.
Troca de banco de dados MySQL
Em servidores onde o MySQL é o único serviço em execução, é uma boa prática definir vm.swapiness =1. A configuração padrão é definida como 60, o que não é apropriado para um sistema de banco de dados.
vi /etc/sysctl.conf
vm.swappiness = 1
Páginas enormes transparentes
Se você estiver executando seu MySQL no RedHat, certifique-se de que Transparent Huge Pages esteja desabilitado.
Isso pode ser verificado pelo comando:
cat /proc/sys/vm/nr_hugepages
0
(0 significa que as páginas transparentes enormes estão desabilitadas.)
Programador de E/S MySQL
Na maioria das distribuições, agendadores de E/S noop ou deadline devem ser habilitados por padrão. Para verificar execute
cat /sys/block/sdb/queue/scheduler
Opções do sistema de arquivos MySQL
Recomenda-se usar sistemas de arquivos registrados como xfs, ext4 ou btrfs. O MySQL funciona bem com todos eles e as diferenças provavelmente virão com o tamanho máximo de arquivo suportado.
- XFS (tamanho máximo do sistema de arquivos 8EB, tamanho máximo do arquivo 8EB)
- XT4 (tamanho máximo do sistema de arquivos 8EB, tamanho máximo do arquivo 16TB)
- BTRFS (tamanho máximo do sistema de arquivos 16EB, tamanho máximo do arquivo 16EB)
As configurações padrão do sistema de arquivos devem ser aplicadas corretamente.
NTP Deamon
É uma boa prática recomendada instalar o demônio do servidor de horário NTP em servidores de banco de dados. Use um dos seguintes comandos do sistema.
#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp
Conclusão
Isso é tudo para a primeira parte. No próximo artigo, continuaremos com as configurações de sistemas operacionais de variáveis MySQL e consultas úteis para coletar o status de desempenho do banco de dados.