Pular para o conteúdo
  • Denunciar
  • Indicar

1. Lentidão

Enviado em 09/05/2012 - 09:44h

Tenho dois servidores, um server2003 e um outro opensuse 11.4. Em ambos tenho o mysql, estou fazendo a migração dos dados do server2003 para o opensuse e me deparei com um grande problema. Quando executo um determinado programa usando a base de dados do server2003 eu tenho a resposta em 6 segundos, quando uso o mesmo programa no linux a minha resposta passa a ser de 39 segundos, ou seja uma diferença enorme. Deixo claro que a máquina do linux é superior á máquina do server2003.
Usando o Health do administrar do mysql, observei que no server2003 tem uma abertura máxima de 365 query já no linux a quantidade máxima foi de 143 query, ou seja, no server2003 ele resolve mais query em menor tempo.
Outro detalhe importante, observei que no servidor linux a requisição no HD é altíssima.

O que pode estar acontecendo?
Se alguém passou por este problema e obteve solução, agradeço ajuda.

Segue meu my.cnf


[client]
port = 3306datadir = /var/lib/mysql
socket = /var/run/mysql/mysql.sock


[mysqld]
port = 3306
socket = /var/run/mysql/mysql.sock

skip-locking
key_buffer_size = 312M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 100G
myisam_max_extra_sort_file_size = 100G
innodb_additional_mem_pool_size = 2M
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 1M
innodb_buffer_pool_size = 15M
innodb_log_file_size = 5M
innodb_thread_concurrency = 8
query_cache_size=8M
table_cache=510
tmp_table_size=13M
thread_cache_size=12
lower_case_table_names=1
default-character-set=latin1
max_connections=255
language=portuguese

log-bin=mysql-bin
binlog_format=mixed
server-id = 1

[safe_mysqld]
log-error = /var/log/mysql/mysqld.log
socket = /var/run/mysql/mysql.sock

!include_dir /etc/mysql

[mysqldump]
socket = /var/run/mysql/mysql.sock
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash


[myisamchk]
key_buffer_size = 100M #20M
sort_buffer_size = 100M #20M
read_buffer = 50M #2M
write_buffer = 50M #2M

[mysqlhotcopy]
interactive-timeout

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
log = /var/log/mysqld_multi.log


[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1

[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1

[mysqldump]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1

[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1

[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1


Responder tópico

2. Re: Lentidão

Enviado em 09/05/2012 - 09:56h

Roda o mysqltuner, para fazer teste para ti!

http://www.techerator.com/2011/08/optimize-your-mysql-server-with-the-mysql-tuner-script/

É bom rodar ele em sobrecarga! Execute as consultas e rode o mysqltuner.

Trabalhar com innodb é muito bom também!

Otimize o seu server também.

Aumenta seu query_cache_size(tamanho da cache). O meu está em 256M

query_cache_size = 256M
query_cache_type = 1
Veja a questão de resolução de nomes também. Pode deixar lento!

3. Re: Lentidão

Enviado em 12/05/2012 - 13:03h

Amarildo, você tocou num assunto muito importante e que eu já venho observando mo mysql lento quando uso servidor linux, a resolução de nomes.

Qual a relação do muysql, uso internto, com o DNS?

Como devo configurar o DNS nesse caso, sendo que a máquina é só de uso interno e o programa chama o mysql pelo ip e não pelo nome?

Aguardo seu comentário e desde já agradeço.

Geraldo.

Ps.. rodei o mysqltuner e está tudo legal...

4. Re: Lentidão

Enviado em 12/05/2012 - 16:42h

Como o MySQL Utiliza o DNS

Quando um novo cliente conecta ao mysqld, o mysqld extende uma nova thread para lidar com o pedido. Esta thread primeiro confere se o nome da máquina está no cache de nomes de máquinas. Se não, a thread tenta resolver o nome da máquina.
Se o sistema operacional suporta as chamadas seguras com thread gethostbyaddr_r() e gethostbyname_r(), a thread as utiliza para fazer a resolução do nome máquina.
Se o sistema operacional não suporta as chamadas de threads seguras, a thread trava um mutex e chama gethostbyaddr() e gethostbyname(). Perceba que neste caso nenhuma outra thread pode resolver outros nomes de máquinas que não existam no cache de nomes de máquina até que a primeira thread esteja destrave o mutex.
Você pode desabilitar a procura de nomes de máquinas no DNS iniciando o mysqld com a opção --skip-name-resolve. No entanto, neste caso você só pode usar números IP nas tabelas de privilégio do MySQL.
Se você possuir um DNS muito lento e várias máquinas, pode obter mais desempenho desligando a procura de nomes de máquinas usando a opção --skip-name-resolve ou aumentando HOST_CACHE_SIZE (valor padrão: 128) e recompilar mysqld.
Você pode desabilitar o cache de nomes de máquinas iniciando o servidor com a opção --skip-host-cache. Para limpar a cache do nome de máquinas, envie uma instrução FLUSH HOSTS ou execute o comando mysqladmin flush-hosts.
Se você deseja disabilitar as conexões TCP/IP totalmente, inicie o mysqld com a opção --skip-networking.

Referência: http://xoops.net.br/docs/mysql/manual/ch05s05.php#.T666P6QjUVk

Para configurar o bind para resolver nomes internos pode usar esse artigo:
http://granito2.cirp.usp.br/DNS.Dicas-L/dns_server.html

5. Re: Lentidão

Enviado em 12/05/2012 - 16:46h

Os índices nas tabelas do banco em Linux estão iguais aos do Windows?

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder