Como a Compilação e a Ligação Afetam a Velocidade do MariaDB
A maioria dos testes seguintes são feitos no Linux com os benchmarks do MariaDB, 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 MariaDB compilasse com as otimizações.
Quando você compila o MariaDB 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 MariaDB 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 servidormysqld
é 1% mais rápido do que com ogcc
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 MariaDB dinamicamente ligada à sua aplicação cliente. É só o servidor que é crítico para performance. - Se você corta seu binário
mysqld
comstrip 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 MariaDB 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 MariaDB demonstram 35% de perda). Se utilizar--with-debug
, a queda será de apenas 15%. Para uma versão domysqld
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 omysqld
1 % mais lento. - Compilando no Linux-x86 com gcc sem frame pointers
-fomit-frame-pointer
ou-fomit-frame-pointer -ffixed-ebp
deixa omysqld
1-4% mais rápido.
A distribuição MySQL-Linux fornecida pela MariaDB Foundation é 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 MariaDB para Linux é ligado estaticamente para conseguir mais desempenho e ser mais portável.