[FUG-BR] Diferença absurda do mysql no Linux para o do FreeBSD [RESUMO] [RESOLVIDA]

Marcelo Gondim gondim em bsdinfo.com.br
Sexta Julho 13 12:00:23 BRT 2012


Evento: migração de um servidor de torrents de um Datacenter na Holanda 
para um Datacenter na Rússia.

Holanda:
Equipamento: 2x4 Core Xeon L5410 2.33GHz 16Gb de ram 2 discos SAS de 72Gb.
SO: Debian 6.0 amd64
Programas: Apache 2.2.16 + PHP 5.3 + MySQL 5.1 - mais conhecido como 
LAMP rsrsrsr

Rússia:
Equipamento: 2x6 Core Xeon E5645 2.4Ghz 24Gb de ram 4 discos SAS de 
147Gb 15k rpm em raid 0

1ª tentativa:
SO: FreeBSD 9.0-Stable amd64
Programas: Apache 2.2.22 +  PHP 5.3 + MySQL 5.1 (BUILD_OPTIMIZED) - FAMP? :D

Nessa tentativa eu reparei ao iniciar a aplicação loads muito altos na 
casa de 200 e cheguei à ver 1000. Também estava tendo problemas com o 
MySQL porque ao pegar o my-huge.cnf e alterar ele com os valores que eu 
já tinha no servidor antigo me deparei com o consumo de ram muito alto. 
Na aplicação web me gerava o seguinte erro quando chegava em umas 3000 
conexões na base MySQL:

DATABASE: mysql_connect: Can't create a new thread (errno 35); if you
are not out of available memory, you can consult the manual for a
possible OS-dependent bug

Utilizei o tuning-primer pra ver os valores que estavam sendo usados e o 
que estava sendo consumido.

2ª tentativa:
Em dado momento algumas pessoas me sugeriram usar o FreeBSD 8.3 por 
estar com uma performance melhor que o 9. Aí fiz todos os procedimentos 
abaixo passando o sistema de FreeBSD 9-stable para o 8.3-stable:

- alterei o supfile de RELENG_9 para RELENG_8.
- fiz o csup nele.
- fiz o buildword e buildkernel
- fiz installkernel e installworld
- mergemaster, delete-old e delete-old-libs
- reboot na criança
- recompilei todos os pacotes instalados com o portmaster -a -f

O load do sistema já melhorou absurdamente e passou à ficar na casa dos 
1.x, 10.x mas nada com 3 casas rsrsrs  Não sei se houve alguma mudança 
nisso entre o 8.3 e o 9.
Mas o MySQL continuava estranho e como já estávamos alguns dias parados 
resolvemos voltar para o Linux.

Resultado final:
O problema do MySQL era a variável "read_rnd_buffer_size" que veio do 
my-huge.cnf e que o default dela é 8M. Tudo bem usar ela como default 
desde que você use o max_connections com valores baixos. O default do 
max_connections, se eu não me engano, é 150. Quando colocava o 
max_connections com 4000 o mysql avisava que ia precisar de uns 48G de 
ram pra trabalhar nessa quantidade e aí quando chegava em 2000 à 3000 
conexões concorrentes já dava erro de falta de memória no MySQL.
O que resolveu foi simplesmente comentar essa variável e tunnar as 
outras para as minhas necessidades e ficou 100%

Pena que agora só poderemos tentar colocar o FreeBSD mais pra frente mas 
desta vez farei diferente algumas coisas:

1º Usarei RAID 10.
2º Sistema de arquivos UFS2+SUJ porque o ZFS consome muita memória, 
embora seja possível controlar isso, mas acredito que o UFS2+SUJ fique 
melhor.
3º Tunning melhor do sistema no sysctl, loader e kernel.

Acho que é isso pessoal.

Gondim








Mais detalhes sobre a lista de discussão freebsd