[+/-]
As notas abaixo a respeito da glibc aplicam-se somente na situação quando o MySQL é construido por você mesmo. Se você está executando Linux em uma máquina x86, na maioria dos casos é muito melhor para você usar nosso binário. Nós ligamos nossos binários com a melhor versão alterada da glibc, podemos escolher as melhores opções do compilador, em uma tentativa de torná-la funcional para um servidor muito exigido. Para um usuário comum, mesmo para configurações com várias conexões concorrentes e/ou tabelas excedendo o limite de 2 GB, nosso binário é, na maioria das vezes, a melhor escolha. Portanto se você ler o texto abaixo, e está em dúvida sobre o que deve fazer, tente usar o nosso binário primeiro para ver se ele preenche suas necessidades, e preocupe-se com uma construção própria apenas se você descobrir que nosso binário não é bom o suficiente para você. Neste caso, iríamos apreciar se fosse feito uma observação sobre isto, para que possamos fazer uma melhor versão bináris da próxima vez.
        O MySQL usa LinuxThreads no Linux. Se você usa uma versão do
        Linux que não tenha a glibc2, você deve
        instalar LinuxThreads antes de tentar compilar o MySQL. Você
        pode obter o LinuxThreads em
        http://www.mysql.com/downloads/os-linux.html.
      
NOTA: Temos visto alguns problemas estranhos com o Linux 2.2.14 e MySQL em sistemas SMP; Se você tem um sistema SMP, recomendamos a atualização para o Linux 2.4! Seu sistema ficará mais rápido e mais estável.
        Perceba que as versões da glibc iguais ou
        anteriores à Versão 2.1.1 tem um bug fatal no tratamento do
        pthread_mutex_timedwait, que é usado quando
        você executar instruções INSERT DELAYED.
        Recomendamos não usar INSERT DELAYED antes
        de atualizar a glibc.
      
        Se você planeja ter mais de 1000 conexões simultâneas, será
        necessário fazer algumas alterações na LinuxThreads,
        recompile-a e religue o MySQL ao novo
        libpthread.a. Aumente
        PTHREAD_THREADS_MAX em
        sysdeps/unix/sysv/linux/bits/local_lim.h
        para 4096 e abaixe o STACK_SIZE no
        linuxthreads/internals.h para 256KB. Os
        caminhos são relativos à raiz da glibc.
        Note que o MySQL não será estável com cerca de 600-1000
        conexões se o valor de STACK_SIZE for o
        padrão de 2MB.
      
Se você tiver um problema com o MySQL, no qual ele não consiga abrir vários arquivos ou conexões, pode ser que você não tenha configurado o Linux para lidar com o número de arquivos suficiente.
No Linux 2.2 e posteriores, você pode conferir o valor para a alocação dos arquivos fazendo:
cat /proc/sys/fs/file-max cat /proc/sys/fs/dquot-max cat /proc/sys/fs/super-max
        Se você possui mais de 16M de memória, deve ser adicionado o
        seguinte no seu script de boot (ex.
        /etc/rc/boot.local no SuSE Linux):
      
echo 65536 > /proc/sys/fs/file-max echo 8192 > /proc/sys/fs/dquot-max echo 1024 > /proc/sys/fs/super-max
Você também pode executar os comandos acima da linha de comando como root, mas neste caso, os antigos limites voltarão a ser usados na próxima vez que o computador for reiniciado.
        De forma alternativa, você pode configurar estes parâmteros
        durante a inicialização usando a ferramenta
        sysctl, que é usada por muitas
        distribuições Linux (No SuSE a partir da versão 8.0). Apenas
        grave os seguintes valores em um arquivo chamado
        /etc/sysctl.conf:
      
# Aumente alguns valores para o MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.super-max = 1024
        You should also add the following to
        /etc/my.cnf:
      
