Marcos Miras
9 posts
|
Uma aplicação RoR é uma excelente solução, Mongrel com Apache coisa de cinema, agora e a requisição no DB? A maioria das pessoas utilizam a configuração padrão do Mysql, e poucos sabem que customizando essa configuração você pode fazer a aplicação ficar melhor ainda. O que adianta você ter 1, 2 ou 4GB de memória no server sendo que a configuração padrão do MySql vai usar uns 128MB…
Iremos trabalhar no arquivo my.cnf, mas antes vamos fazer uma cópia caso dê algum problema.
A configuração padrão é esta:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/var/lib/mysql
[safe_mysqld]
err-log=/var/log/mysql.log
pid-file=/var/run/mysqld/mysql.pid
Iremos substituir por esta:
- Porta onde o cliente irá conectar
port = 3306
- Localização do socket para conexão, alteramos para não ter problemas com permissões de diretórios
socket = /tmp/mysqld.sock
[safe_mysqld]
- Erros de inicializacao
err-log = /var/lib/mysqld/data/mysqld.err
[mysqld]
- ID do processo
server-id=15
log-bin=/var/lib/mysqld/data/mysql-bin.log
binlog-do-db=pop
binlog-ignore-db=mailstats,mysql,pop.bak,radius,radius.bak,test
- Usuario que iniciara o processo
user = mysql
- Arquivo de Id do processo
pid-file = /var/lib/mysqld/data/mysqld.pid
- O Socket de conexao novamente
socket = /tmp/mysql.sock
- Porta de comunicacao do processo
port = 3306
- Registro de eventos do processo
log = /var/log/mysqld.log
- Onde ele esta instalado
basedir = /var/lib/mysqld
- Onde estao os dados
datadir = /var/lib/mysqld/data
- Temporario
tmpdir = /tmp
skip-locking
- Essa variavel (key_buffer) e boa, que e a que define o quanto de memoria estara disponivel
- para o banco.
set-variable = key_buffer=2048M
set-variable = max_allowed_packet=1M
set-variable = table_cache=20000
set-variable = sort_buffer=1M
- O record_buffer deve ser pequeno para que ele grave o mais rapido possivel as informacoes
- que estao na memoria no banco.
set-variable = record_buffer=1M
set-variable = myisam_sort_buffer_size=128M
set-variable = thread_cache=8
set-variable = thread_concurrency=8
- Essa variavel(max_connections) deve ser metade do valor da variavel table_cache
- Ela indica quantas conexoes o banco podera receber, consequentemente os subprocessos aplicados
- Quanto maior o numero de conexoes melhor sera o desempenho do banco
set-variable = max_connections=10000
set-variable = net_write_timeout=30
set-variable = connect_timeout=2
set-variable = wait_timeout=30
skip-innodb
[mysqldump]
quick
set-variable = max_allowed_packet=1M
[mysql]
[isamchk]
- Essa config e importante porque o isamchk é o cara que vai otimizar
- reparar e checar as tabelas. No default do mysql ele usa 8M(windows) e 16M(Linux)
set-variable = key_buffer=128M
Reinicie o MySQL e confira as melhorias!
Marcos Miras.
|
Cassiano
124 posts
|
Mais alguém tem outras dicas para otimizaro MySQL??
Forte abraço,
|
Marcos Miras
9 posts
|
Cassiano, você pode pesquisar sobre os confs que vem no MySql (/diretorio_instalado_o_mysql/support-files)
my-small.cnf →Servidores com 64 a 128 megas de memória RAM dedicadas ao MySQL
my-medium.cnf →Servidores com 128 a 256 megas de memória RAM dedicadas ao MySQL
my-medium.cnf →Servidores com 256 a 512 megas de memória RAM dedicadas ao MySQL
my-large.cnf →Servidores com 512 megas a 1 Gb de memória RAM dedicadas ao MySQL
my-huge.cnf →Servidores com mais de 1 Gb de memória RAM dedicada ao MySQL
Utilize o que se aplica a você e altere algumas configurações como mostrado acima para melhorar o desempenho. Lembrando que o MySQL utiliza a memória disponível, então deixe ele para inicializar primeiro que outros aplicativos ponha o ID menor disponível para ele, pois se a memória estiver reservada ele usará o SWAP e isso é mau! Lembre-se de não deixar muita SWAP se tiver muita memória(ex. A 4GB de memória use 512mb de SWAP). Essas “bobeiras” fazem diferença e evita gargalos no teu ambiente.
|