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
pgcce compila tudo com-O6, o servidormysqldé 1% mais rápido do que com ogcc2.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
mysqldcomstrip 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 domysqldcompilada 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
gcc3.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
gcc2.95.2 para o ultrasparc com a opção-mcpu=v8 -Wa,-xarch=v8plusamelhora 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-bindeixa omysqld1 % mais lento. - Compilando no Linux-x86 com gcc sem frame pointers
-fomit-frame-pointerou-fomit-frame-pointer -ffixed-ebpdeixa omysqld1-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.