UNIVERSIDADE DO VALE DO ITAJAÍ
CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE CIÊNCIA DA COMPUTAÇÃO
SIMULADOR DE ANÁLISE DE DESEMPENHO PARA BANCO DE DADOS
MYSQL
Área de Banco de Dados
por
Gustavo Ferreira de Araujo Silva
Adriana Gomes Alves, M. Eng.
Orientadora
Itajaí (SC), Julho de 2012
UNIVERSIDADE DO VALE DO ITAJAÍ
CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE CIÊNCIA DA COMPUTAÇÃO
SIMULADOR DE ANÁLISE DE DESEMPENHO PARA BANCO DE DADOS
MYSQL
Área de Banco de Dados
por
Gustavo Ferreira de Araujo Silva
Relatório apresentado à Banca Examinadora do
Trabalho de Conclusão do Curso de Ciência da
Computação para análise e aprovação.
Orientadora: Adriana Gomes Alves, M. Eng.
2
Itajaí (SC), Julho de 2012
3
SUMÁRIO
LISTA DE ABREVIATURAS............................................................... vi
LISTA DE FIGURAS............................................................................ vii
LISTA DE TABELAS............................................................................ ix
RESUMO.................................................................................................. x
ABSTRACT.............................................................................................xi
1 INTRODUÇÃO...................................................................................12
1.1 PROBLEMATIZAÇÃO.................................................................................... 15
1.1.1 Formulação do Problema...............................................................................15
1.1.2 Solução Proposta............................................................................................ 16
1.2 OBJETIVOS.......................................................................................................17
1.2.1 Objetivo Geral................................................................................................ 17
1.2.2 Objetivos Específicos......................................................................................17
1.3 METODOLOGIA............................................................................................. 18
1.4 ESTRUTURA DO TRABALHO...................................................................... 18
2 FUNDAMENTAÇÃO TEÓRICA..................................................... 20
2.1 AVALIAÇÃO E ANÁLISE DE DESEMPENHO...........................................20
2.2 BANCO DE DADOS MYSQL.......................................................................... 22
2.2.1 Arquitetura do MySQL................................................................................. 24
2.2.2 Tipo de Tabelas ou Ferramentas de Armazenagem....................................26
2.3 ANÁLISE E AJUSTE DE DESEMPENHO DO MYSQL..............................31
2.3.1 Configuração de Parâmetros.........................................................................31
2.3.2 Instruções SQL............................................................................................... 32
2.4 FERRAMENTAS PARA ANÁLISE DE DESEMPENHO............................ 34
2.4.1 Mysqlslap – Cliente de Emulação de Carga................................................ 35
2.4.2 Mysqladmin.................................................................................................... 37
2.4.3 phpMyAdmin..................................................................................................38
2.4.4 Innotop – Monitor em tempo real das conexões..........................................40
2.4.5 Tuning Primer................................................................................................ 41
2.4.6 Resultado das Ferramentas Avaliadas......................................................... 43
3 DESENVOLVIMENTO..................................................................... 44
3.1 IMPLEMENTAÇÃO.........................................................................................44
3.2 APRESENTAÇÃO DA FERRAMENTA........................................................ 47
3.3 VALIDAÇÕES DA FERRAMENTA...............................................................58
CONCLUSÃO........................................................................................ 62
REFERÊNCIAS BIBLIOGRÁFICAS................................................. 63
A PROJETO...........................................................................................66
iv
A.1 REQUISITOS.................................................................................................... 66
A.1.1 Requisitos Funcionais.....................................................................................66
A.1.2 Requisitos Não Funcionais.............................................................................67
A.2 DIAGRAMA DE CASOS DE USO..................................................................68
A.2.1 Análise e Ajuste de Desempenho...................................................................68
A.2.2 DIAGRAMA DE COMPONENTES............................................................ 78
A.2.3 DIAGRAMA DE IMPLANTAÇÃO.............................................................79
v
LISTA DE ABREVIATURAS
AJAX
ANSI
BD
DBA
ISO
PHP
PHP
SGBD
SQL
TNST
TST
TTC
UML
UNIVALI
Asynchronous Javascript and XML
American National Standards Institute
Banco de Dados
Data Base Administrator
International Organization for Standardization
PHP: Hypertext Preprocessor
PHP: Hypertext Preprocessor
Sistema Gerenciador de Banco de Dados
Structured Query Language
Tabelas Não Seguras com Transação
Tabelas Seguras com Transação
Trabalho de Técnico-Científico
Unified Modeling Language
Universidade do Vale do Itajaí
vi
LISTA DE FIGURAS
Figura 1. Arquitetura conceitual do MySQL: Camadas Básicas.......................................................22
Figura 1. Arquitetura conceitual do MySQL: Camadas Básicas........25
Figura 2. my.cnf: arquivo de configuração do MySQL........................32
Figura 3. mysqlslap: terminal com o comando de execução da
ferramenta.................................................................................................36
Figura 4. mysqlslap: resultado obtido do comando referente à Figura
3 36
Figura 5. mysqladmin: ferramenta de administração do MySQL......37
Figura 6. phpMyAdmin: tela com as Variáveis de Runtime do
MySQL.39
Figura 7. phpMyAdmin: tela com as Variáveis de Configuração do
MySQL.40
Figura 8. Innotop: monitor de transações e status do servidor MySQL
41
Figura 9. Tuning Primer: script para monitoração das variéveis de
execução do servidor MySQL.................................................................41
Figura 10. Tuning Primer: resultado do módulo
MAX_CONNECTIONS...........................................................................42
Figura 11. Tela de login do simulador....................................................48
Figura 12. Tela inicial..............................................................................49
Figura 13. Seleção para o tipo de simulação..........................................50
Figura 14. Seleção dos parâmetros para execução do simulador........50
Figura 15. Confirmação para início da simulação................................51
Figura 16. Tela com etapas do processo de criação do ambiente........52
Figura 17. Tela de simulação...................................................................53
Figura 18. Seleção para os resultados da simulação.............................54
Figura 19. Relatório com as simulações da base de dados selecionada.
54
Figura 20. Visualização e Alteração das variáveis de configuração....55
Figura 21. Tela para alteração da variável de configuração do
MySQL.56
vii
Figura 22. Tela para visualização das variáveis de execução/status....57
Figura 23. Tela para visualização dos processos, com opção de matar
processo.....................................................................................................57
Figura 24. Validação do ambiente..........................................................58
Figura 25. Lista de processos gerados aleatoriamente..........................59
Figura 26. Alteração da variável Read_Buffer_Size.............................60
Figura 27. Resultado simulação..............................................................60
Figura 28. Diagrama de Casos de Uso: Análise e Ajuste de
Desempenho..............................................................................................68
Figura 29. Efetua autenticação no MySQL Server...............................70
Figura 30. Tela inicial com informações do servidor............................70
Figura 31. Visualiza Variáveis de Configuração do Sistema............71
Figura 32. Altera Variáveis do MySQL.................................................73
Figura 33. Visualiza Variáveis de Runtime...........................................74
Figura 34. Analisa Processos em Execução............................................75
Figura 35. Inicia a Simulação..................................................................77
Figura 36. Telas para opções do início da Simulação...........................77
Figura 37. Resultados Obtidos na simulação.........................................78
Figura 38. Diagrama de Componentes...................................................79
Figura 39. Diagrama de Implantação: Configuração Física................80
viii
LISTA DE TABELAS
Tabela 1. Variáveis de Ambiente Tabela MyISAM..............................27
Tabela 2. Variáveis de Ambiente Tabela InnoDB.................................30
Tabela 3. Comparativo das ferramentas para análise de desempenho
do MySQL.................................................................................................43
Tabela 4. Matriz Requisito Funcional e Diagrama de Casos de Uso...69
Tabela 5. Variáveis de Status do servidor MySQL...............................82
ix
RESUMO
ARAUJO SILVA, Gustavo Ferreira de. Simulador de Análise de Desempenho para Banco de
Dados MySQL. Itajaí, 2011. 82 f. Trabalho de Conclusão de Curso (Graduação em Ciência da
Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí,
Itajaí, 2011.
O MySQL é um Sistema Gerenciador de Banco de Dados (SGBD) relacional de código aberto
(Open Source) e licença livre para uso da comunidade. Sua linguagem de banco de dados é a SQL
(Structured Query Language) a qual segue os padrões e normas técnicas estabelecidas e controladas
pela ANSI (American National Standards Institute) em sociedade com a ISO (Internacional
Organization for Standardization) e a IEC (International Electrotechnical Commission). Um SGBD
fornece ao DBA (Data Base Administrator) o total controle dos dados e estrutura de uma base de
dados. Para o DBA, além da manipulação e controle destes dados e definição da estrutura do
SGBD, outra função importante é o ajuste de desempenho onde muitas vezes é executado de forma
manual. A análise de desempenho é focada em 05 (cinco) níveis de ajuste para melhora no
desempenho: i) otimização do esquema de banco de dados, ii) ajuste das opções do servidor, iii)
ajuste nas configurações do banco de dados, iv) seleção e ajuste de hardware e v) ajuste na forma de
armazenamento dos dados. Existem diversas ferramentas livre e de código aberto para
administração do MySQL, mas nenhuma executa de forma automatizada a análise e ajuste de
parâmetros para melhora no seu desempenho. Este Trabalho Técnico-Científico de Conclusão de
Curso (TTC) visou desenvolver funcionalidades para análise e ajuste nos parâmetros de
configuração do MySQL e implementou um simulador para análise e ajuste de parâmetros visando
melhoria de desempenho do SGBD MySQL. O resultado obtido com esta ferramenta é contribuir
com a comunidade que utiliza o MySQL como SGBD e permitir que novas funcionalidades sejam
implementadas em trabalhos futuros.
Palavras-chave: Banco de Dados. Desempenho. MySQL.
x
ABSTRACT
MySQL is a DBMS (Data Base Manager System) relational open source and free licensed to use it
of community. It's databases language is the SQL (Structured Query Language) which one follows
the standard and technical rules established and controlled by ANSI (American National Standards
Institute) jointed with the ISO (Internacional Organization for Standardization) and the IEC
(International Electrotechnical Commission). A DBMS gives to the DBA (Data Base Administrator)
the total control of the data and structure of a database. To the DBA, beyond manipulation and
control of those datas and structures definitions of DBMS another important function is the control
performance where many times is made of by hand. The performance analysis is focused on 05
(five) tuning levels to get the better performance. i) optimization of the databases schema, ii) tuning
server options, iii) tuning databases configurations, iv) hardware selection and tuning and v)
adjustment of the data storage. There are many tools and open source to MySQL administration but
no one can be executed by the automatized way analysis and tuning parameter to get a better
performance. TCC aims to develop functionalities to analysis and possible tunings on MySQL
configuration parameters and will be implemented in the form of a simulator. The wish result for
this tool is to contribute for the community who uses the MySQL as DBMS and permit for
improvements and new functionalities are implemented for the future works.
Keywords: Database. Performance. MySQL.
xi
1 INTRODUÇÃO
A Análise e Ajuste de Desempenho dos SGBD (Sistemas Gerenciadores de Banco de
Dados) visa melhorar seu funcionamento, sendo o tempo a principal métrica, reduzindo custos. Ela
também ajuda a antecipar, prever e eliminar problemas de paradas no seu funcionamento decorrente
de erros em suas variáveis de configuração e de execução, além de outros pontos de análise e
avaliação de ajuste.
Segundo Schwartz et al (2009), avaliação e análise de desempenho são duas práticas
essenciais para encontrar gargalos. Elas são relacionadas, mas não são as mesmas. A avaliação de
desempenho mede o desempenho do sistema, permitindo determinar sua capacidade. Também
mostra quais mudanças são importantes para o bom funcionamento de um SGBD e quais não são,
ou mostra como a aplicação executa com dados diferentes de configuração.
Schwartz et al (2009) comenta também que, a análise de desempenho ajuda a encontrar onde
a aplicação gasta mais tempo de processamento ou consome mais recursos como, por exemplo, a
utilização da rede. Em outras palavras, a avaliação de desempenho responde à pergunta “Quão bem
isso executa?” e análise de desempenho responde à pergunta “Por que isso executa dessa maneira?”.
Lima (2003) explica que, antes de tudo, é importante ressaltar que não há muito que
melhorar em um servidor se o projeto do banco ou sistema não for bem feito, como, por exemplo,
tabelas que não observam as formas normais de funcionamento, falta de índices para colunas
importantes, consultas mal-elaboradas, dimensionamento incorreto de local e espaço para os dados,
entre outros. Mesmo que isso não aconteça, a otimização será difícil se os recursos de equipamento
forem limitados. O mesmo autor conclui que, uma boa análise e um bom projeto de dados,
conseqüência de um levantamento realista, são elementos básicos para a plena atividade de um
SGBD. Providências como a especificação acertada de tabelas, tipos de dados bem-dimensionados,
criação de índices a partir de um apanhado geral das colunas que participam de junções, consultas
usadas com mais freqüência – tudo isso facilita os ajustes que normalmente devem ser feitos ao
longo do tempo em virtude do uso e dos processos diários. Cabe ao Administrador de Banco de
Dados (DBA, Data Base Administrator), identificar os pontos vulneráveis e causadores de gargalos
em sua base.
Schwartz et al (2009) comenta que com o aumento da utilização de bancos de dados de
código aberto, nas mais diversas áreas e níveis, surge cada vez mais a necessidade do controle e
ajuste de desempenho e a otimização destes bancos de dados. Esta necessidade existe porque as
bases de dados com Sistema Gerenciador de Banco de Dados (SGBD) estão atingindo enormes
quantidades de registros e acessos simultâneos, gerando gargalos provenientes das configurações
nativas do SGBD que ainda não foram refinadas para tal situação. Schwartz et al (2009) completa
que estas configurações são padrões de instalação e, portanto não estão adequadas às necessidades
específicas de cada base de dados. Outra premissa a ser avaliada é a dúvida inerente à enorme
disponibilidade de versões lançadas em períodos cada vez menores, característica forte em SGBD.
Proni (2010) afirma que as empresas aguardam por versões mais estáveis para iniciarem o processo
de atualização de suas bases e do próprio SGBD, e esta expectativa da compatibilidade de versões é
considerada por muitos como um problema não menos importante.
Dentre os SGBDs encontra-se o MySQL. Sua versatilidade e facilidade de uso o tornaram
um dos bancos de dados mais usados com cerca de dez milhões de instalações ao redor do planeta.
Usam o MySQL a NASA; a Friendster; o Bradesco; a Nokia; a HP; a Sony; a Lufthansa e inúmeras
outras entidades das mais diversas origens e pessoas físicas de várias nacionalidades (MYSQL,
2011).
Proni (2010) afirma que, mesmo com as melhorias de escalabilidade apresentadas nos
Benchmarks 1, o MySQL não tem um bom desempenho com a configuração padrão. Além disso, é
um dos Bancos de Dados mais sensíveis a parâmetros do mercado, fazendo com que uma pequena
alteração no arquivo de inicialização traga benefício ou cause desastre na aplicação.
O MySQL, tem como as principais e mais conhecidas ferramentas para administração de
banco de dados, o MySQL Administrator, o qual faz parte do pacote MySQL GUI Tools,
distribuído gratuitamente pala própria MySQL e o PhpMyAdmin. O MySQL Administrator permite
a visualização e alteração das variáveis de configuração do banco de dados entre outras consultas,
como visualização de logs, estatísticas de acesso e uso de memória, variáveis de runtime, entre
outras. Ele é distribuído junto com o MySQL pela Oracle, a qual adquiriu a Sun, que por sua vez,
havia comprado a MySQL AB.
1
benchmark é o ato de executar um programa de computador, um conjunto de programas ou outras operações, a fim de
avaliar o desempenho relativo de um objeto, normalmente executando uma série de testes padrões e ensaios nele.
13
A outra ferramenta, PhpMyAdmin, entra como principal nesta lista, pois sua utilização se
propagou pelos sites de hospedagem onde roda pela web e também permite a visualização das
variáveis de configuração e de runtime, sendo que não há possibilidade de alterá-las de forma
intuitiva. Ambas ferramentas não realizam análise e ajuste de desempenho do banco de forma
automatizada, tendo o administrador que avaliar a atual situação e determinar quais ajustes deverão
ser efetuados para a melhora do desempenho.
Outras ferramentas encontradas no mercado, segundo Proni (2010), também merecem
atenção no quesito avaliação e análise de desempenho do MySQL. Uma delas é a nTop, no qual seu
único foco é o monitoramento do tráfego da rede, sendo um importante ponto de avaliação e não
deve ser negligenciado pelos administradores. E por último, a ferramenta mysqlreport, que
transforma os valores retornados pelo comando SHOW STATUS do MySQL em um relatório,
contendo, por exemplo, a quantidade de queries separadas por tipo (SELECT, INSERT, UPDATE),
uso de cache para as consultas, número de conexões ao servidor, etc.
Dentro deste contexto, este trabalho de conclusão de Curso de Ciência da Computação
propõe uma ferramenta para simular a análise em um banco de dados e obter resultados sobre seu
desempenho com as principais métricas da ferramenta de armazenagem InnoDB e propor e efetuar
ajustes na configuração do MySQL.
O foco da simulação da análise é a monitoração e a configuração do engine InnoDB, pois
mesmo não sendo padrão no MySQL, é o mais utilizado no mercado. Isto porque o engine InnoDB
funciona mais rápido que o MyISAM quando há modificações constantes nos dados, uma vez que
este tipo de armazenagem usa a proteção por registros (row locking) e não a proteção por tabelas
(table locking) como o faz o MyISAM. Contudo, em várias situações InnoDB é mais lento que
MyISAM, devido ao fato, por exemplo, que InnoDB funciona com transações. A armazenagem
padrão do MySQL é o MyISAM. Outro ponto é a restrição de chaves estrangeiras (foreign key
constraints) e as transações. Estes recursos estão disponíveis apenas no InnoDB.
A ferramenta permitirá ao administrador do banco de dados, efetuar simulações em uma
base de dados paralela, a qual será definida de acordo com suas necessidades e com os resultados
obtidos, possa detectar problemas na má configuração das variáveis em sua base real.
14
Com o simulador, o administrador poderá paralelamente analisar sua base de dados criando
outra base com a mesma estrutura, podendo sobrecarregar o funcionamento para ajustes das novas
necessidades, sem correr o risco com a base de produção.
Algumas funções desenvolvidas no projeto. São elas: (i) criar um ambiente para utilização
do simulador, com base de dados, contendo tabelas e registros, executando funções no qual
sobrecarregue o funcionamento do sistema, de acordo com a necessidade e definições do
administrador, (ii) monitorar as variáveis de runtime do engine do InnoDB, realizando análise de
seu funcionamento, sugerindo a nova configuração, contando também com a ajuda de estatísticas
geradas como seu funcionamento e (iii) monitorar processos em execução, no qual se detecta muitas
vezes pontos importantes de gargalos, por exemplo, consultas que levam mais tempo para serem
concluídas.
Este trabalho de TTC tem como foco o emprego de técnicas avançadas em Banco de Dados
no que diz respeito à Análise e Ajuste de Desempenho do MySQL e sua utilização visa prover uma
ferramenta que contemple principalmente a configuração do engine ou storage engine InnoDB, de
acordo com os resultados obtidos na análise.
1.1 PROBLEMATIZAÇÃO
1.1.1
Formulação do Problema
Muitas vezes os DBAs são surpreendidos com uma queda no desempenho em determinada
base de dados. Há diversos níveis a serem avaliados e com isso muito tempo é despendido para tal
função e quase sempre uma equipe é destinada para vasculhar e identificar os gargalos que afetam o
desempenho da base de dados, deixando-a instável e lenta.
Esta prática de identificar os gargalos eleva os custos da administração do banco, pois outras
funções poderiam estar sendo desenvolvidas com a finalidade de melhorar ou ampliar as reais
funcionalidades do banco de dados. A ocorrência do mau funcionamento de um banco de dados
também cria o descontentamento dos usuários finais que utilizam a base para desempenhar seus
trabalhos, podendo tornar negativo os negócios da empresa.
Quando se trata de bancos comerciais, vários aplicativos embutidos no próprio SGBD
(Sistema Gerenciador de Banco de Dados) ou mesmo aqueles desenvolvidos por outras empresas de
cunho comercial, fazem com que todo o ciclo de gerenciamento de um SGBD, incluindo avaliação,
15
análise e o ajuste de desempenho, seja concluído naturalmente e muitas vezes sem a intervenção do
administrador.
Quando se deseja efetuar a análise de um ambiente em funcionamento, os administradores
geralmente executam ferramentas paralelas para a monitoração das principais métricas de detecção
de desempenho. Podemos citar algumas: problemas com a rede, erro na configuração das variáveis
do servidor MySQL, problemas com configuração dos equipamentos, ou seja, na parte física da
estrutura, ou como também com atualizações de versão, entre outras.
Em uma base em produção, quando há necessidade de se efetuar algum ajuste do ambiente
do banco de dados, os DBAs encontram grandes dificuldades de realizar as devidas correções nos
pontos de ajustes detectados. Uma parada em todo o sistema para uma manutenção de ajuste pode
acarretar em perda de dados, tempo e causar grandes transtornos para a empresa. Com a ferramenta
de simulação, o administrador poderá simular antes de iniciar um projeto de banco de dados ou até
mesmo com a base já em produção, porém com tempo programado para paradas e analisar qual a
verdadeira necessidade que seu ambiente terá. Poderá simular, dentro de uma estimativa de usuários
e queries, por exemplo, e configurar o banco de acordo com o resultado obtido.
1.1.2
Solução Proposta
Buscando auxiliar as atividades de avaliação, análise e ajuste de desempenho em banco de
dados MySQL, dentro do contexto apresentado, foi proposto o desenvolvimento uma aplicação que
efetue determinadas ações com o intuito de simular a execução de um ambiente acessando uma base
de dados em MySQL e efetuar de forma automatizada ou sugerir configurações para melhora de seu
funcionamento ou quando inicia-se o desenvolvimento de um novo projeto.
O foco do projeto é tornar a ferramenta capaz de monitorar o estado de um servidor MySQL,
analisando suas variáveis de execução (runtime) e relacionando-as com as variáveis de configuração
do SGBD MySQL, com foco na ferramenta de armazenamento InnoDB, extraindo dados para
formulação de possíveis ajustes. Quanto à automatização deste processo, o administrador poderá
interagir efetuando ou não os ajustes. Como exemplo, a variável de status ou runtime open_table
com uma quantidade maior em seu resultado em relação a variável de configuração, table_cache,
que determina a quantidade máxima de tabelas abertas no momento. Esta relação é uma das
possibilidades de analisar o funcionamento do MySQL.
16
O DBA poderá utilizá-la como apoio em um novo projeto para uma empresa, podendo
executar a ferramenta para simular uma possível carga com parâmetros estimados e avaliar qual a
melhor configuração para cada projeto, e assim, por exemplo, evitar a aquisição de novos
equipamentos, onde a real necessidade da empresa não é o investimento na aquisição de novas
tecnologias.
A ferramenta também auxiliará o DBA na configuração ideal para um novo projeto dentro
das características de acesso de determinada empresa.
1.2 OBJETIVOS
1.2.1
Objetivo Geral
Desenvolver uma ferramenta que simule, em uma base de dados MySQL, seu
funcionamento e apóie a análise para o ajuste de desempenho principalmente na configuração do
engine ou ferramenta de armazenagem, InnoDB.
1.2.2
Objetivos Específicos
•
Pesquisar e documentar conceitos de Análise e Ajuste de Desempenho do MySQL;
•
Realizar um levantamento de quais recursos a ferramenta de armazenagem InnoDB do
MySQL dispõe para efetuar análise e ajuste de desempenho;
•
Definir os requisitos a serem implementados na ferramenta;
•
Modelar a Ferramenta;
•
Implementar a Ferramenta;
•
Testar da Ferramenta; e
•
Documentar o desenvolvimento do trabalho de conclusão de curso.
17
1.3 Metodologia
Para o cumprimento das etapas e objetivos do TTC (Trabalho de Técnico-Científico) estão
descritas a seguir:
•
Redação da Pré-Proposta: documento ao qual foram descritos os principais objetivos e
etapas para conclusão do Curso de Ciência da Computação e posteriormente submetido à
aprovação por uma banca interna, que inclui: introdução, objetivo geral, objetivos
específicos, plano de pesquisa, atividades, recursos necessários, cronograma, orçamento
e referência bibliográfica;
•
Pesquisa Bibliográfica: o projeto (TTCI) iniciou com o levantamento de informações
técnicas com o intuito de formalizar a fundamentação teórica com ajuda de livros,
artigos, internet, programas para compartilhamento de arquivos e periódicos;
•
Revisão Bibliográfica: nesta etapa foi utilizada a pesquisa bibliográfica para construção
da fundamentação teórica. Etapa acompanhada com reuniões semanais com orientador e
entrega de relatórios quinzenais à coordenação do TTC;
•
Análise do Projeto: realizada análise e modelagem do sistema utilizando a UML para
desenvolvimento dos diagramas;
•
Implementação: neste tópico é apresentada toda a forma de desenvolvimento da
ferramenta, bem como as tecnologias empregadas na conclusão do simulador; e
•
Validação: os resultados e demonstração do funcionamento da ferramenta são
apresentados nesta seção, com um exemplo do resultado obtido após alteração da
configuração.
1.4 Estrutura do trabalho
A finalidade principal deste trabalho é levantar as funcionalidades existentes no banco de
dados MySQL para ajuste de desempenho, quanto a sua configuração, tendo como foco o engine ou
ferramenta de armazenamento InnoDB. Para tanto, foi desenvolvida uma ferramenta para simulação
em um ambiente especificamente para este fim.
Para início do desenvolvimento do trabalho, foi realizado um levantamento bibliográfico dos
principais assuntos que circundam a real função do projeto: levantamento de informações sobre o
18
MySQL e suas funcionalidades para ajuste de desempenho, estudo de ferramentas para
administração avaliando sua capacidade de efetuar análise e ajuste de desempenho. Esta revisão é
apresentada no Capítulo 2 – Fundamentação Teórica.
Seguindo com o levantamento dos requisitos funcionais e não-funcionais, diagramas UML
que compõe a etapa de projeto do sistema proposto.
Na seqüência é descrito no item Desenvolvimento, com os subitens Projeto, Implementação
Apresentação e Validação da ferramenta, todas as etapas para a conclusão do projeto.
19
2 FUNDAMENTAÇÃO TEÓRICA
Como pontos da fundamentação teórica desse trabalho técnico científico, são descritos 05
(cinco) tópicos: Conceitos de Avaliação e Análise de Desempenho, Banco de Dados MySQL,
Análise e Ajuste de Desempenho no MySQL, Ferramentas existentes para Análise e Ajuste de
Desempenho e Ferramenta de Armazenamento InnoDB.
2.1 AVALIAÇÃO E ANÁLISE DE DESEMPENHO
Em algum momento o administrador de banco de dados se vê obrigado a requerer mais
desempenho do banco de dados. Mais o que fazer para tentar melhorar? Uma consulta particular? O
Esquema ou hardware? A única maneira de saber é medir o que o sistema está fazendo e testar o
desempenho sob várias condições.
De acordo com Schwartz et al (2009), Avaliação e Análise de desempenho são duas práticas
essenciais para encontrar gargalos em bases de dados. Elas são relacionadas, mas não são as
mesmas. A avaliação mede o desempenho de um sistema e isso pode ajudar a determinar a
capacidade, mostra quais mudanças são importantes e quais não são, ou mostra como a aplicação
executa com dados diferentes.
Schwartz et al (2009) ainda comenta que, em contraste, a análise de desempenho ajuda a
encontrar onde a aplicação gasta mais tempo ou consome mais recursos. Em outras palavras,
avaliação de desempenho responde a pergunta “Quão bem isso executa?” e análise de desempenho
responde a pergunta “Por que isso executa desta maneira?”.
Para a realização de ajustes em um sistema de banco de dados, é necessário medir alguns
fatores, os quais são avaliados em conjunto ou individualmente. Estes fatores dividem-se em níveis
e seus componentes do banco de dados e, dependendo de seu estado atual, podem determinar a
situação de desempenho do sistema. O ajuste quando necessário pode ser efetuado separadamente
ou em conjunto com os níveis do banco de dados.
Os níveis e os componentes existentes de ajuste dividem-se em (SYBASE, 2004):
•
Ambiente de Hardware e Sistema Operacional:
o Rede: configuração, interfaces de rede, entre outros;
20
o Sistema Operacional: memória virtual, disco de swap, entre outros; e
o Hardware: controladoras de disco, barramentos, entre outros.
•
Ajuste do Servidor:
o Configurações de memória e cache;
o Métodos de acesso paralelo;
o Esquema de nível de bloqueio do servidor; e
o Espaço temporário do banco de dados, entre outros.
•
Ajuste de Aplicações:
o Normalização e Desnormalização de tabelas;
o Criação do Banco de Dados;
o Ajuste de Queries (SQL);
o Esquema de Lock (Bloqueio);
o Transações; e
o Cursores.
Schwartz etal (2009) completa que há duas estratégias primárias de avaliação de
desempenho: pode-se avaliar o desempenho da aplicação por inteiro ou apenas isolar algumas
partes. Essas duas estratégias são conhecidas como avaliação de desempenho full-stack (pilha
completa) e single-component (componente único), respectivamente. Há diversas razões para medir
a aplicação por inteira ou apenas o banco de dados:
•
Testar a aplicação inteira, incluindo o servidor web, o código da aplicação e o banco
de dados. Isso é útil porque não se deve importar com o desempenho do banco de
dados em particular e sim se importar com toda a aplicação;
•
O banco de dados nem sempre é o gargalo da aplicação, e uma avaliação de
desempenho full-stack pode revelar isso;
21
•
Somente testando a aplicação completa você pode ver como o cache de cada parte se
comporta; e
•
Avaliações de desempenho são boas somente à medida que refletem o
comportamento da aplicação atual, o que é difícil de fazer se o administrador estiver
testando somente parte dela.
Porém, nem sempre é necessário avaliar toda a aplicação, segundo Schwartz et al (2009).
Pode-se precisar somente de uma avaliação de desempenho do MySQL, pelo menos inicialmente.
Tal avaliação é útil para:
•
Comparar diferentes esquemas ou consultas;
•
Avaliar o desempenho de um problema específico que você vê na aplicação; e
•
Evitar uma longa avaliação em favor de uma mais curta que dê um “tempo de ciclo”
mais rápido para fazer e medir alterações.
Por este projeto focar nas configurações do MySQL, não se pode negar que a análise na
configuração das variáveis em um banco de dados é, na forma inicial ou mesmo na produção de um
projeto, de grande importância, pois nesta etapa tem-se a capacidade de reduzir ou eliminar os
problemas futuros dos demais pontos de gargalo.
2.2 BANCO DE DADOS MYSQL
Silberschatz e Korth (2006) definem um SGBD (Sistema Gerenciador de Banco de Dados)
como uma coleção de dados inter-relacionados e também de programas utilitários que são utilizados
para acesso e manipulação a estes dados. A principal função do SGBD é proporcionar um ambiente
conveniente e eficiente para recuperação e armazenamento das informações.
O SGBD MySQL é a ferramenta foco deste projeto, e para a qual será estudada o projeto da
análise e ajuste de desempenho. Um dos fatores motivadores desta escolha é sua forma de licença e
distribuição, pois MySQL é um SGBD livre e de código aberto, distribuído pela empresa Oracle, é
apoiado por uma comunidade grande e ativa de desenvolvedores (MYSQL, 2011).
22
O MySQL e demais produtos licenciados de acordo com o GNU (General Public), foi um
projeto que teve início em 1984, cujo principal objetivo era de garantir aos seus usuários, a
liberdade de compartilhar e alterar seus aplicativos, e assim tornando-os livres (LIMA, 2003).
A filosofia do software livre e/ou código aberto (Open Source) tem sido amplamente aderida
por pessoas físicas e empresas nos mais diversos segmentos, pelo simples fato de que, para sua
utilização não há necessidade de efetuar gastos com o pagamento de licenças de uso. Outras
características que tornam um software livre são as possibilidades de efetuar cópias, sua distribuição
e alteração.
Outros benefícios do software livre e/ou de código aberto é fazer com que haja a
possibilidade de pesquisar, estudar, mudar e aperfeiçoar os programas a fim de que eles sejam
adaptados à realidade de cada usuário (SOFTWARE LIVRE, 2011).
Outra vantagem no uso do software de código aberto é que as melhorias realizadas são
amplamente testadas e corrigidas pela comunidade que contribui com o seu desenvolvimento. Com
isso o usuário final tem a garantia de utilizar um software testado por diferentes pessoas em
máquinas nas mais diversas configurações, tendo assim uma garantia a mais da qualidade de suas
funcionalidades (SOFTWARE LIVRE, 2011).
Algumas vantagens também são citadas por Lima (2003) quanto à utilização de ferramentas
de código aberto:
•
Redução dos custos de utilização da ferramenta (geralmente custos baixos ou até mesmo
nenhum), na aquisição, na implantação e manutenção. Além disso, tem-se a liberdade ao
escolher o provedor de suporte;
•
Não há necessidade de administração das licenças;
•
O usuário final tem a liberdade de modificar, atualizar e corrigir o software, contratando
ou não um desenvolvedor para esse trabalho; e
•
Obtenção de uma vasta documentação de apoio na Internet, além de ter ao seu dispor
fóruns de discussão e a comunidade criada especialmente para manter o
desenvolvimento do software, com pacotes de correções, dicas, entre outros.
Em face a essas características, optou-se por realizar o projeto focando num SGBD de código
aberto por haver certa facilidade na obtenção das informações sobre como se atingir resultados
23
positivos no ajuste de desempenho, pela grande quantidade de contribuições da comunidade que
utiliza-o.
2.2.1
Arquitetura do MySQL
O MySQL é um servidor multi-threaded, que atende a vários usuários ao mesmo tempo,
para isso são criados múltiplos processos de execução em um único processo. Suas tarefas são
executadas em back-end, isto é, não são controladas pelo usuário.
Quanto a sua distribuição, o MySQL reúne diversos programas e bibliotecas de cliente
(client), ferramentas administrativas e API’S e muitos outros programas desenvolvidos e
disponibilizados por colaboradores e parceiros (LIMA, 2003).
Para um melhor entendimentos de como o MySQL provê suas funcionalidades, inteface e
gerenciamento é necessário primeiro conhecer sua estrutura de componentes e como é a sua ligação.
O MySQL é um gerenciador construído em múltiplas camadas, como visto na Figura 1, que
podem ser classificadas basicamente em (LIMA, 2003):
•
Camada de Aplicação;
•
Camada Lógica; e
•
Camada Física.
Camada de Aplicação
Camada Lógica
Camada Física
24
Figura 1. Arquitetura conceitual do MySQL: Camadas Básicas
Fonte: Adaptado de Lima (2003)
Na camada de aplicação é representada a interface de usuário, que é a forma com que o
servidor MySQL interage com seus usuários. Esta camada pode ser dividida conceitualmente em 03
(três) componentes:
•
Interface de Consulta: são as instruções DML (Data Manipulation Language) que é um
subconjunto da SQL (Structured Query Language) usada para selecionar e manipular
dados;
•
Cliente: pessoas ou programas que utilizam a interface do servidor MySQL; e
•
Interface de Administrador: representa os utilitários utilizados para administração do
servidor MySQL.
Na camada lógica têm-se as funcionalidades que são desenvolvidas pela Oracle, e por outras
empresas que colaboram com novas funcionalidades e/ou novos padrões, na qual subdivide-se em:
•
Processador de Consultas;
•
Gerenciamento de Transações; e
•
Gerenciamento de Recuperação.
E por último, a terceira camada que corresponde a forma como o MySQL mantém o
armazenamento físico dos dados em arquivos. Além dos dados, dicionários, índices, históricos
(logs), estatísticas e todo o controle dos recursos de memória são controlados pela camada física
(LIMA, 2003). Ela á composta por:
•
Gerenciador de Recursos;
•
Gerenciador de Buffers; e
•
Gerenciador de Armazenamento.
25
A arquitetura do MySQL é pouco diferente da dos outros servidores de banco de dados e é
útil para uma grande variedade de objetivos. MySQL é flexível para trabalhar bem em ambientes
muito exigentes, como aplicações web. Ao mesmo tempo, MySQL pode potencializar aplicações
embutidas, depósitos de dados, indexação de conteúdo e software de distribuições, sistemas
redundantes altamente disponíveis, processamento de transação on-line e muito mais (SCHWARTZ
et al, 2009).
2.2.2
Tipo de Tabelas ou Ferramentas de Armazenagem
Um BD (Banco de Dados) é composto de vários elementos onde cada um tem seu papel
fundamental em toda sua estrutura. Mas a tabela ou ferramenta de armazenagem é considerada de
maior importância neste contexto, pois sua função (guardar os dados) é o ponto chave da existência
de um BD. As tabelas são objetos bidimensionais que representam uma classe de objetos. Sua
estrutura é formada de linhas que são os registros, os quais se referem às ocorrências desses objetos
no mundo real, e as colunas ou campos, que são os seus atributos (MYSQL, 2011).
O MySQL suporta dois tipos diferentes de conjunto de tabelas: Tabelas Seguras com
Transação (TST) e Tabelas Não Seguras com Transação (TNST). Os tipos de tabelas são (MySQL,
2011):
Algumas tabelas do tipo TNST:
•
MyISAM;
•
MERGE;
•
ISAM; e
•
HEAP.
Algumas tabelas do tipo TST:
•
InnoDB; e
•
BDB ou BerkeleyDB.
Neste momento é importante descrever sobre os tipos de tabelas do MySQL, devido a
relação existente com os parâmetros de configuração e variáveis runtime. No item 2.3 do trabalho
esta relação é mostrada com mais detalhamento.
26
2.2.2.1 Tabelas MyISAM
A tabela padrão do MySQL é a MyISAM e seu desenvolvimento foi baseado no código das
tabelas ISAM. Fisicamente dividem-se em dois (02) arquivos com extensões .MYI (MYIndex) e
.MYD (MYData). O arquivo de extensão .MYI é utilizado para armazenamento dos índices e o
arquivo de extensão .MYD armazena os dados.
Na Tabela 1 são apresentadas algumas variáveis de configuração de ambiente que o MySQL
reserva para utilização da tabela MyISAM.
Tabela 1. Variáveis de Ambiente Tabela MyISAM
Variável
myisam_sort_buffer_size
Descrição
O buffer que é alocado ao ordenar o índice quando estiver
fazendo um REPAIR ou estiver criando índices com CREATE
INDEX ou ALTER TABLE
myisam_max_extra_sort_file_size É usado principalmente para forçar que longas chaves de
caracteres em tabelas grandes usem o método de cache de
chaves mais lenta para criar o índice.
myisam_repair_threads
Se este valor é maior que um, durante o processo reparo por
ordenação os índices de tabelas MyISAM serão criados em
paralelo - cada índice em sua própria thread.
myisam_max_sort_file_size
O tamanho máximo do arquivo temporário que é permitido ao
MySQL usar enquanto recria os índices (durante REPAIR,
ALTER TABLE ou LOAD DATA INFILE). Se o tamanho do
arquivo for maior que isto, o índice será criado através do
cache de chaves (que é mais lento).
Fonte: MySQL (2011)
2.2.2.2 Tabelas MERGE
Uma tabela do tipo MERGE é composta de outras tabelas do tipo MyISAM com a mesma
estrutura e que podem ser usadas como uma só. Isso quer dizer que, quando se criam tabelas do tipo
MERGE toda a sua coleção de tabelas deverá ser criada com informações de colunas e índices
idênticos. Este tipo não permite fundir tabelas que tenham sua estrutura diferente com as outras. Um
exemplo de sua utilização é quando há necessidade de inserir dados com meses diferentes em
arquivos separados (MySQL, 2011).
Com a estratégia de utilização deste tipo de tabela, algumas vantagens se tornam de grande
importância para o desempenho do Banco de Dados (MySQL, 2011):
27
•
Facilidade de gerenciamento de uma enorme quantidade de tabelas;
•
Maior velocidade de acesso, pois o seu conjunto de tabelas poderá estar alocado em
vários discos;
•
Tornar as pesquisas mais eficientes, pois permite que de acordo com uma consulta
desejada, se execute em apenas um dos pedaços da tabela;
•
As reparações tornam-se mais eficientes; e
•
Permite a compactação de pedaços da tabela, evitando assim desperdício de espaço,
entre outras.
Sua estrutura física é dividida em arquivos com extensão .FRM (contém a estrutura da
tabela) e do arquivo com extensão .MRG (contém a lista das tabelas MyISAM) (MySQL, 2011).
2.2.2.3 Tabelas ISAM
As tabelas do tipo ISAM tornaram-se obsoletas e tendem a desaparecer a partir da versão 5.0
do MySQL. A tabela MyISAM tornou-se o tipo que substituiu a ISAM e seus dados deverão ser
migrados antes que sua distribuição seja realmente cancelada. Os pontos chaves que levaram a esta
substituição é que as tabelas ISAM não são portáveis entre plataformas, não podem lidar com
tabelas maiores de 4 (quatro) GB (Gigabyte), suportam apenas compactação de prefixo em strings,
seu limite de chaves é menor, e outros (MySQL, 2011).
2.2.2.4 Tabelas HEAP
As tabelas HEAP utilizam índices hash e são armazenadas diretamente na memória. Isto as
torna muito mais rápidas, mas por outro lado menos confiáveis, pois se alguma falha ocorrer no
MySQL, os dados serão perdidos. Hash são tipos de tabelas onde sua estrutura é formada por array
e o acesso aos objetos é efetuado diretamente pelo índice calculado pela função hash que é o
retorno do índice informado pela chave. Por isso sua utilização será mais útil quando for aplicada
em tabelas temporárias. Outro cuidado que deve ser avaliado, quando for utilizar tabelas do tipo
HEAP, é que em uma instrução CREATE a variável MAX_ROWS deverá ser especificada,
evitando assim a utilização completa da memória acidentalmente (MySQL, 2011).
2.2.2.5 Tabelas BDB ou BerkeleyDB
28
As tabelas BDB ou BerkeleyDB contêm mecanismos de armazenamento transacional
podendo ter mais chance de sobrevivência a falhas e também são capazes de realizar operações
commit e rollback (MySQL, 2011).
2.2.2.6 Tabelas InnoDB
Segundo MySQL (2011), InnoDB é o tipo de tabela que provê um mecanismo de
armazenamento seguro de transações com commit (comando SQL onde confirma determinada
transação), rollback (comando SQL que desfaz toda a execução de uma transação) e recuperação
em caso de falhas. Este tipo de tabela faz bloqueio em nível de registro e também fornece leituras
sem bloqueios. Estes recursos, fazem com que haja um aumento do desempenho e a concorrência
de multiusuários. InnoDB foi desenvolvido para obter o máximo de desempenho ao processar um
grande volume de dados. Há relatos de sites que utilizam InnoDB em base com mais de 1
TeraBytes de dados, processando uma carga média de 800 inserções/atualizações por segundo
(MYSQL, 2011).
Na Tabela 2 são apresentadas algumas variáveis de configuração de ambiente que o MySQL
reserva para utilização da tabela InnoDB.
As principais características da InnoDB são: permite chaves estrangeiras, bloqueios a nível
de linha, versionamento múltiplo, agrupamento pela chave primária, todos os índices contém as
colunas
da
chave
primária,
cache
otimizado,
índices
descompactados
e
bloqueio
AUTO_INCREMENT.
É considerado um tipo de tabela lenta, pois seus dados são armazenados diretamente no
disco, não deixando em cache de escrita da RAM. Lento, porém proporcionalmente seguro (VTNC,
2011).
A tabela ou ferramenta de armazenagem InnoDB é considerada a tabela mais segura e
suporta transações e quatro níveis de isolamento de transação (SCHWARTZ et al, 2009). Com isso
considera-se, que, por ser mais utilizada, sofre mais oscilações com relação a desempenho, sendo
então escolhida como foco de estudo deste projeto.
29
Tabela 2. Variáveis de Ambiente Tabela InnoDB
Variável
innodb_file_per_table
Descrição
Esta opção faz com que o InnoDB armazene cada tabela
criada em seu próprio arquivo .ibd.
innodb_data_home_dir
É o caminho do diretório para todos os arquivos de dados
InnoDB.
innodb_data_file_path
Caminho para os arquivos de dados individuais e os seus
tamanhos.
innodb_mirrored_log_groups
Número de cópias idênticas de grupos de log mantidos para o
banco de dados.
innodb_log_group_home_dir
Caminho do diretório de arquivos de log do InnoDB.
innodb_log_files_in_group
Número de arquivos de log no grupo de log.
innodb_log_file_size
Tamanho de cada arquivo de log em um grupo de logs em
megabytes.
innodb_log_buffer_size
O tamanho do buffer que o InnoDB utiliza para escrever o
log em arquivos no disco.
innodb_flush_log_at_trx_commit
Normalmente é atribuído 1, significando que em um commit
de uma transação o log é descarregado para o disco e as
modificações feitas pela transação se tornam permanentes,
sobrevivendo a uma falha no banco de dados.
innodb_log_arch_dir
O diretório onde arquivos de log totalmente escritos seriam
escritos se usarmos arquivamento de log.
innodb_log_archive
Atualmente este valor deve ser definido com 0. Como a
recuperação ai partir de um backup deve ser feito pelo
MySQL usando os seus próprios arquivos de log, não há
nenhuma necessidade de se arquivos os arquivos de log do
InnoDB.
innodb_buffer_pool_size
O tamanho do buffer de memória que o InnoDB usa para
armazenar dados e índices de suas tabelas. Quanto maior for
este valor, menor será a necessidade de E/S (Entrada/Saída)
de disco para acessar dados na tabela.
innodb_buffer_pool_awe_mem_mb Tamanho da área de buffer em Mb (Megabyte), se estiver
localizado na memória AWE (Address Windowing
Extension) do Windows.
innodb_additional_mem_pool_size Tamanho do pool da memória que o InnoDB utiliza para
armazenar informações de dicionário de dados e outras
estruturas de dados internas
innodb_file_io_threads
Número de threads de E/S de arquivos no InnoDB.
innodb_lock_wait_timeout
Tempo limite em segundos que uma transação InnoDB pode
esperar por uma trava antes de fazer um rollback
innodb_force_recovery
Realiza dump de tabelas em um banco de dados corrompido.
Fonte: MySQL, 2011
30
2.3 ANÁLISE E AJUSTE DE DESEMPENHO DO MYSQL
Como foi visto na Seção 2.1, para se obter um bom resultado no ajuste de um SGBD deve-se
primeiramente realizar uma boa avaliação e análise, detectando os gargalos e definir estratégias,
para efetuar os ajustes quando necessário.
Em um ambiente de banco de dados, tem-se 03 (três) níveis que devem ser analisados de
forma independente ou em conjunto, tornando o ajuste no banco de dados mais refinado. Este
projeto visa desenvolver a ferramenta de simulação para análise e orientação no ajuste de
desempenho focado no segundo nível, que envolve o ajuste dos parâmetros de configuração, sendo
neste caso, da ferramenta de armazenagem InnoDB, distribuída com o MySQL. Completando este
nível de ajuste, temos também o ajuste de ambiente de hardware e sistema operacional e o ajuste na
aplicação.
2.3.1
Configuração de Parâmetros
Inicialmente, deve-se conhecer a forma como a configuração do MySQL Server é iniciada
na sua carga. No diretório raiz da instalação existe o arquivo my.cnf que é utilizado para incluir ou
alterar as configurações utilizadas na carga do sistema. Este arquivo contém variáveis de ambiente
com valores de inicialização, que podem ser alterados conforme dimensionamento do ambiente em
que o MySQL Server se encontra instalado.
O MySQL fornece no mesmo diretório, 05 (cinco) arquivos modelo de configuração, que
podem ser renomeados para my.cnf, conforme a disponibilidade de memória da máquina. São eles
(LIMA, 2003):
•
My-innodb-heavy-4G.cnf: para uso com tabelas InnoDB em sistemas com 4 GB de
memória ou mais;
•
My-huge.cnf: para sistemas com 1GB de memória ou mais;
•
My-large.cnf: para sistemas na faixa de 512 MB de memória;
•
My-medium.cnf: para sistemas entre 64 e 128 MB de memória; e
•
My-small.cnf: para sistemas com até 64 MB de memória.
31
Estes arquivos com configurações já pré-definidas foram projetados para serem distribuídos
na instalação do SGBD, tornando o trabalho de configuração o mais simples possível, mesmo que
não haja maiores dificuldades para isso, é somente um facilitador.
Na Figura 2 é mostrado um exemplo do arquivo de configuração do MySQL.
Figura 2. my.cnf: arquivo de configuração do MySQL
2.3.2
Instruções SQL
Algumas instruções SQL no MySQL Server servem para extrair informações de
configuração e estado de sua execução.
2.3.2.1 Instrução SHOW STATUS
A instrução SHOW STATUS fornece informações de status do servidor MySQL. Pode ser
executada em um aplicativo para administração do banco e que permita execuções de comandos
SQL, como por exemplo, o MySQL Query ou simplesmente com a interface de modo texto do
aplicativo mysql.exe, localizado no diretório \mysql\bin, utilizado para interação com o servidor
MySQL (MYSQL, 2011).
32
Na Tabela 5 dos anexos existe a listagem completa das variáveis de status e uma breve
descrição de seu significado. Algumas variáveis permitem análises de seus valores, confrontando-as
com as variáveis de configuração do servidor MySQL, e portando, novos ajustes poderão ser
efetuados pelo administrador do banco de dados.
2.3.2.2 Instrução SHOW VARIABLES
A instrução SHOW VARIABLES extrai informações das variáveis de configuração do MySQL
Server. Estas variáveis estão, de alguma forma, relacionadas com as de status, pois dependendo de
seus valores, será necessário alguma alteração na configuração do MySQL.
Segue alguns exemplos de variáveis de sistema (MySQL, 2011) com algumas sugestões de
ajustes:
•
Tmp_table_size: se uma tabela temporária em memória exceder este tamanho, o MySQL
irá convertê-la automaticamente para uma tabela MyISAM. Sugere-se aumentar o valor
de tmp_table_size caso seja realizada várias consultas GROUP BY avançadas e tiver
muita memória;
•
Thread_cache_size: quantas threads devem ser mantidas em cache para reutilização.
Quando um cliente desconecta, as threads dos clientes são colocadas na cache se não
existir mais de thread_cache_size threads que antes. Todas novas threads serão obtidas
primeiramente do cache, e só quando o cache estiver vazio uma nova thread é criada.
Esta variável pode ser aumentada para melhorar o desempenho se você tiver várias
conexões novas;
•
Sort_buffer: cada thread que precisar fazer uma ordenação aloca um buffer deste
tamanho. Sugere-se aumentar este valor para operações ORDER BY ou GROUP BY
tornando mais rápidas;
•
Slow_launch_time: se a criação de threads demorar mais que este valor (em segundos),
o contador Slow_launch_threads será incrementado;
•
Query_alloc_block_size: tamanho dos blocos de alocação de memória que são alocados
para objetos criados durante a análise e execução da consulta. Se houver problemas com
fragmentação de memória pode ajudar o incremento desta configuração;
33
•
Read_rnd_buffer_ae: ao ler registros na ordem depois de uma ordenação, os registros
são lidos através deste buffer para evitar pesquisas em disco. Pode melhorar bastante o
ORDER BY se configurado com um valor alto. Como esta é uma variável específica da
thread, não se pode defini-la globalmente, mas apenas alterá-la ao executar alguma
consulta específica grande; e
•
Read_buffer_size: cada thread que faz uma leitura seqüencial aloca um buffer deste
tamanho para cada tabela lida. Se houver várias leituras seqüenciais, este valor pode ser
aumentado.
Independente do tamanho de memória dimensionada para execução em um ambiente, o
MySQL “não sabe” quanto o computador possui. A configuração que o MySQL deve usar de
memória faz parte dos procedimentos de ajuste de desempenho (LIMA, 2003).
Na Seção 2.3.1 deste trabalho foi visto a forma como o MySQL configura os parâmetros de
carga e os arquivos de configuração pré-definidos dependendo da memória dimensionada no
servidor. Independente do arquivo modelo utilizado, será necessário adaptá-lo às particularidades de
cada computador, além de disco e memória, também a quantidade de clientes que podem acessá-lo.
O MySQL utiliza buffers e caches para acesso à arquivos em disco e que podem ser
compartilhados por outros processos (processos globais), ou também alocado para um processo
específico e fechado logo após sua conclusão. Pode-se definir cache como um local utilizado para
armazenagem de dados num curto espaço de tempo e buffer como uma área temporária para
armazenamento de dados em memória, aumentando a velocidade de operações de entrada e/ou
saída, reduzindo acesso a disco (LIMA 2003).
2.4 FERRAMENTAS PARA ANÁLISE DE DESEMPENHO
O MySQL dispõe de inúmeras ferramentas para apoio aos administradores de banco de
dados para obter um melhor desempenho de seu sistema e identificar possíveis problemas.
Nesta Seção são apresentadas algumas ferramentas para administração do MySQL com o
intuito de avaliar, além das funcionalidades básicas, também a existência de algum método de
análise e/ou ajuste de desempenho. São elas: Mysqlslap, Mysqladmin, phpMyAdmin, Innotop e
Tuning Primer.
34
Este estágio do projeto pretende identificar e estudar a execução de diversas ferramentas, na
intenção de obter como é realizado o desempenho para banco de dados, em que nível é atuado e
extrair idéias para o desenvolvimento do projeto final.
2.4.1 Mysqlslap – Cliente de Emulação de Carga
A ferramenta Mysqlslap é definida como um Cliente de Emulação de Carga e foi projetada
para emular em um servidor MySQL e informar o tempo de cada etapa. A ferramenta, que é
distribuída junto a instalação do MySQL, funciona como se vários clientes acessassem o servidor,
executando tarefas pré-determinadas (MYSQL, 2011).
Um exemplo pode ser visto na Figura 3, para execução da ferramenta via terminal. Nesta
execução, além dos outros parâmetros padrões, pode-se citar como mais importante (MySQL,
2011):
•
--auto-generate-sql: gera instruções SQL automaticamente quando não são
fornecidos em arquivos;
•
--concurrency=XXXX: o número de clientes para simular quando da emissão da
instrução SELECT;
•
--number-of-queries=XXXX: limite de cada cliente para sobrecarga em número de
consultas;
•
--number-char-cols=XXXX: o número de colunas VARCHAR para usar se - autogenerate-sql for especificado; e
•
--number-int-cols=XXXX: o número de colunas INT para usar se - auto-generate-sql
for especificado.
35
Figura 3. mysqlslap: terminal com o comando de execução da ferramenta
Na execução da ferramenta, com os parâmetros padrões mencionados, pode-se obter
(mostrado na Figura 4) o resultado final:
Figura 4. mysqlslap: resultado obtido do comando referente à Figura 3
Todas as consultas foram executadas e obteve-se um total de 13.658 segundos, onde 100
clientes concorreram na execução, numa média de 10 consultas por cliente.
Desta forma, a ferramenta mysqlslap permite e auxilia o administrador, em conjunto de
alguma ferramenta destinada a análise de desempenho, a obter o provável local onde deve atacar
para solucionar o problema causador da lentidão de um sistema, por exemplo.
36
2.4.2 Mysqladmin
A ferramenta ou cliente mysqladmin, é distribuída junto a instalação do MySQL, e sua
função é realizar operações administrativas via comandos no terminal. Algumas de suas funções
permitem verificar a configuração do servidor e do status atual, criar e apagar bases de dados e
outras (MYSQL, 2011).
Também é uma ferramenta aliada do administrador quando há necessidade de monitorar
algumas variáveis de configuração e execução de um servidor. No exemplo da Figura 5, pode-se
notar a execução de um comando acessando o MySQL, e a cada 5 segundos (-i5), monitorar todas
as variáveis de status do InnoDB.
Quando se utiliza em conjunto as ferramentas mysqlslap e mysqladmin, ou seja, em dois
terminais, há condição de efetuar uma carga desejada ao banco de dados e em outra tela de terminal,
monitorar as variáveis que se deseja.
Figura 5. mysqladmin: ferramenta de administração do MySQL
37
Somente o uso destas duas ferramentas, não garante ao administrador uma exatidão na
obtenção dos resultados desejados, devido à limitação e a inexistência de automação das tarefas
para ajuste. Talvez isso leve um tempo muito elevado para identificar e obter alguma anomalia na
configuração e execução do MySQL.
O trabalho proposto visa identificar e desenvolver a união das principais funcionalidades
encontradas nestas ferramentas e servirá de ajuda para o desenvolvimento prático.
2.4.3 phpMyAdmin
O phpMyAdmin é uma ferramenta livre e de código aberto desenvolvida com a linguagem
PHP e sua principal função é administrar o banco de dados MySQL. Seu desenvolvimento iniciouse em 1998 por Tobias Ratschiller, onde denominou de: “The phpMyAdmin Project”
(PHPMYADMIN, 2011).
Com esta ferramenta o usuário tem condição de criar e excluir banco de dados, tabelas,
definição de índices, chaves primárias e estrangeiras, executar comandos SQL, inserir e excluir
registros, e outras funcionalidades. Por se tratar de uma ferramenta desenvolvida em PHP (que é
uma linguagem livre), ela também se torna livre permitindo ao usuário final alteração e com isso
ampliar suas melhorias de acordo com suas necessidades (PHPMYADMIN, 2011).
Além das funcionalidades básicas para administração de banco de dados, o phpMyAdmin
permite a visualização das variáveis de runtime do MySQL. Estas informações são mostradas de
forma estatística, como mostra a Figura 6, onde o usuário poderá ver a quantidade e percentual em
que os comandos do MySQL foram executados, tráfego na rede do servidor MySQL em quantidade
de bytes do total recebido e enviado e a média por hora, as conexões abortadas e que tiveram falhas,
entre outras informações (PHPMYADMIN, 2011).
38
Figura 6. phpMyAdmin: tela com as Variáveis de Runtime do MySQL.
As variáveis de configuração do servidor MySQL podem ser visualizadas como mostra a
Figura 7. O phpMyAdmin não permite a alteração destas variáveis em tempo de execução
(PHPMYADMIN, 2011).
39
Figura 7. phpMyAdmin: tela com as Variáveis de Configuração do MySQL.
Além destas funcionalidades, o administrador tem condição de visualizar se há algum
usuário executando comandos indesejados ou alguma rotina que esteja em execução por um tempo
maior ao permitido, e com isso matar o processo degradante (PHPMYADMIN, 2011).
2.4.4 Innotop – Monitor em tempo real das conexões
Innotop é uma ferramenta para o MySQL InnoDB desenvolvida para monitoração de
transações / status do servidor. Cada um de seus modos mostra um aspecto diferente do que está
acontecendo no servidor. Por exemplo, há um modo para monitorar a replicação, um para consultas
e outro para transações. Innotop tem muitos recursos para usuários avançados, mas se pode iniciar e
executá-lo com nenhuma configuração.
Na Figura 8 foi obtido o resultado básico de uma monitoração do servidor MySQL com 100
usuários concorrentes.
40
Figura 8. Innotop: monitor de transações e status do servidor MySQL
É uma ferramenta simples, porém muito interessante onde o administrador pode utilizar
quando há necessidade de monitorar, com tempo programado, o que está sendo executado no
servidor MySQL.
2.4.5 Tuning Primer
O Tuning Primer é um script para Linux que avalia o status do servidor MySQL e sugere
mudanças na configuração. A execução do Tuning Primer é simples e de fácil entendimento como
pode ser visto na Figura 9 (PRIMER, 2011).
Figura 9. Tuning Primer: script para monitoração das variéveis de execução do servidor MySQL.
41
Na execução mostrada na Figura 10 pode-se analisar o módulo MAX_CONNECTIONS,
onde são apresentadas quatro variáveis para análise. Neste caso o servidor está ajustado para no
máximo 151 conexões ativas e no momento só existe uma ativa.
O script calcula, na quarta variável, o quanto acima ou abaixo está o percentual da
quantidade de conexões ativas no momento da execução e apresenta um aviso de que pode ser
ajustado o max_connection e ainda indica quais as conseqüências e possíveis melhorias deste ajuste,
como segue: “poderia ajudar a evitar uma alocação excessiva de memória”.
Figura 10. Tuning Primer: resultado do módulo MAX_CONNECTIONS
Como exemplo, outra análise pode ser feita no módulo InnoDB Status. A execução
apresenta a sugestão: “Dependendo de quanto espaço nos índices innodb, pode ser seguro aumentar
este valor para até 2 / 3 da memória total do sistema”.
•
INNODB STATUS
a. Current InnoDB index space = 0 bytes
b. Current InnoDB data space = 0 bytes
c. Current InnoDB buffer pool free = 96 %
d. Current innodb_buffer_pool_size = 8 M
e. Depending on how much space your innodb indexes take up it may be safe
f. to increase this value to up to 2 / 3 of total system memory
42
A ferramenta é um complemento, bem como as outras já apresentadas, para auxílio aos
administradores na localização e ajuste das configurações do MySQL. A ferramenta é um script,
que permite ao usuário final, alterar o modo de execução conforme as necessidades.
2.4.6 Resultado das Ferramentas Avaliadas
O objetivo deste trabalho foi de desenvolver uma ferramenta para simulação com
funcionalidades para ajuste de desempenho do MySQL. Desta forma, foi realizada uma análise com
as ferramentas pesquisadas e alguns testes, permitindo comparar entre as mesmas com vistas a
verificar qual é a ferramenta para apoio ao desenvolvimento do trabalho. A Tabela 3 mostra os
resultados alcançados.
Tabela 3. Comparativo das ferramentas para análise de desempenho do MySQL
Características
Ferramenta livre e/ou
código aberto
Multi-Plataforma
Permite ajuste de
parâmetros para
melhora no
desempenho
Depende de
ferramentas
comerciais para
alteração/compilação
Informa a necessidade
de ajuste do esquema
de banco de dados
Informa a necessidade
de ajuste nos
parâmetros de
configuração do banco
de dados
Informa a necessidade
de ajuste de hardware
Código bem
comentado e de fácil
compreensão
Ferramentas Avaliadas
Mysqlslap phpMyAdmin MyMonitor Innotop
Tuning Primer
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Sim
Não
Não
Não
Não
Sim
Não
Não
Não
Não
Não
Não
Não
Não
Não
Não
Não
Não
Não
Não
Não
Sim
Sim
Não
Não
Não
Não
Não
Sim
Sim
Sim
Sim
Sim
43
3 DESENVOLVIMENTO
Neste capítulo é demonstrado de forma geral a implementação da ferramenta. O projeto
encontra-se no Apêndice A.
3.1 IMPLEMENTAÇÃO
O ambiente para o simulador proposto foi escolhido e projetado para rodar com tecnologias
voltadas para web, facilitando a execução de forma remota e por contar com todas as ferramentas
livres para o administrador, empresa ou simplesmente de forma acadêmica.
Para o desenvolvimento da ferramenta foi utilizado como linguagem de programação o PHP,
e como complementação, o uso da técnica de programação ou conjunto de tecnologias com
denominação AJAX.
O PHP (acrônimo recursivo para “PHP: Hypertext Processor”) é uma linguagem
interpretada livre e utilizada para gerar conteúdo dinâmico da web. A linguagem surgiu em meados
de 1994, como um pacote de programas CGI criados por Rasmus Lerdorf, com o nome Personal
Home Page Tools, para substituir um conjunto de scripts Perl que ele usava no desenvolvimento de
sua página pessoal (WIKIPÉDIA PHP, 2012).
Trata-se de uma linguagem modularizada, o que a torna ideal para instalação e uso em
servidores web. Algumas de suas características:
•
Velocidade e robustez;
•
Estruturado e orientado a objetos;
•
Portabilidade;
•
Tipagem dinâmica;
•
Sintaxe similar a C/C++ e o Perl; e
•
Open source.
O AJAX (acrônimo em língua inglesa de Asynchronous Javascript and XML, que em
português significa “Javascript e XML Assíncronos”), teve grande importância na dinamização da
apresentação das telas e resultados obtidos na simulação. AJAX não é uma tecnologia, e sim um
conjunto de tecnologias conhecidas, trabalhando juntas, cada uma fazendo sua parte, oferecendo
novas funcionalidades (WIKIPÉDIA AJAX, 2012).
O ambiente de desenvolvimento e execução da ferramenta foi configurado utilizando uma
máquina instalada com sistema operacional Linux, distribuição Ubuntu versão 11.10. Esta escolha
foi motivada pela facilidade e sintonia do conjunto LAMP, ou seja, Linux, Apache, MySQL e PHP.
Dentre outras facilidades, destacam-se a segurança, a instalação automatizada pela Central
de Programas do Ubuntu e o Gerenciador de Pacotes Synaptic e principalmente a atualização das
versões ou correções automáticas dos pacotes que complementam o conjunto LAMP. Atualmente o
ambiente de trabalho e pacotes está atualizado e todo seu desenvolvimento foi nas versões:
•
MySQL Server e Client: 6.1.62;
•
PHP: 5.3.6-13; e
•
Apache: 2.2.20
Como se trata de uma ferramenta com tecnologias para desenvolvimento em ambiente web,
as telas foram escritas utilizando HTML 5 e CSS 3, ajudando também com velocidade de
desenvolvimento e na sua execução.
Em todo o processo de escrita da ferramenta, foi utilizado o editor BlueFish 2.0.3 e para
navegação o Firefox 12.0, que conta com um conjunto de opções para o desenvolvedor, como por
exemplo, o depurador de erros embutido por padrão no navegador. A característica principal de se
utilizar o Firefox é que na instalação do Ubuntu, este já é instalado com os demais pacotes o que
permite mantê-lo atualizado mais nova e prover a condição de execução das últimas versões das
linguagens de programação.
Outras ferramentas para auxílio na fase de desenvolvimento foram importantes para a
conclusão do projeto. São elas:
45
•
MySQL Administrator: permite gerenciamento de todo o servidor do banco de
dados, com acesso ao schema das bases, variáveis, configurações, etc.; e
•
MySQL Query Browser: ferramenta utilizada para execução e visualização dos
registros resultantes das simulações.
Ao iniciar uma base de dados nova, a ferramenta gera aleatoriamente cláusulas SQL, que
são utilizadas para executar a simulação e também para garantir que uma nova simulação seja
executada de forma idêntica; Por isso, estas funções são gravadas em uma tabela específica. A cada
simulação em uma base de dados que já sofreu no mínimo uma execução, ocorre a repetição destes
comandos.
As tabelas contendo os dados aleatórios populados na primeira execução da simulação e que
também sofrem alterações no decorrer da execução, são novamente carregados com os dados
originais da criação do ambiente, ou seja, toda a estrutura da base de dados é redefinida de acordo
com a original, o que garante a qualidade dos resultados obtidos.
O módulo das simulações foi desenvolvido utilizando laços, no qual sua função é fazer
chamadas às cláusulas SQL, utilizadas para obtenção dos resultados e apuração dos tempos de
execução. Em cada chamada utilizada, o MySQL recebe esta solicitação e inicia seu processamento.
Neste momento com o auxílio do AJAX, uma nova solicitação/chamada é enviada ao MySQL,
acontecendo com que o próprio SGBD utilizado faça a execução e controle das threads, evitando
este detalhamento via linguagem e programação, o que após várias tentativas e estudos, ficou
inviável. Esta execução ou chamada da próxima cláusula SQL, não depende do término da anterior,
e assim por diante. Desta forma, pode-se simular diversas chamadas em paralelo ao MySQL,
procurando sobrecarregar o SGBD e avaliar seu desempenho.
O simulador para análise e ajuste do banco de dados do MySQL projetado e desenvolvido,
por fim, é uma ferramenta de fácil compreensão e execução, porém conta com diversas tecnologias
mescladas, tornando-o razoavelmente complexo para um usuário iniciante. Finalizando, vale
mencionar e ressaltar a ocorrência de alguns riscos no decorrer de todo o trabalho, os quais são
descritos no item 3.2.1.
Alguns riscos no decorrer do projeto no TTCI foram levados em consideração e
mencionados em capítulos anteriores, bem como as prováveis soluções mapeadas, como seguem:
46
•
Viabilidade para reinicializar o MySQL automaticamente após o ajuste das variáveis,
sem a interferência manual do usuário;
Solução: sugerir após as modificações finalizar o simulador e reinicializar o MySQL por
linha de comando.
•
Utilização de threads para as chamadas das cláusulas SQL com as linguagens utilizadas
Solução: após estudos e a procura de diversas soluções para o uso de threads no PHP ou
Javascript, chegou-se a conclusão que mesmo não estando no lado da linguagem esta
técnica para a simulação de vários usuários, concorrendo com um mesmo banco de
dados, optou-se em considerar a própria execução do MySQL que interpreta e divide as
solicitações com cada uma sendo execuções paralelas. Isso tudo unido com a
técnica/tecnologia do AJAX, facilitou e demonstrou os resultados desejados na forma
dinâmica.
Ambos os riscos foram apresentados e de fato aconteceram no desenvolvimento da
ferramenta. As soluções mapeadas foram utilizadas para a conclusão do projeto.
3.2 APRESENTAÇÃO DA FERRAMENTA
Neste item é apresentada a execução do Simulador desenvolvido, conforme projeto
apresentado nos itens anteriores.
Quando o simulador é carregado, uma tela de login é apresentada para que o usuário faça o
acesso ao servidor MySQL, utilizando para isso, um usuário que tenha as permissões de
administrador, ou seja, usuário com permissão root. Na Figura 11, temos, como exemplo, o usuário
acessando com o usuário root padrão da instalação do MySQL.
Esta fase é importante, pois para os processos da ferramenta serem executados de forma
correta, dependem do acesso às tabelas de configuração e informações de schema do banco de
dados MySQL.
47
Figura 11. Tela de login do simulador.
Após a efetivação da conexão com o banco de dados, a tela inicial do simulador é
apresentada, conforme Figura 12, com opções organizadas em um menu único e uma tela com
informações iniciais do ambiente que está rodando, como usuário logado, versões do MySQL
(servidor e cliente), bem como o local onde se encontra a estrutura física (localhost ou endereço IP),
versão do Apache (servidor web) e da linguagem utilizada, o PHP.
48
Figura 12. Tela inicial.
O administrador inicia a execução da ferramenta selecionando, preferencialmente, a opção
Simulador do menu. Esta opção leva ao início das seleções para opção e parâmetros do simulador.
Na primeira tela, conforme Figura 13, pode optar por iniciar um ambiente novo ou em uma base de
dados existente no qual já passou por uma simulação.
Quando é selecionada a primeira opção, uma tela com os principais parâmetros é
apresentada, como mostra a Figura 14, permitindo configurar a base nova de acordo com suas
necessidades. O administrador deve informar nome da base de dados, prefixo e quantidade das
tabelas, quantidade de colunas, quantidade de registros por tabela e a quantidade de instruções, que
é internamente a quantidade de iterações utilizada no laço de execução.
49
Figura 13. Seleção para o tipo de simulação.
Figura 14. Seleção dos parâmetros para execução do simulador.
50
A segunda opção é a possibilidade de escolher por uma base de dados existente, com
simulações já realizadas. Na primeira situação, quando já houve uma simulação, o simulador recria
todo o ambiente conforme a primeira execução e executa sempre a mesma seqüência de instruções
SQL com mesmos dados, conforme item 3.2 Após todas as parametrizações efetuadas, a Figura 15
é apresentada para garantir o instante para o início da simulação. Permite assim que o usuário possa
voltar ao início das seleções para refazer os parâmetros.
Figura 15. Confirmação para início da simulação.
Com a confirmação para início da simulação, a próxima tela, demonstrada na Figura 16, é
apresentada para informar ao administrador a criação do ambiente, ou seja, as tabelas, população
dos dados, dos processos e tabelas auxiliares para a efetiva execução. Quando é iniciado um novo
ambiente para a ferramenta, existe um tempo dedicado para definição das tabelas auxiliares,
utilizadas para gravar as chamadas/funções SQL e os resultados obtidos das simulações. Isso é
importante, pois a cada nova execução ocorre a redefinição dos parâmetros para execução de uma
nova simulação que outrora já obteve resultados.
51
Figura 16. Tela com etapas do processo de criação do ambiente
Após todo o ambiente ser criado, o administrador clica no botão iniciar e a tela com as
informações da simulação é apresentada conforme demonstrado na Figura 17. Esta tela está dividida
em quatro partes distintas. A primeira, à esquerda na parte de cima, apresenta em uma textarea
sempre a última instrução SQL executada. Estas instruções são geradas aleatoriamente e guardadas
em uma tabela onde são sempre executadas quando existe a necessidade de se repetir uma nova
simulação. Assim que o AJAX retorna com a conclusão o administrador visualiza seu retorno. No
mesmo lado, mais abaixo, é apresentada uma tela com os processos do MySQL que estão ativos ou
inativos atualmente.
Completando a tela da simulação, o usuário pode acompanhar as principais variáveis de
configuração localizadas no lado direito e acima. A descrição de cada variável permite que após a
conclusão da simulação seja visualizada sua função e possível orientação para ajuste do ambiente.
52
Figura 17. Tela de simulação.
Completando o término da simulação, o administrador tem a possibilidade de visualizar os
tempos apurados em cada instrução executada. Além deste acesso, o sistema conta também com
uma opção no menu, conforme Figura 18 para acesso ao relatório de resultados. Permite visualizar
todos os bancos que passaram por uma simulação. A tela do relatório mostrado na Figura 19,
mostra os processos concluídos, onde ao posicionar o ponteiro no número seqüencial a instrução
SQL é apresentada; nas próximas colunas são apresentados os tempos de cada instrução por
simulação para a avaliação geral da melhora ou não do desempenho.
53
Figura 18. Seleção para os resultados da simulação.
Figura 19. Relatório com as simulações da base de dados selecionada.
54
O administrador conta com a opção de visualizar e alterar as variáveis de configuração do
MySQL. O sistema controla se cada variável que se deseja alterar pode ser no nível sessão ou
global. Quando alterado em sessão, esta alteração ficará valendo apenas para a base de dados atual.
Quando ocorre globalmente, valerá a alteração para todas as bases e usuários ativos.
Figura 20. Visualização e Alteração das variáveis de configuração.
Conforme mostra a tela na Figura 20, existe um botão ao lado de cada variável apresentada,
o que leva a abrir uma caixa para entrar com o novo valor correspondente a variável selecionada,
como mostrado na Figura 21. No instante da alteração, os erros ou efetivações provenientes do tipo
de alteração são mostrados para melhor entendimento do administrador.
55
Figura 21. Tela para alteração da variável de configuração do MySQL.
Além das alterações e visualizações das variáveis de configuração MySQL, a ferramenta
também está preparada para permitir a visualização das variáveis de execução ou também
conhecido, de status. Na Figura 22 é apresentado um exemplo em que todas as variáveis são
visualizadas, porém nesta parte do sistema nenhuma ação é permitida para o usuário. Cabe a cada
um analisar seus valores.
Também se pode ter acesso aos processos que estão em execução no servidor MySQL. A
tela para os processos, no exemplo da Figura 23, deixa como condição a quem esteja usando a
ferramenta, de matar o processo que previamente foi analisado e detectou-se que seu tempo de
execução está elevado, decorrente de alguma cláusula SQL apresentando problemas.
56
Figura 22. Tela para visualização das variáveis de execução/status.
Figura 23. Tela para visualização dos processos, com opção de matar processo.
57
3.3 VALIDAÇÕES DA FERRAMENTA
Para realizar a validação da ferramenta para simulação do MySQL, foi criada uma base de
dados configurada de acordo com a Figura 24, ou seja, o nome da base de dados escolhido para o
teste foi, VALIDADB, prefixo escolhido para as tabelas foi “sim_”, com duas tabelas contendo
cada uma vinte colunas e cem registros de dados. Para a iteração da simulação, foram criadas
quinhentas instruções SQL, de forma aleatória, conforme demonstra a Figura 25.
Figura 24. Validação do ambiente.
58
Figura 25. Lista de processos gerados aleatoriamente.
O teste se repetiu por três vezes, com o intuito de ter-se uma quantidade de dados para poder
iniciar o ajuste de uma variável, como exemplo, para apurar seus resultados e demonstrar a sua
execução. A variável escolhida e alterada foi a READ_BUFFER_SIZE, no qual foi passado do
valor padrão 131072 para 8200, conforme Figura 26. Após a alteração e ao executar a simulação
pela quarta vez com a alteração da variável acima, temos como resultado a Figura 27, que mostra
como foi prejudicado o tempo dos processos.
O
tempo
dos
processos
é
mostrado
no
formato
0.00000,
ou
“segundo(s).milisegundo(s)”, facilitando assim ao sistema extrair os cálculos das totalizações.
59
seja,
Figura 26. Alteração da variável Read_Buffer_Size.
Figura 27. Resultado simulação.
60
A cada simulação, o sistema tem por padrão, preparar o mesmo ambiente da execução
anterior. Isso faz com que os mesmos dados e cláusulas SQL sejam repetidos para uma melhor
qualidade dos resultados.
Mesmo apresentando-se um simples teste, com poucos registros, percebe-se o quão é
importante a influência dos ajustes que o banco de dados pode sofrer. Cabe cada administrador a
análise de forma mais profunda para extrair o melhor de seu desempenho.
O ajuste de desempenho em banco de dados não termina em uma simples configuração de
variável. Existem várias formas, de se obter os melhores resultados desejados da operação de um
banco ou servidor, e esta é uma delas e complementar as demais.
61
CONCLUSÃO
Inicialmente a ideia proposta foi o desenvolvimento de uma ferramenta para análise e ajuste
de desempenho para o MySQL sem o direcionamento de efetuar simulações. Logo uma nova ideia
foi levantada e optou-se por desenvolver as funcionalidades em uma ferramenta para simulação,
tornando sua execução mais intuitiva e com opção de identificar problemas antes mesmo de uma
base de dados entrar em funcionamento.
O tema proposto no projeto veio ao encontro das necessidades do desenvolvimento de uma
ferramenta para simular processos, com o intuito de gerar e obter dados para auxílio na análise e
ajuste de desempenho em banco de dados MySQL.
As funcionalidades propostas são direcionadas para a configuração de variáveis de sistema
juntamente com análise das variáveis de runtime. Mesmo sendo apenas uma das formas de medir e
ajustar desempenho em bancos de dados, considera-se de grande importância devido sua
abrangência em todos os outros métodos. Lembrando que as configurações um banco de dados são
apenas uma das formas de análise e ajuste para aumento de desempenho em um banco de dados.
Após a análise de algumas ferramentas para desempenho do MySQL, tornou-se mais visível
o que deveria ser proposto como funcionalidades do simulador. O Simulador, por suas
características de código aberto, pode permitir que melhorias sejam efetuadas e posteriormente
divulgadas à comunidade que adota a filosofia do código livre ou até mesmo para uso didático.
Outra característica é que para o desenvolvimento a linguagem utilizada também é livre.
Nos testes apresentados na seção de validação, tem-se uma melhor visão do funcionamento
da ferramenta para a simulação e como se pode obter melhoras significativas com os ajustes das
variáveis de configuração em um banco de dados.
A conclusão do projeto foi um desafio pelo desejo de colocar em prática as funcionalidades
modeladas. Também é almejado que as funções sejam melhoradas e ampliadas em todos os níveis
de otimização do MySQL, em trabalhos futuros.
Para trabalhos futuros, como sugestão, é desenvolver mecanismos de inteligência para
sugerir e ajustar de forma automatizada as variáveis de configuração.
REFERÊNCIAS BIBLIOGRÁFICAS
DUBOIS, P. MySQL administrator’s guide. MySQL USA: Press, 2004.
GUEDES, G. T. A. UML2: Guia de Consulta Rápida. São Paulo: Ed. Novatec, 2005.
INNOTOP. Manual do Usuário Innotop. <http://www.xaprb.com/blog/2006/07/02/innotopmysql-innodb-monitor/>. Acesso em: 24 set. 2011.
LIMA, Adilson da Silva. “MySQL Server. Soluções para Desenvolvedores e Administradores de
Bancos de Dados”. São Paulo: Ed. Érica, 2003.
MySQL. MySQL 5.5 Reference Manual. 04 abr. 2011. MySQL.
http://dev.mysql.com/doc/refman/5.5/en/index.html Acessado em: 04 abr. 2011.
Disponível em:
ORACLE. Oracle Brazil. Disponível em <http://www.oracle.com/br>. Acesso em: 19 set. 2011.
PHPMYADMIN. The phpMyAdmin Project. Disponível em: < http://www.phpmyadmin.net/>.
Acesso em: 2 out. 2011.
PRIMER, Tuning. MySQL Tuning Primer Script. Disponível em <https://launchpad.net/mysqltuning-primer>. Acesso em 3 out 2011.
PRONI, Ricardo Portilho. “SQL Magazine. MySQL Performance Diagnostics & Tuning”.
Grajaú/RJ: DevMedia, 2010.
ROSA, Jonas. “Desenvolvimento de uma Ferramenta para Análise de Ajuste de Desempenho do
Banco de Dados Oracle”. Itajaí, 2005. 88 f. Trabalho de Conclusão de Curso (Graduação em
Ciência da Computação) - Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do
Vale do Itajaí, Itajaí, 2005.
SCHWARTZ, Baron; et al. “Alto Desempenho em MySQL”. Rio de Janeiro: Alta Books, 2009.
SILBERSCHATZ, Abraham; KORTH, Henry F. “Sistemas de Banco de Dados”. São Paulo:
Makron Books, 2006.
SOFTWARE LIVRE. Comitê técnico de implementação de software livre no Governo Federal.
Disponível em <http://www.softwarelivre.gov.br>. Acesso em: 05 abr. 2011.
SYBASE. Performance e Tuning: Sybase Adaptive Server Enterprise. Modulo 1: Conceito de
Performance e Tuning. Develop IT Solutions, 2004.
VTNC. Velhas Tecnologias, Novos Conceitos. Disponível em <http://vtnc.org/52>. Acesso em: 15
set. 2011.
WIKIPÉDIA. Benchmark (Computação). Disponível em
<http://pt.wikipedia.org/wiki/Benchmark_(computa%C3%A7%C3%A3o)>. Acesso em: 05 set.
2011.
WIKIPÉDIA. AJAX (Programação). Disponível em
<http://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)>. Acesso em: 23 mai. 2012.
WIKIPÉDIA. AJAX (Programação). Disponível em <http://pt.wikipedia.org/wiki/PHP>. Acesso
em: 23 mai. 2012.
64
APÊNDICES
65
A PROJETO
O projeto foi modelado com o objetivo de desenvolver a ferramenta (software) para
simulação da análise e ajuste de desempenho para o SGBD MySQL. Neste capítulo descrevem-se,
utilizando a UML (Unified Modeling Language, Linguagem de Modelagem Unificada) e a
prototipação da interface, as funcionalidades e dados necessários para o desenvolvimento da
ferramenta.
Os itens que compõem este capítulo são:
•
Listagem dos Requisitos Funcionais;
•
Listagem dos Requisitos Não Funcionais;
•
Diagrama de Casos de Uso;
•
Diagrama de Componentes; e
•
Diagrama de Implantação.
A.1 REQUISITOS
Os requisitos funcionais são definidos como listagem de funções e/ou atividades a qual a
ferramenta contempla para sua efetivação usada durante o desenvolvimento. Os requisitos não
funcionais relacionam características e/ou restrições que tangem todo o ambiente no qual a
ferramenta foi desenvolvida.
Neste item estão relacionados os requisitos funcionais e não funcionais para conhecimento
da ferramenta desenvolvida.
A.1.1 Requisitos Funcionais
•
RF01:
O sistema permite efetuar a autenticação ao MySQL Server;
•
RF02:
O sistema permite a visualização das variáveis de configuração do MySQL
Server;
66
•
RF03:
O sistema permite o ajuste das variáveis de configurações do MySQL Server;
•
RF04:
O sistema permite a visualização das principais variáveis de runtime
(execução) do MySQL Server;
•
RF05:
O sistema permite visualizar processos em execução no instante da
simulação;
•
RF06:
O sistema permite criar uma nova base de dados para simulação de acordo
com os parâmetros selecionados pelo administrador;
•
RF07:
O sistema permite popular tabelas de uma nova base de dados de acordo com
a quantidade informada pelo administrador;
•
RF08:
O sistema permite mostrar os resultados obtidos enquanto executa a
simulação; e
•
RF09:
O sistema permite disponibilizar uma área que contenha o relatório
proveniente das simulações, mantendo registros para consultas futuras.
A.1.2 Requisitos Não Funcionais
•
RNF01:
O SGBD foco da simulação da análise de desempenho é MySQL Server;
•
RNF02:
A linguagem utilizada é o PHP utilizando AJAX para dinamizar o processo,
evitando assim refresh dos módulos (DIVS);
•
RNF03:
Para execução do simulador é necessário estar rodando um servidor web
devido sua linguagem ser o PHP. Para este projeto foi utilizado o Apache2; e
•
RNF04:
Para desenvolvimento do projeto o Sistema Operacional Linux, distribuição
Ubuntu, foi utilizado como plataforma.
67
A.2 DIAGRAMA DE CASOS DE USO
O Diagrama de Casos de Uso é considerado o mais informal da UML, ocorrendo sua
utilização principalmente nas fases de levantamento e análise de requisitos de um sistema.
Representa os diversos cenários e responsabilidades do sistema (GUEDES, 2005).
A.2.1 Análise e Ajuste de Desempenho
Neste Diagrama de Casos de Uso estão descritas as funcionalidades propostas no projeto,
como mostra a Figura 28, fazendo referência aos Requisitos Funcionais relacionando-os na Tabela
4.
Figura 28. Diagrama de Casos de Uso: Análise e Ajuste de Desempenho.
68
Tabela 4. Matriz Requisito Funcional e Diagrama de Casos de Uso.
Requisitos
Funcionais
RF01
RF02
RF03
RF04
RF05
RF06
RF07
RF08
RF09
A.2.1.1
UC01
X
UC02
Diagramas de Casos de Uso
UC03
UC04
UC05
UC06
X
X
X
X
X
X
X
X
UC01. Efetua autenticação no MySQL Server
•
Descrição: efetuar autenticação no MySQL Server como administrador, permitindo
acesso a todas as funcionalidades do banco de dados.
•
Requisitos Funcionais atendidos: RF01
•
Pré-condições: o MySQL Server deve estar configurado corretamente para acesso
•
Pós-condições: acesso as funcionalidades do servidor
1. Cenário Principal:
1.1. O administrador inicia o Simulador;
1.2. Informa o usuário e senha, conforme Figura 29;
1.3. Seleciona botão OK; e
1.4. Efetua autenticação e mostra informações do servidor, conforme Figura 30.
2. Cenário Alternativo:
2.1. Caso o administrador não informe os dados corretamente para acesso ao MySQL, o
sistema volta ao passo 1.1 do cenário principal.
69
Figura 29. Efetua autenticação no MySQL Server.
Figura 30. Tela inicial com informações do servidor.
70
A.2.1.2 UC02. Visualiza Variáveis de Configuração do Sistema
•
Descrição: permite a visualização das variáveis de configuração do MySQL Server
•
Requisitos Funcionais atendidos: RF02
•
Pré-condições: sucesso na autenticação do MySQL Server
•
Pós-condições: variáveis de configuração foram visualizadas
1. Cenário Principal:
1.1. Acessa a opção Mostrar variáveis de sistema do MySQL;
1.2. Visualiza as variáveis de sistema do MySQL conforme Figura 31.
2. Cenário Alternativo:
2.1. No passo 1.2, caso o administrador opte por alterar alguma variável da base de
dados em simulação, executa o UC03 do item 3.2.1.3.
Figura 31. Visualiza Variáveis de Configuração do Sistema.
71
A.2.1.3 UC03. Altera Variáveis do MySQL
•
Descrição: permite alterar as variáveis de configuração do MySQL Server
•
Requisitos Funcionais atendidos: RF03
•
Pré-condições: base de dados simulada
•
Pós-condições: reinicializar o MySQL Server de forma manual, devido alterações no
arquivo de configuração do MySQL, conforme sugerido na alteração da variável
1. Cenário Principal:
1.1 Seleciona a variável para alteração, se estiver com problema ou não, conforme
Figura 32;
1.2 Abre a tela para alteração do valor da variável;
1.3 Altera o valor da variável e confirma;
1.4 Retorna à tela inicial do Simulador; e
1.5 Informa ao administrador a necessidade de reinicializar o MySQL por linha de
comando, aviso de efetivação da alteração ou quando não existe a possibilidade de
ateração.
72
Alterar
Figura 32. Altera Variáveis do MySQL.
A.2.1.4 UC04. Visualiza Variáveis de Runtime (Execução)
•
Descrição: permite visualizar as variáveis de runtime (execução) do MySQL Server em
modo dinâmico
•
Requisitos Funcionais atendidos: RF04
•
Pré-condições: uma base de dados foi selecionada
•
Pós-condições: variáveis de execução foram visualizadas
1. Cenário Principal:
1.1 Acessa a opção Mostrar informações de runtime (execução) do MySQL;
1.2 Visualiza as variáveis de runtime (execução) do MySQL, conforme Figura 33;
1.3 Permite verificar a existência de problema com alguma variável.
73
Figura 33. Visualiza Variáveis de Runtime.
A.2.1.5 UC05. Analisa Processos em Execução
•
Descrição: o sistema monitora os processos em execução e permite ao administrador
tomar a ação de matar o processo caso seu tempo de execução seja elevado do MySQL
Server
•
Requisitos Funcionais atendidos: RF05
•
Pré-condições: uma base de dados foi selecionada
•
Pós-condições: processos em execução foram listados
1. Cenário Principal:
1.1 Seleciona a opção Mostrar os processos;
1.2 Visualiza os processos, conforme Figura 34;
1.3 O sistema mostra o tempo e o processo que está sendo executado.
2. Cenário Alternativo:
74
2.1 Se houver algum com problema, permite ao administrador matar o processo que
esteja degradando o funcionamento da base de dados;
2.2 O administrador fecha a tela após efetivação da solução.
Figura 34. Analisa Processos em Execução.
A.2.1.6 UC06. Inicia a Simulação
•
Descrição: executa um simulador de processos para auxiliar na obtenção de dados e
informações pertinentes a análise e ajuste do MySQL Server, conforme Figura 35.
Executará concorrência de acesso em uma base de dados, efetuando inserções,
atualizações e eliminações e consultas, com o propósito de sobrecarregar o
funcionamento e assim garantir os resultados. Os resultados são guardados e uma tabela
para que posteriormente possa ser analisado todas as demais simulações.
•
Requisitos Funcionais atendidos: RF06, RF07, RF08 e RF09
•
Pré-condições: uma base de dados foi selecionada
•
Pós-condições: disponibilizar o resultado histórico das simulações de uma mesma base
de dados.
75
1. Cenário Principal:
1.1 Seleciona a base de dados já criada anteriormente para a simulação, conforme
Figura 36;
1.2 O sistema refaz toda a estrutura inicial para a nova simulação, com isso a cada
simulação os dados serão os mesmos e as cláusulas SQL serão executadas
seqüencialmente para todas as execuções;
1.3 Inicia a Simulação;
1.4 Monitora os resultados obtidos dinamicamente; e
1.5 Finaliza a simulação e gera as informações obtidas, conforme Figura 37.
2. Cenário Alternativo:
2.1 No passo 1.1, o DBA pode optar por criar uma base nova. Para isso, informa os
parâmetros solicitados pelo simulador, conforme Figura 36;
2.2 Inicia a população dos registros de forma automática conforme parâmetros
informados pelo administrador; e
2.3 Executa as etapas a partir do item 1.2 do Cenário Principal do UC06.
76
Figura 35. Inicia a Simulação.
Sim
Figura 36. Telas para opções do início da Simulação.
77
Não
Figura 37. Resultados Obtidos na simulação.
A.2.2 DIAGRAMA DE COMPONENTES
O diagrama de componentes está relacionado à estrutura de desenvolvimento de uma
aplicação. Alguns exemplos como módulos de código-fonte, bibliotecas, formulários, módulos
executáveis, entre outros formam este diagrama (GUEDES, 2005).
A.2.2.1
Configuração do Ambiente
O Diagrama de Componentes da Figura 38 mostra as ferramentas necessárias para a
execução do simulador.
78
Figura 38. Diagrama de Componentes.
A.2.3 DIAGRAMA DE IMPLANTAÇÃO
Para representação física de um ambiente é utilizado o Diagrama de Implantação. Podem ser
representados servidores, estações, topologia e protocolos de comunicação e qualquer outro aparato
físico para demonstrar a distribuição física (GUEDES, 2005).
A.2.3.1
Configuração Física
A Figura 39 mostra um exemplo de como o simulador pode ser executado; no servidor onde
o MySQL está instalado ou até mesmo em uma estação local ou remota interligada à rede.
79
- Simulador
- Simulador
Figura 39. Diagrama de Implantação: Configuração Física.
80
ANEXOS
81
I ANEXO A
Tabela 5. Variáveis de Status do servidor MySQL
Variável
Aborted_clients
Aborted_connects
Bytes_received
Bytes_sent
Com_xxx
Connections
Created_tmp_disk_tables
Created_tmp_tables
Created_tmp_files
Delayed_insert_threads
Delayed_writes
Delayed_errors
Flush_commands
Handler_delete
Handler_read_first
Handler_read_key
Handler_read_next
Handler_read_prev
Handler_read_rnd
Handler_read_rnd_next
Descrição
Número de conexões abortadas porque o cliente morreu sem
fechar a conexão corretamente
Número de tentativas que falharam ao tentar a conexão ao
servidor MySQL
Número de bytes recebidos por todos os clientes
Número de bytes enviados para todos os clientes
Número de vezes que os comandos xxx foram executados
Número de tentativas de conexão ao servidor MySQL
Número de tabelas temporárias implícitas em disco criadas
durante a execução de instruções
Número de tabelas temporárias implícitas na memória
criadas durante execuções de instruções
Quantos arquivos temporários o mysqld criou
Número de threads para tratamento de INSERT DELAYED
que estão em uso
Número de registros escritos com INSERT DELAYED
Número de registros escritos com INSERT DELAYED onde
algum erro ocorreu (provavelmente duplicate key)
Número de comandos FLUSH executados
Número de vezes que um registro foi apagado da tabela
Número de vezes que a primeira entrada foi lida de um
índice. Se este valor for alto, sugere que o servidor está
fazendo várias leituras de índices, por exemplo, SELECT
col1 FROM foo, assumindo que col1 é indexado.
Número de requisições para ler um registro baseado em uma
chave. Se este valor for alto, é uma boa indicação que suas
pesquisas e tabelas estão indexadas corretamente.
Número de requisições para ler o próximo registro na ordem
da chave. Este valor será aumentado o usuário consultar uma
coluna de índice com uma faixa restrita. Ele também
aumentará se forem feitas busca nos índices
Número de requisições ao registro anterior na ordem da
chave. Ele é principalmente usado para otimizar ORDER BY
... DESC.
Número de requisições para ler um registro baseado em uma
posição fixa. O valor será alto se você estiver executando
várias pesquisas que exigem ordenação do resultado.
Número de requisições para ler o próximo registro no
arquivo de dados. Será alto se você estiver fazendo várias
buscas na tabela. Geralmente sugere que suas tabelas não
Handler_rollback
Handler_update
Handler_write
Key_blocks_used
Key_read_requests
Key_reads
Key_write_requests
Key_writes
Max_used_connections
Not_flushed_key_blocks
Not_flushed_delayed_rows
Open_tables
Open_files
Open_streams
Opened_tables
Rpl_status
Select_full_join
Select_full_range_join
Select_range
Select_scan
Select_range_check
Questions
Slave_open_temp_tables
Slave_running
Slow_launch_threads
Slow_queries
Sort_merge_passes
estão corretamente indexadas ou que suas pesquisas não
foram escritas para tirar vantagem dos índices existentes.
Números de comandos ROLLBACK internos.
Número de requisições para atualizar um registro em uma
tabela.
Número de requisições para inserir um registro em uma
tabela.
O número de blocos utilizados no cache das chaves.
O número de requisições para ler um bloco de chaves do
cache.
O número de leituras físicas de blocos de chaves do disco.
O número de requisições para gravar um bloco de chaves no
cache.
O número de escritas físicas de um bloco de chaves para o
disco.
O número máximo de conexões simultâneas que foram
usadas.
Blocos de chaves no cache de chaves que foi alterado, mas
ainda não foi descarregado para o disco.
Número de registros esperando para serem escritos em filas
INSERT DELAY.
Número de tabelas abertas.
Número de arquivos abertos.
Número de fluxos abertos (usado principalmente para logs).
Número de tabelas que foram abertas.
Status de replicação segura. (Ainda não está em uso).
Número de joins sem chaves (Se for 0, você deve conferir
com cuidado o índice de suas tabelas).
Número de joins onde foram usadas pesquisas segmentadas
na tabela de referência.
Número de joins onde foram usadas faixas da primeira
tabela. (Normalmente não é crítica mesmo se o valor estiver
alto.)
Número de joins onde é realizada uma busca completa na
primeira tabela.
Número de joins sem chaves onde o uso de chave foi
conferido após cada registro (Se for 0, o índice de suas
tabelas deve ser conferido com cuidado)
Número de consultas enviadas para o servidor.
Número de tabelas temporárias atualmente abertas pela
thread slave.
É ON se este slave está conectado a um master.
Número de threads que levaram mais tempo do que
slow_lauch_time para serem criadas.
Número de consultas que levaram mais tempo que
long_query_time segundos.
Número de infusões feitas pelo algoritmo de ordenação. Se
este valor for alto você deve considerar o aumento de
83
Sort_range
Sort_rows
Sort_scan
ssl_xxx
Table_locks_immediate
Table_locks_waited
Threads_cached
Threads_connected
Threads_created
Threads_running
Uptime
sort_buffer.
Número de ordenações que foram feitas com limites.
Número de registros ordenados.
Número de ordenações que foram feitas lendo a tabela.
Variáveis usadas por SSL; Ainda não desenvolvido.
Número de vezes que um travamento de tabela foi obtido de
maneira automática.
Número de vezes que um bloqueio de tabela não pôde ser
obtido imediatamente e foi preciso esperar. Se o valor for
alto, e o usuário tiver problemas de desempenho, suas
consultas devem ser otimizadas e depois dividir sua tabela ou
tabelas ou usar replicação. Disponível a partir da versão
3.23.33
Número de threads no cache de threads.
Número de conexões atuais abertas.
Número de threads criadas para lidar com conexões.
Número de threads que não estão dormindo.
Quantos segundos o servidor está funcionando.
Fonte: MySQL (2011)
84
Download

Modelo de TCC para o Curso de Ciência da Computação da UNIVALI