[mysqld_safe] open-files-limit=8192
Os parâmetros acima permitem o MySQL criar até 8192 conexões + arquivos.
        A constante STACK_SIZE na LinuxThreads
        controla o espaçamento das pilhas threads no espaço de
        endereçamento. Ela necessita ser grande o bastante para que
        tenha espaço o suficiente para a pilha de cada thread, mas
        pequena o bastante para manter a pilha de alguma thread
        executando dos dados globais mysqld.
        Infelizmente, a implementação Linux de
        mmap(), como descobrimos em experiências,
        irá desmapear uma região já mapeada se você solicitar o
        mapeamento de um endereço já em uso, zerando os dados de toda
        a página ao invés de retoernar. um erro. Portanto a segurança
        do mysqld ou qualquer outra aplicação
        baseada em threads depende do comportamento gentil do código
        que cria as threads. O usuário deve tomar medidas para
        certirficar-se que o número de threads em funcionamento em
        qualquer hora seja suficientemente baixo para que as pilhas das
        threads permaneçam longe do monte global. Com
        mysqld você deve reforçar este
        comportamento "gentil" configurando um valor razoável para a
        variável max_connections.
      
        Se você mesmo construiu o MySQL e não deseja confusões
        corrigindo LinuxThreads, você deve configurar
        max_connections para um valor máximo de 500.
        Ele ainda deve ser menor se você tiver uma chave grande para o
        buffer, grandes tabelas heap, ou outras coisas que fazem o
        mysqld alocar muita memória ou se você
        estiver executando um kernel 2.2 com o patch de 2GB. Se você
        estiver usando nosso binário ou RPM versão 3.23.25 ou
        posterior, você pode seguramente configurar
        max_connections para 1500, assumindo que não
        há uma grande chave de buffer ou tabelas heap com grande
        quantidade de dados. Quanto mais você reduz
        STACK_SIZE em LinuxThreads mais threads você
        pode criar seguramente. Recomendamos os valores entre 128K e
        256K.
      
        Se você usa várias conexões simultâneas, você pode sofrer
        com um "recurso" do kernel 2.2 que penaliza um processo por
        bifurcar-se ou clonar um filho na tentativa de prevenir um
        ataque de separação. Isto faz com que o MySQL não consiga
        fazer uma bom escalonamento, quando o número de clientes
        simultâneos cresce. Em sistemas com CPU única, temos visto
        isto se manifestar em uma criação muito lenta das threads,
        tornando a conexão ao MySQL muito lenta. Em sistemas de
        múltiplas CPUs, temos observado uma queda gradual na velocidade
        das consultas quando o número de clientes aumenta. No processo
        de tentar encontrar uma solução, recebemos um patch do kernel
        de um de nossos usuários, que alega fazer muita diferença para
        seu site. O patch está disponível aqui
        (http://www.mysql.com/Downloads/Patches/linux-fork.patch).
        Atualmente temos feito testes extensivos deste patch nos
        sistemas de desenvolvimento e produção. A performance do
        MySQL obtem uma melhora significativa, sem
        causar problemas e atualmente o recomendamos para nossos
        usuários que continuando trabalhando com servidores muito
        carregados em kernels 2.2. Este detalhe foi corrigido no kernel
        2.4, portanto, se você não está satisfeito com a performance
        atual do seu sistema, melhor do que aplicar um patch ao seu
        kernel 2.2, pode ser mais fácil simplesmente atualizar para o
        2.4, que lhe dará também uma melhora em seu sistemas SMP em
        adição à correção do bug discutido aqui.
      
        Estamos testando o MySQL no kernel 2.4 em uma máquina com 2
        processadores e descobrimos que o MySQL escalona muito melhor -
        virtualmente, não há nenhuma perda de desempenho no throughput
        das consultas até cerca de 1000 clientes, e o fator da escala
        do MySQL (computado com a razão do throughput máximo para o
        thoughput de cada cliente.) foi de 180%. Temos observado
        resultados similares em sistemas com 4 processadores -
        virtualmente não há perda de desempenho quando o número de
        clientes é incrementado até 1000 e o fator da escala foi de
        300%. Portanto para um servidor SMP muito carregado nós
        definitivamente recomendamos o kernel 2.4. Nós descobrimos que
        é essencial executar o processo mysqld com a
        mais alta prioridade possível no kernel 2.4 para obter
        performance máxima. Isto pode ser feito adicionando o comando
        renice -20 $$ ao
        mysqld_safe. Nos nossos testes em uma
        máquina com 4 processadores, o aumento da prioridade nos deu
        60% de aumento no throughput com 400 clientes.
      
        Atualmente estamos tentando coletar mais informações sobre
        como o MySQL atua no kernel 2.4 em sistemas
        com 4 e 8 processadores. Se você tem acesso a um sistema deste
        porte e tem feito alguns benchmarks, por favor envie um email
        para http://www.mysql.com/company/contact/ com os resultados -
        iremos incluí-los neste manual.
      
Existe outro detalhe que afeta muito a performance do MySQL, especialmente em sistemas multi processados. A implementação de mutex em LinuxThreads na glibc-2.1 é muito ruim para programas com várias threads que travam o mutex por um tempo curto. Em um sistema SMP, ironicamente, se você liga o MySQL com LinuxThreads sem modificações, removendo processadores da máquina, a performance do MySQL é melhorada em alguns casos. Para corrigir este comportamento, disponibilizamos um patch para glibc 2.1.3, em http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch
        Com a glibc-2.2.2, o MySQL
        versão 3.23.36 irá usar o mutex adaptativo, que é muito
        melhor,mesmo que o patch na
        glibc-2.1.3. Avisamos,
        entretando, que sobre algumas condições, o código mutex no
        glibc-2.2.2 overspins, que
        prejudica a performance do MySQL. A chance desta condição pode
        ser reduzida mudando a prioridade do processo
        mysqld para a prioridade mais alta. Nós
        também corrigimos o comportamento overspin com um patch,
        disponível em
        http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch.
        Ele combina a correção do overspin, número máximo de threads
        e espaçamento das pilhas em um único patch. Você precisará
        aplicá-lo no diretório linuxthreads com
        patch -p0 </tmp/linuxthreads-2.2.2.patch.
        Esperamos que seja incluído de alguma forma nos futuros
        lançamentos da glibc-2.2. De qualquer forma,
        se você ligar com glibc-2.2.2, ainda será
        necessário corrigir STACK_SIZE e
        PTHREAD_THREADS_MAX. Temos esperanças que os
        padrões serão corrigidos para valores mais aceitáveis para
        configurações pesadasa do MySQL no futuro, então sua
        construção poderá ser reduzida a ./configure; make;
        make install.
      
        Recomendamos que você use os patches acima para construir uma
        versão estática especial de libpthread.a e
        use-a somente para ligações estáticas com o
        MySQL. Sabemos que os patches são seguros
        para o MySQL e pode melhorar significamente
        sua performance, mas não podemos dizer nada sobre outras
        aplicações. Se você ligar outras aplicações coma a versão
        modificada da biblioteca ou construir uma versão alterada
        compartilhada e instalá-la no seu sistema, você estará
        fazendo por sua conta e risco e tenha atenção com outras
        aplicações que dependem de LinuxThreads.
      
Se você passar por problemas estranhos durante a instalação do MySQL ou com travamentos de alguns utilitários comuns, é muito provável que eles são relacionados a problemas de bibliotecas ou compilador. Se for este o caso, o uso de nosso binário será a solução.
        Um problema conhecido com a distribuição binária é que com
        antigos sistemas Linux que usam libc (como o
        RedHat 4.x ou Slackware), você obterá alguns problemas não
        fatais com resolução de nomes. See
        Secção 2.6.2.1, “Notas Linux para distribuições binárias”.
      
Quando estiver usando LinuxThreads você verá um mínimo de três processos em execução. Estes são de fato, threads. Existirá uma thread para o gerenciador LinuxThreads, uma thread para lidar com conexões e uma thread para tartar de alarmes e sinais.
Perceba que o kernel Linux e a biblioteca LinuxThread pode por padrão ter apenas 1024 threads. Isto significa que você pode ter até 1021 conexões ao MySQL em um sistema sem correção. A página http://www.volano.com/linuxnotes.html contém informações sobre como contornar este limite.
        Se você ver um processo mysqld daemon
        finalizado com ps, isto normalmente significa
        que você encontrou um bug no MySQL ou que tenha uma tabela
        corrompida. See Secção A.4.1, “O Que Fazer Se o MySQL Continua Falhando”.
      
        Para obter um descarga do core no Linux se o
        mysqld finalizar com um sinal SIGSEGV, você
        pode iniciar o mysqld com a opção
        --core-file. Perceba que provavelmente você
        também precisará aumentar o core file size
        adicionando ulimit -c 1000000 para
        mysqld_safe ou iniciar
        mysqld_safe com
        --core-file-sizes=1000000, See
        Secção 4.8.2, “mysqld-safe, o wrapper do mysqld”.
      
Se você estiver ligando seu próprio cliente MySQL e obter o erro:
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
Quando executá-los, o problema pode ser evitado com um dos seguintes métodos:
        Se você estiver usando o compilador Fujitsu (fcc /
        FCC) você terá alguns problemas compilando o MySQL
        porque os arquivos de cabeçalho Linux são muito orientados ao
        gcc.
      
        A seguinte linha configure deve funcionar com
        fcc/FCC:
      
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \ -DCONST=const -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib \ -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const \ -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \ '-D_EXTERN_INLINE=static __inline'" ./configure --prefix=/usr/local/mysql \ --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared \ --with-low-memory
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.

