A maioria dos testes seguintes são feitos no Linux com os benchmarks do MySQL, mas eles devem fornecer alguma indicação para outros sistemas operacionais e workloads.
Você obtêm um executável mais veloz quando ligado com
-static
.
No Linux, você irá obter o código mais rápido quando
compilando com pgcc
e -03
.
Para compilar sql_yacc.cc
com estas
opções, você precisa de cerca de 200M de memória porque o
gcc/pgcc
precisa de muita memória para criar
todas as funções em linha. Também deve ser configurado o
parâmetro CXX=gcc
para evitar que a
biblioteca libstdc++
seja incluida (não é
necessária). Perceba que com algumas versões do
pgcc
, o código resultante irá executar
somente em verdadeiros processadores Pentium, mesmo que você
utilize a opção do compilador para o código resultante que
você quer, funcionando em todos os processadores do tipo x586
(como AMD).
Só pelo fato de utilizar um melhor compilador e/ou melhores opções do compilador você pode obter um aumento de desempenho de 10-30% na sua aplicação. Isto é particularmente importante se você mesmo compila o servidor SQL!
Nós testamos ambos os compiladores Cygnus Codefusion e o Fujitsu, mas quando os testamos, nenhum dos dois era suficientemente livre de erros para que o MySQL compilasse com as otimizações.
Quando você compila o MySQL deve incluir suporte somente para
os conjuntos de caracteres que deseja usar. (Opção
--with-charset=xxx
). As distribuições
binárias padrão do MySQL são compiladas com suporte para
todos os conjuntos de caracteres.
Segue uma lista de algumas medidas que temos feito:
Se você utiliza o pgcc
e compila tudo
com -O6
, o servidor
mysqld
é 1% mais rápido do que com o
gcc
2.95.2.
Se você liga dinamicamente (sem
-static
), o resultado é 13% mais lento
no Linux. Note que você ainda pode utilizar uma biblioteca
do MySQL dinamicamente ligada à sua aplicação cliente. É
só o servidor que é crítico para performance.
Se você corta seu binário mysqld
com
strip libexec/mysqld
, o binário gerado
pode ficar até 4% mais rápido.
Para uma conexão de um cliente para um servidor em
execução na mesma máquina, se você conecta utilizando
TCP/IP em vez de utilizar um arquivo socket Unix, o
rendimento é 7.5% mais lento no mesmo computador. (Se você
fizer conexão à localhost
, o MySQL
irá, por padrão, utilizar sockets).
Para conexões TCP/IP de um cliente para um servidor, conectando a um servidor remoto em outra máquina será 8-11% mais lento que conectando ao servidor local na mesma máquina, mesmo para conexões Ethernet de 100M.
Quando executar o nosso teste de benchamrk usando conexões seguras (todos os dados crptografados com suporte interno SSL) ele se torna 55% mais lento.
Se você compilar com --with-debug=full
, a
maioria das consultas será 20% mais lentas. Algumas
consultas podem demorar muito mais tempo (por exemplo, os
benchmarks do MySQL demonstram 35% de perda). Se utilizar
--with-debug
, a queda será de apenas 15%.
Para uma versão do mysqld
compilada com
--with-debug=full
, você pode desabilitar a
verificação de memória em tempo de execução iniciando-o
com a opção --skip-safemalloc
. O
resultado final neste caso deve estar próximo de quando
compilado com --with-debug
.
Em um Sun UltraSPARC-IIe, Forte 5.0 é 4% mais rápido que
gcc
3.2.
Em um Sun UltraSPARC-IIe, Forte 5.0 é 4% mais rápido em modo de 32 bits que em modo de 64 bits.
Compilando com gcc
2.95.2 para o
ultrasparc com a opção -mcpu=v8
-Wa,-xarch=v8plusa
melhora a performance em 4%.
No Solaris 2.5.1, a MIT-pthreads é 8-12% mais lenta do que as threads nativas do Solaris em um único processador. Com mais carga/CPUs a diferença deve aumentar.
Executar com --log-bin
deixa o
mysqld
1 % mais lento.
Compilando no Linux-x86 com gcc sem frame pointers
-fomit-frame-pointer
ou
-fomit-frame-pointer -ffixed-ebp
deixa o
mysqld
1-4% mais rápido.
A distribuição MySQL-Linux fornecida pela MySQL AB é
normalmente compilada com pgcc
, mas vamos
retornar ao uso do gcc
pelo fato de um bug no
pgcc
que gera o código que não executa no
AMD. Continuaremos a usar o gcc
até que o
bug seja resolvido. Neste meio tempo, se você possui uma
máquina que não seja AMD, você pode ter um binário mais
rápido compilando com o pgcc
. O binário
padrão do MySQL para Linux é ligado estaticamente para
conseguir mais desempenho e ser mais portável.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.