Podemos observar claramente o crescimento de ferramentas chamadas third-party application, que buscam aprimorar cada vez mais a administração de bancos de dados criados no MySQL.
Mesmo com várias opções, é preciso saber detectar bem aquelas que melhor vão somar quando o administrador de bancos de dados precisa realizar tarefas administrativas.
É nesse ponto que entram aquelas ferramentas que melhor conseguem extrair e somatizar as informações essenciais para verificar planos de execução, realizar um melhor restore do banco de dados e até verificar – agora com foco no MySQL.
As ferramentas third-party application ainda mostram qual foi a última transação já replicada para os servidores slaves e para aqueles que ainda não utilizam o MySQL 5.5.
Este artigo foca o pacote de scripts ou aplicativos MaatKit, que nos permite ter algumas boas dicas de como analisar o status atual do servidor de bancos de dados MySQL.
Nosso foco é voltado para a utilização dos scripts com uma versão do MySQL original, livre de bugs e problemas, aquele que é desenvolvido e entregue ao mercado pela Oracle Corporation.
Neste breve artigo, ainda vamos buscar exibir na prática como os principais scripts, escritos em perl, trabalham em prol de uma boa administração do servidor de bancos de dados MySQL.
Instalação
Agora vou mostrar a instalação do mesmo baseado em uma distribuição Linux denominada CentOS, na versão 5.5, que pode ser baixada clicando aqui, e os scripts ou aplicativos que serão exibidos são os seguintes:
- mk-error-log
- mk-kill
- mk-visual-explain
Todos os scripts têm uma determinada função e agregam dados para exibição de forma bem interessante, o que torna a experiência do administrador de bancos de dados bem mais confortável e menos traumática.
Lembro que para o novo MySQL 5.6 você conseguirá uma boa leitura do status dos seus bancos de dados, acessível através de consultas SQL, utilizando o banco de dados PERFORMANCE SCHEMA, que é o assunto de um próximo artigo.
Esta nova versão do MySQL já é esperada por muitos usuários pelas extensões de
funcionalidades em relação ao MySQL 5.5 e também pelas novidades que a
nova versão promete.
Para instalar o MaatKit em uma distribuição Ubuntu ou Debian, basta utilizar o apt-get e buscar o nome do pacote, pois já existe nos repositórios padrões.
Já na distribuição CentOS, alguns pacotes de perl serão necessários, e o comando abaixo resolverá seu problema com os pacotes perl necessários para rodar o MaatKit:
# Instala os pacotes perl-DBD* e perl-DBI*
[root@maatkitserver ~]# yum -y install perl-DB*
# Faz o download do pacote perl-TermReadyKey e instala com barra de progresso
[root@maatkitserver ~]# wget http://packages.sw.be/perl-TermReadKey/perl-TermReadKey-2.30-1.el5.rf.i386.rpm
[root@maatkitserver ~]# rpm -ivh perl-TermReadKey-2.30-1.el5.rf.i386.rpm
warning: perl-TermReadKey-2.30-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-TermReadKey ########################################### [100%]
[root@maatkitserver ~]# rpm -ivh maatkit-7486-1.noarch.rpm warning: maatkit-7486-1.noarch.rpm:
Header V4 DSA signature: NOKEY, key ID cd2efd2a
Preparing... ########################################### [100%]
1:maatkit ########################################### [100%]
Como já temos o MaatKit instalado, vamos ao que interessa!
mk-error-log
Este aplicativo dará ao administrador de bancos de dados o que ele necessita para fazer leituras constantes ao log de erros do MySQL, uma saída textual diferente daquela que é vista ao abrir o arquivo de logs para investigar os erros.
Caso o log de erros do seu servidor de bancos de dados MySQL não esteja habilitado, adicione a variável log-error ao agrupamento [mysqld] do arquivo de configuração do MySQL e reinicie o mesmo. Abaixo, eu mostro como podemos utilizar o mk-error-log para verificar o arquivo de log de erros.
[root@maatkitserver ~]# mk-error-log /var/run/mysqld/mysqld.err
Count Level Message
===== ===== ==================================================
1 info InnoDB: Started
1 info [Note] /usr/libexec/mysqld: ready for connections.
1 info mysqld version info
Ao passo que as mensagens de erro na execução normal do MySQL são armazenadas, elas serão também melhor classificadas na saída do mk-error-log.
mk-kill
Em muitos casos, quando o MySQL está necessitando de tuning ou mesmo de configurações para evitar contenção relacionada com discos, uma consulta poderá ficar em processamento por muito tempo antes de devolver os dados solicitados para uma aplicação.
Nesse momento, muitos recursos podem estar sendo consumidos, e talvez o administrador de bancos de dados possa querer matar consultas que já estão sendo processadas a X segundos. Podemos fazer isso com este aplicativo.
- Mata consultas rodando a mais de 60s:
mk-kill --busy-time 60 --kill
- Printa no terminal, não mata consultas rodando a mais de 60s:
mk-kill --busy-time 60 --print
- Faz a checagem por processos em SLEEP e os mata de 10 em 10s:
mk-kill --match-command Sleep --kill --victims all --interval 10
- Imprime no terminal todos os processo de login:
mk-kill --match-state login --print --victims all
- Combinação de comandos no terminal:
mysql -e "SHOW PROCESSLIST" | mk-kill --busy-time 60 --print
mk-visual-explain
Este é um dos aplicativos que eu mais gosto, pois exibe o EXPLAIN das consultas quase em um modelo de Álgebra Relacional. Este aplicativo torna a visualização do plano de execução mais facilitada para que sejam observados os pontos que podem ser melhorados na consulta.
Uma forma de executar o visual explain da consulta é copiá-la para um arquivo e executar a saída padrão deste arquivo para dentro do MySQL, assim vamos canalizar a saída final para o aplicativo mk-visual-explain:
# Consulta copiada para o arquivo query.sql
#
# EXPLAIN SELECT a.Continent, COUNT(a.Name) AS QtdCountries
# FROM Country AS a INNER JOIN City AS b
# ON a.Code = b.CountryCode
# GROUP BY a.Continent
# ORDER BY QtdCountries DESC;
#
[root@maatkitserver ~]# mysql world < query.sql | mk-visual-explain
Filesort
+- TEMPORARY
table temporary(b,a)
+- JOIN
+- Bookmark lookup
| +- Table
| | table a
| | possible_keys PRIMARY
| +- Unique index lookup
| key a->PRIMARY
| possible_keys PRIMARY
| key_len 3
| ref world.b.CountryCode
| rows 1
+- Table scan
rows 4079
+- Table
table b
No próximo artigo, vou apresentar mais aplicativos para administração de servidores de bancos de dados MySQL. Compartilhe seus testes, conte seus resultados para aperfeiçoarmos o conteúdo desta série. Até à próxima!






