Controle de estatísticas do SQL com o ExtSQL ANÁLISE Marcando os pontos O ExtSQL fornece estatísticas de uso detalhadas dos sistemas de banco de dados MySQL e PostgreSQL. por John Murtari O MySQL e o PostgreSQL tornaram-se o padrão de bancos de dados de código aberto devido às suas ativas comunidades de desenvolvimento, desempenho sólido e operação confiável. Apesar da força e flexibilidade dessas variantes de SQL, as opções para se obter o histórico de uso do banco de dados são relativamente limitadas. As ferramentas de monitoramento do SQL geralmente concentram-se no monitoramento do servidor. O projeto Extended Usage Statistics for SQL (ExtSQL) é um esforço para criar uma gama maior de informações estatísticas disponíveis aos administradores de bancos de dados por meio de comandos simples na linha de comando do SQL. De fato, o ExtSQL fornece recursos de administração avançados Tabela 1: db Um banco de dados Classe user host conuser condb server Entidade Um usuário Nome da máquina local para o MySQL e o PostgreSQL que nem estão disponíveis nos grandes fornecedores de SQL. Os administradores de bancos de dados podem usar o ExtSQL para monitorar e controlar o uso do servidor até o banco de dados individual, o usuário e até mesmo monitorar o cliente. Quase todas as variáveis disponíveis através do comando SHOW STATUS podem ser controladas. Por exemplo, para ver todas as atividades do usuário com incrementos horários nas últimas 24 horas, mostrando o número de buscas de cada tipo, basta digitar: SHOW STATISTICS Com_select, Com_update, Com_insert FROM user WHERE Com_select > 100 HISTORY LIMIT 24 Combo de conexão e usuário-host Combo de conexão e db-host O servidor A empresa Software Workshop desenvolveu o ExtSQL e agora o disponibiliza como um software de código aberto sob a licença GPL. Ela espera que os recursos implementados pelo ExtSQL sejam estendidos a outros bancos de dados, como o Oracle e o DB2, e se tornem parte do padrão SQL. Por enquanto, o ExtS- QL vem no formato de substitutos dos daemons servidores usados com o MySQL e o PostgreSQL. Este artigo descreve como instalar e configurar o ExtSQL em uma instalação típica do MySQL. O processo para o PostgreSQL é semelhante. Um novo mysqld O site do ExtSQL [1] disponibiliza binários compilados para vários sistemas operacionais e plataformas de hardware para avaliação e licenciamento. As instruções de instalação e uso do ExtSQL mais atualizadas também estão disponíveis no site. Primeiramente é preciso baixar os patches do ExtSQL para a sua versão de servidor MySQL e incluir o arquivo.gz no topo da árvore da sua distribuição MySQL. Digite make distclean no topo da árvore para remover quaisquer compilações anteriores e depois digite: 50 http://www.linuxmagazine.com.br
ExtSQL ANÁLISE tar -zxvf \ extsql-my-src-5.0.45-rhel4- x86-2-1a-2.0b.tar.gz para descompactá-lo. O resultado deve ser composto por arquivos similares a estes quatro: patch-5.0.2.0b compat-5.0.1a do_conf-5.2 README.source_extsql Os primeiros dois são arquivos de patches. O arquivo patch-5... contém a maioria das alterações que formam o ExtSQL. O segundo arquivo (compat-...) contém correções voltadas à versão específica do MySQL. O arquivo do_conf-... contém os comandos de configuração exatos usados para compilar os fontes, então, basta mesclar essa lista com quaisquer seleções feitas. Como sempre, é aconselhável ler o arquivo README para obter as últimas informações. O próximo passo é aplicar os patches, mas antes use o arquivo compat-...: patch -V t -p0 \ -lnu < compat-5.0.1a patch -V t -p0 \ -lnu < patch-5.0.2.0b Em seguida, execute o mesmo comando configure usado para montar sua versão atual do MySQL com as opções que desejar. Com o ExtSQL 5.0.x, é necessário acrescentar a seguinte opção à atual lista lista de CXXFLAGS usada na definição de sua configuração (por exemplo, -DEXTSQL_50=1): CXXFLAGS=-O2 -DEXTSQL_50=1 -pipe -m32 -march=i386 -mtune=pentium4 Depois, digite make para compilar o mysqld. Um novo binário mysqld no diretório sql/ montado deve ser o resultado. Listagem 1: Exemplos de uso Os exemplos abaixo dão uma amostra dos comandos do ExtSQL e suas saídas. ## Mostrar o número de selects e inserts dados por todos os usuários: sql> SHOW STATISTICS Com_select, Com_insert, Questions FROM user; + + + -+ + user Com_select Com_insert Questions + + + -+ -- + bandala 8302675 95973 23153940 sandymao 1702812 6205 3829023 ponnetli 24909 4784 95646 ## Mostrar o número de selects, queries totais e updates feitos por ## todos os clientes: sql> SHOW STATISTICS Com_select, Questions, Com_update FROM host; + + + + + host Com_select Questions Com_update + + + + + db2.adomain.com 17715223 44224076 4143634981 lathe.adomain.com 2738061 9743215 3913397495 telkomadsl.co.za 195 5390 539604 ## Mostrar o número de selects, queries totais e updates feitos por ## todos os usuários de um cliente com mais de 10.000 queries: sql> SHOW STATISTICS Com_select, Questions, Com_update FROM conuser WHERE Questions > 10000; + + + + + conuser (user@host) Com_select Questions Com_update + + + + + bandala@db2.adomain.com 8306726 23163320 3439850933 sandymao@db2.adomain.com 1704040 3831803 3365501841 ponnetli@taro.adomain.com 24920 95662 156529077 ## Mostra o número de selectos, queries totais e updates do BD ## allison nos últimos três minutos de atividade: sql> SHOW STATISTICS Com_select, Questions, Com_update FROM db LIKE allison HISTORY LIMIT 3; + + + + + + db minutes Com_select Questions Com_update + + + + + + allison 11/20 13:56 216 382 318343 allison 11/20 13:55 642 1618 1386347 allison 11/20 13:54 280 699 646855 Linux Magazine #66 Maio de 2010 51
ANÁLISE ExtSQL Quadro 1: Sintaxe de INFORMATION_SCHEMA Muitos já sabem que INFORMATION SCHEMA já faz parte do padrão SQL que e seu propósito é tornar os bancos de dados SQL mais auto-descritivos. O projeto ExtSQL já possui um exemplo funcional de implementação no MySQL 5.0.x (listagem 2). Listagem 2: INFORMATION_SCHEMA mysql> use INFORMATION_SCHEMA; mysql> SHOW TABLES; ## Nota: as tabelas adicionais configuradas pelo DBA para o ExtSQL ## têm o prefixo EXTSTATS_ EXTSTATS_condb EXTSTATS_conuser EXTSTATS_db EXTSTATS_host EXTSTATS_server EXTSTATS_user ## Fim das tabelas adicionadas mysql> SELECT user, minutes, Com_select, Questions FROM EXTSTATS _user WHERE TIMEDIFF(now(), minutes) < 10:00 ; user minutes Com_select Questions thebook 2008 07 19 09:28:00 2 4 thebook 2008 07 19 09:27:00 3 3 matt 2008 07 19 09:53:00 4 4 matt 2008 07 19 09:52:00 0 1 ## Isto disponibiliza a sintaxe completa do parser SQL, MSA... expõe ## o registro dos dados num buffer circular em um intervalo de tempo ## (minutos, no nosso exemplo), com a hora 0000-00-00 contendo ## os totais desde a inicialização do servidor. mysql> SELECT user, minutes, Com_select, Questions FROM EXTSTATS _user WHERE user= thebook LIMIT 5; user minutes Com_select Questions thebook 2008 07 19 09:27:00 3 3 thebook 2008 07 19 09:25:00 2 73 thebook 2008 07 18 16:44:00 0 14 Instalação do servidor ExtSQL Em vez de usar make install, o mysqld tem que ser manualmente substituído. Recomendo o seguinte procedimento (supondo que o diretório base da instalação do MySQL seja /usr/local/mysql). Comece fazendo um backup de seu banco de dados e do atual mysqld: cp -a mysqld mysqld.sav O ExtSQL imprime as informações de status no arquivo de erro do MySQL. Em outra janela, monitore o servidor com o seguinte comando (use o caminho correto para o seu sistema): tail -f /usr/local/mysql/var/ servidor.err & Agora, já está tudo pronto para instalar e ativar o novo servidor com os comandos básicos disponíveis no MySQL para parar e reiniciar o servidor. Caso sua instalação use outros programas como wrappers, use-os também: /usr/local/mysql/bin/mysqladmin -uroot -p senha shutdown 060612 07:58:08 [Note] /usr/local /mysql/bin/mysqld: Shutdown complete Nota: o caminho do comando shutdown no arquivo de log deve ser o mesmo usado previamente para o backup do mysqld. Copie o novo mysqld para o lugar: cp -a \ /caminho/da/instalação/sql/mysqld \ mysqld e inicie o novo servidor: /usr/local/mysql/bin/mysqld_safe \ --user=$mysql_user $other_args & 52 http://www.linuxmagazine.com.br
ExtSQL ANÁLISE 071121 7:42:47 [Note] ExtSQL build: ExtSQL version: extsql-my -bin-5.0.45-rhel4-x86-2-1a-2.0b 060612 7:58:38 [Note] ExtSQL disabled by user, no extsql_class _list defined Momento para uma pausa. As linhas acima confirmam que o servidor foi montado com o subsistema ExtSQL e está desabilitado no momento, pois nenhuma estatística foi solicitada. É recomendável usar o servidor por pelo menos um dia para ter certeza de que tudo funciona corretamente. O desempenho do servidor não deverá ser afetado. Caso ocorra algum erro, ele pode indicar problemas com a montagem. Para retornar a uma boa configuração conhecida, basta restaurar a versão do mysqld e reiniciar o servidor. para começar a registrar dados estatísticos, abra /etc/my.cnf e adicione a seguinte linha, que deve ficar na seção [mysqld] do arquivo de configuração: extsql_class_list= user, max-100, time-120, units-h, (Com_insert, Com_select, Com_update, Com_ delete, Com_replace, Qcache_hits, Questions, Slow_queries) Os erros durante a inicialização e a operação serão anotados no log de erro e o sistema irá se desabilitar, deixando intactas as operações do MySQL. Terminologia No ExtSQL, as entidades que interagem com o servidor são chamadas de classes (tabela 1). Dentro de uma classe, instâncias específicas são chamadas instances (instâncias). Uma instância de usuário pode ser dominic ou christina, por exemplo. A classe server é única, pois a única instância é o próprio servidor. Para cada instância, é possível seguir itens individuais de dados chamados vars. Vars incluem quase todos os valores mostrados no atual comando SHOW STATUS. Use o nome da var como aparece no SHOW STATUS; por exemplo, Com_select confere os comandos select. Opções de configuração Existem mais de 100 vars (itens de dados) disponíveis. Configure o servidor ExtSQL descrevendo as vars que precisam ser conferidas e como os dados devem ser coletados. Para um exemplo mais completo, considere esta string, que deve estar em uma única linha no arquivo de configuração: extsql_class_list= user, max-50, time-60, units-m, (Com_select, Com_update), db, max-50, time-10, units-h, (Com_insert, Com_select, Com_update, Qcache_hits), host, max-5, time-3, units-d, (Com_ select, Com_update, Slow_queries), server, max-5, time-3, units-d, (Questions, Qcache_hits) Da mesma forma como ocorre com o SHOW STATUS (neste caso, com dados de histórico), o servidor irá acompanhar informações de quatro classes diferentes: user, db, host e estatísticas cumulativas do servidor. Para cada classe, max- precede o número máximo de instâncias dela, time- antecede o número de unidades de tempo do histórico a ser armazenadas e units- designa o período de interesse (m, minutos; h, horas; d, dias). Após os limites de cada classe, está incluída uma lista de variáveis (vars) separada por vírgulas. A linha iniciada com db é uma diretiva para acompanhar o máximo de 50 dbs e registrar dados do histórico a cada dez horas. As variáveis mencionadas no comando anterior são inserções (insert), seleções (select), atualiza- O comando acima deve ficar em uma única linha física no arquivo. Ao alterar o /etc/my.cnf, certifiquese de remover essa linha caso volte ao mysqld padrão. Ao reiniciar o servidor, as seguintes entradas aparecerão no log de erros: 060612 8:26:12 [Note] ExtSQL build: ExtSQL version: extsql-my-bin-5.0.45-rhel4-x86-2- 5a-3.0b 060612 8:26:12 [Note] ExtSQL ACTIVE tracking memory: 435600 bytes for 1 class Tabela 2: Outros comandos administrativos Comando STATISTICS (ON OFF) STATISTICS RESET [arq_config] STATISTICS WRITE arquivo STATISTICS READ arquivo Ação Ativa e desativa a coleta de dados. Dados e histórico não se perdem. Limpa dados antigos. Começa a coleta utilizando as definições de classes existentes, ou usa as que estão em no arquivo de configuração arq_config. Salva uma imagem de dados em um arquivo. Útil para armazenar dados de um evento anômalo para posterior análise. Carrega os dados estatísticos de um arquivo especificado. Linux Magazine #66 Maio de 2010 53
ANÁLISE ExtSQL ções (update) e hits de buscas no cache (cache hits). SHOW STATISTICS O objetivo da sintaxe dos comandos era ficar o mais próximo possível do padrão SQL. A sintaxe descrita aqui deve parecer familiar, especialmente se SHOW STATISTICS for substituído por SELECT. A listagem 1 mostra alguns exemplos de uso do ExtSQL. O LIKE é diferente, pois combina com instâncias específicas; já a nova palavra-chave HISTORY que produz uma saída do histórico. LIMIT opera de modo diferente quando HISTORY for especificado. Sem o HISTORY, ele limita o número de resultados mostrados, enquanto que com HISTORY, ele funcionará como um limitador de tempo. SHOW STATISTICS ( * Var list) FROM Class [LIKE Instance pattern ] [WHERE Var ( < > = ) num] [ORDER BY Var] [HISTORY] [LIMIT num] Por exemplo, é possível perguntar: SHOW STATISTICS * FROM user LIKE %joe% WHERE Com_select > 500 No SQL padrão seria: SHOW STATISTICS * FROM user WHERE user LIKE %joe% AND Com_select > 500 disponível nos servidores, não havia problemas em armazenar dados na RAM, dando completo controle ao administrador do banco de dados sobre quanto de memória seria alocada para isso. Isso resultou em uma média de efeito de desempenho de 5% um número aceitável na maioria dos servidores. Para uma melhor compreensão de estatísticas de desempenho, considere como o ExtSQL registra e relata o tempo. Com a definição de classe user, max-50, time-10, units-h, o ExtSQL irá criar um buffer com 11 intervalos de tempo. O buffer 0 contém sempre números cumulativos desde a inicialização do servidor, e é o número mostrado no comando SHOW STATISTICS * FROM user. O histórico de atividade é capturado em períodos de dez horas, de maneira circular e somente quando ocorre atividade por exemplo, inicie o servidor e, 20 horas depois, digite: SHOW STATISTICS * FROM user HISTORY Vamos supor que a atividade do usuário tenha sido registrada em cada uma das dez primeiras horas de operação do servidor e, depois, apenas nas últimas cinco horas (isto é, houve um intervalo de cinco horas sem atividade). A atividade ocorrida entre a quinta e a décima horas de operação do servidor é relatada hora a hora, depois, nas últimas cinco horas. Cada linha possui um timestamp de uma hora. Com o comando SHOW STATISTICS FROM user, é possível ver apenas uma linha com os totais cumulativos de todas as 20 horas. Segurança Se não for necessário compartilhar as informações do ExtSQL com todos os usuários, o arquivo de configuração permite especificar quem terá acesso: extsql_users= john,dominic, phil,mary O usuário root sempre tem acesso. Controle do ExtSQL Existem outros comandos (tabela 2) que permitem que o administrador suspenda temporariamente a coleta e o armazenamento de dados e até mesmo determine quais dados serão coletados sem que seja necessário reiniciar o servidor. A opção de configuração chamada extsql_reload_file permite armazenar dados coletados que são automaticamente salvos e recuperados durante uma reinicialização. Futuro O trabalho de desenvolvimento do ExtSQL é grande, e há planos da Workshop Software de oferecer um ponto para a discussão da comunidade, relatórios de falhas, correções e melhorias. n LIKE é uma cláusula separada na sintaxe, que combina apenas instâncias de Class. Por enquanto, a sintaxe está limitada à cláusula WHERE, e ORDER BY está disponível caso INFORMATION SCHEMA seja suportado na versão base do seu servidor ExtSQL. Desempenho O desempenho foi o primeiro problema no desenvolvimento do ExtS- QL. Com cada vez mais memória Mais informações [1] ExtSQL: http://www.extsql.com/ Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em cartas@linuxmagazine.com.br Este artigo no nosso site: http://lnm.com.br/article/3482 54 http://www.linuxmagazine.com.br
Quer falar com os 30.000 profissionais de TI com maior nível de conhecimento técnico do mercado nacional? Então anuncie na Linux Magazine! Segundo dados do Instituto Verificador de Circulação*, a Linux Magazine é atualmente a segunda revista mais vendida para profissionais de TI do mercado editorial brasileiro. Além disso, é a revista que tem o público mais qualificado no quesito técnico. Nossa combinação exclusiva de conteúdo avançado com uma abordagem prática faz da Linux Magazine a publicação preferida de quem toma decisões e faz recomendações para compra de produtos e contratação de serviços. Anuncie conosco e fale com esse público. Para anunciar, entre em contato: anuncios@linuxmagazine.com.br 11 4082.1300 *Comparação de circulação para os últimos três meses de publicações nacionais voltadas ao segmento de TI.