O processo servidor MySQL utiliza estruturas de dados que o servidor configura para gerenciar a comunicação com os clientes e para processar o conteúdo de bancos de dados. O servidor aloca memória para muitos tipos de informações como segue:

  • Thread handlers. O servidor é multi-thread, e uma thread (tópico) é como se fosse um pequeno processo executando dentro do processo servidor. Para cada cliente que se conecta, o processo servidor aloca uma nova thread para lidar com a conexão. Por razões de performance, o servidor mantém um pequeno cache de manipuladores de threads. Se o cache não estiver cheio quando um cliente desconecta, a thread é colocada em cache para reutilização posterior. Se o cache não estiver vazio quando um cliente conecta, uma thread do cache é reutilizada para manipular a conexão. A reutilização de threads evita a sobrecarga de repetidos setups de conexões e desconexões. As threads também podem ser criadas para outros propósitos. Mecanismos de armazenamentos individuais podem criar suas próprias threads. Replicações também utilizam threads.
  • O servidor utiliza vários buffers (caches) para guardar informações na memória com o intuito de evitar o acesso a disco desnecessário quando possível:
    • Grant table buffers. As tabelas de grant guardam informações sobres as contas de usuários MySQL e seus privilégios. O processo servidor carrega em memória uma cópia da tabela de grants para rápida checagem de acesso/controle. O acesso do cliente é checada para cada query, ou seja, buscando informações de grant em memória na tabela de grants em cache é muito mais rápido que buscar informações em disco.
    • Um key buffer mantém os blocos de índices para as tabelas MyISAM. Mantendo os blocos de índices na memória, o servidor evita a leitura repetida do conteúdo dos índices em disco para operações/consultas que utilizem o índice ou operações de sort.

Em contraste com a manipulação de dos índices MyISAM, não existe buffers específicos para cache de dados de tabelas MyISAM pois o MySQL depende do sistema operacional para fornecer cache eficienteao ler dados de tabelas.

    • O cache de tabelas contém descritores para tabelas abertas. Para tabelas que são frequentemente utilizadas manter o descritor em cache evita ter que ficar abrindo as tabelas novamente.
    • O servidor suporta um cache para queryes que aumenta a velocidade do processamento de consultas que são executados repetidamente.
    • O cache do host armazena o resultado da resolução de hostname. Esses resultados são mantidos em cache para minimizar o número de chamadas para o resolvedor do hostname.
    • O mecanismo de armazenamento InnoDB loga informações sobre as transações correntes num buffer de memória. Quando a transação é comitada, o log de buffer é armazenado dentro dos arquivos de log InnoDB, provendo uma informação em disco que pode ser utilizada para re-comitar a transação em caso de queda do processo servidor. Se ao invés disso a transação sofrer um rollback, o flush para disco não precisa ser feito.
  • O mecanismo de armazenamento MEMORY cria tabelas que são mantidas em memória. Estas tabelas são muito rápidas, porque nenhuma transferência entre disco e memória precisa ser feita para acessar seus conteúdos.
  • O processo servidor pode criar tabelas internas temporariamente em memória durante o processamento de uma consulta. Se o tamanho de tal tabela exceder o valor da variável de sistem tmp_table_size, o servidor converte para uma tabela em disco MyISAM, e incrementa a variável de status Created_tmp_disk_tables.
  • O servidor mantém diversos buffers para cada conexão de cliente. Um é utilizado como buffer de comunicação para troca de informações com o cliente. Outros buffers são mantido, por cliente, para leitura de tabelas e efetuar operações de join e sorts.

Diversos comandos SHOW permitem que sejam checados os tamanhos de vários parâmetros de memória. SHOW VARIABLES mostram variáveis de sistema do servidor, para que seja possível verificar como o servidor está configurado. SHOW STATUS mostra as variáveis de status. Os indicadores de status permitem que sejam verificados os estados de execução de caches, o que pode ser útil para avaliar a eficácia com que estão sendo usados e para determinar se você teria melhor performance por usar maiores (ou em alguns casos menores) buffers.

A memória do servidor pode ser tunada setando os tamanhos de buffer utilizando as opções via linha de comando ou num arquivo de opções (option file) que o processo servidor lê em cada startup.