Categorias
banco de dados Java

Melhore o desempenho do MySQL sem a ajuda de um DBA

Depois de ler tanta coisa sobre a mesma notícia, resolvi postar algo bem mais útil sobre o MySQL.


Independente do que aconteça com ele, não será tão cedo que você deixará de usá-lo para a sua base local de desenvolvimento.

O problema é que quando o banco de dados começa a crescer e aos poucos ficar lento e mais lento, e como você não é DBA, não perde tempo mexendo nessas coisas e acaba convivendo com isso.

Baseado nesse artigo, vou passar aqui umas dicas rápidas que farão a diferença no uso do MySQL em sua máquina.

Para listar os parâmetros do seu MySQL, veja no site oficial ou use alguma ferramenta.

  1. Derrube o serviço do MySQL
  2. Localize o seu arquivo my.cnf ou my.ini (em /etc ou C:\Program Files\MySQL\MySQL Server 5.1 )
  3. Modifique os parâmetros abaixo de [mysqld] :
    • max_connections = 60
    • max_user_connections = 60
    • key_buffer_size = mude para um valor entre um terço e metade da memória RAM disponível (exemplo: 128M)
  4. Inicie o serviço do MySQL

Uma maneira mais fácil ainda é com o seu MySQL rodando, executar esse script que analisará o banco de dados e exibirá os parâmetros que deverão ser alterados para uma melhor performance.

Veja um exemplo de resultado parcial do script:

mysqld is alive                        

        -- MYSQL PERFORMANCE TUNING PRIMER --
             - By: Matthew Montgomery                                               

MySQL Version 5.0.76-log x86_64

Uptime = 0 days 16 hrs 36 min 48 sec
Avg. qps = 0                        
Total Questions = 15                
Threads Connected = 1               

Warning: Server has not been running for at least 48hrs.
It may not be safe to use these recommendations                                                                                                                                                                                                                  
TABLE CACHE
Current table_cache value = 64 tables
You have a total of 451 tables
You have 64 open tables.
Current table_cache hit rate is 13%, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 125 temp tables, 11% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Created disk tmp tables ratio seems fine

TABLE SCANS
Current read_buffer_size = 256 K
Current table scan ratio = 11 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 0 : 216
Your table locking seems to be fine

Bom proveito!

Fernando Boaglio, para a comunidade. =)