A lista abaixo indica algumas das maneiras inas quais o servidor
        mysqld utiliza a memória. Onde aplicável, o
        nome da variável do servidor relevante ao uso de memória é
        fornecido:
      
            O buffer de chave (variável
            key_buffer_size) é compartilhado por
            todas as threads; Outros buffers usados pelo servido são
            alocados quando necessários. See
            Secção 5.5.2, “Parâmetros de Sintonia do Servidor”.
          
            Cada conexão utiliza algum espaço específico da thread:
            Uma de pilha (padrão de 64K, variável
            thread_stack), um buffer de conexão
            (variável net_buffer_lenght), e um
            buffer de resultados (variável
            net_buffer_lenght). Os buffers de
            conexões e resultados são aumentados dinamicamente para
            max_allowed_packet quando necessário.
            Quando uma consulta está sendo executada, uma cópia da
            string da consulta atual é também alocada.
          
Todas as threads compartilhas a mesma memória base.
            Somente as tabelas ISAM e
            MyISAM compactadas são mapeadas em
            memória. Isto é porque o espaço de memória de 32-bits de
            4GB não é grande o bastante para a maioria das grandes
            tabelas. Quando sistemas com endereçamento de 64-bits se
            tornarem comuns poderemos adicionar um suporte gieral para o
            mapeamento de memória.
          
            Cada requisição fazendo uma varredura sequencial em uma
            tabela aloca um buffer de leitura (variável
            read_buffer_size).
          
            Ao ler registros na ordem ``randômica'' (por exemplo,
            depois de uma ordenação) um buffer de leitura randômico
            é alocado para evitar pesquisas em disco. (variável
            read_rnd_buffer_size).
          
            Todas as joins são feitas em um único passo, e a maioria
            delas podem ser feitas mesmo sem usar uma tabela
            temporária. A maioria das tabelas temporárias são tabelas
            baseadas em memória (HEAP). Tabelas temporárias com uma
            grande extensão de registros (calculada como a soma do
            tamanho de todas as colunas) ou que contenham colunas
            BLOB são armazenadas em disco.
          
            Um problema nas versões do MySQL anteriores a 3.23.2 é que
            se uma tabela HEAP excede o tamanho de
            tmp_table_size, você recebe o erro
            The table nome_tabela is full. A partir
            da versão 3.23.2, isto é tratado alterando automaticamente
            a tabela em memória HEAP para uma tabela
            baseada em disco MyISAM quando
            necessário. Para contornar este problema, você pode
            aumentar o tamanho da tabela temporária configurando a
            opção tmp_table_size do
            mysqld, ou configurando a opção do SQL
            SQL_BIG_TABLES no progrma cliente. See
            Secção 5.5.6, “Sintaxe de SET”. Na versão 3.20 do MySQL, o
            número máximo da tabela temporária é
            record_buffer*16; se você estiver
            utilizando esta versão, você terá que aumentar o valor
            record_buffer. Você também pode iniciar
            o mysqld com a opção
            --big-tables para sempre armazenar as
            tabelas temporárias em disco. Entretanto isto afetará a
            velocidade de várias consultas complicadas.
          
A maioria das requisições que realizam ordenação alocam um bufer de ordenação e 0-2 arquivos temporários dependendo do tamanho do resultado. See Secção A.4.4, “Onde o MySQL Armazena Arquivos Temporários”.
            Quase todas as análises e cálculos são feitos em um
            armazenamento de memória local. Nenhuma sobrecarga de
            memória é necessário para ítens pequenos e a alocação
            e liberação normal de memória lenta é evitada. A
            memória é alocada somente para grandes strings
            inesperadas; isto é feito com malloc() e
            free().
          
            Cada arquivo de índice é aberto uma vez e o arquivo de
            dados é aberto uma vez para cada thread concorrente. Uma
            estrutura de tabela, estrutura de coluna para cada coluna e
            um buffer de tamanho 3 * n é alocado
            para cada thread concorrente. (onde n é
            o maior tamanho do registro, sem levar em consideração
            colunas BLOB. Uma coluna
            BLOB utiliza de 5 a 8 bytes mais o
            tamanho dos dados contidos na mesma. O manipulador de
            tabelas ISAM/MyISAM
            irão usar um registro extra no buffer para uso interno.
          
            Para cada tabela com colunas BLOB, um
            buffer é aumentado dinamicamente para ler grandes valores
            BLOB. Se você ler uma tabela, um buffer
            do tamanho do maior registro BLOB é
            alocado.
          
Estruturas de manipulacão para todas tabelas em uso são salvos em um cache e gerenciado como FIFO. Normalmente o cache possui 64 entradas. Se uma tabela foi usada por duas threads ao mesmo tempo, o cache terá duas entredas para a tabela. See Secção 5.4.7, “Como o MySQL Abre e Fecha as Tabelas”.
            Um comando mysqladmin flush-tables fecha
            (ou instruções FLUSH TABLES) todas
            tabelas que não estão em uso e marca todas tabelas em uso
            para serem fechadas quando a thread atualmente em execução
            terminar. Isto irá liberar efetivamente a maioria da
            memória em uso.
          
        ps e outros programas de informações do
        sistema podem relatar que o mysqld usa muita
        memória. Isto pode ser causado pelas pilhas de threads em
        diferentes endereços de memória. Por exemplo, a versão do
        ps do Solaris conta a memória não usada
        entre as pilhas como memória usada. Você pode verificar isto
        conferindo a memória disponível com swap
        -s. Temos testado o mysqld com
        detectores comerciais de perda de memória, portanto tais perdas
        não devem existir.
      
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.

