Práticas recomendadas para discos permanentes de 16 KB e MySQL

Este documento descreve como usar o disco permanente com tamanho de bloco físico de 16 KB para aprimoramentos de desempenho em um banco de dados MySQL.

As grandes cargas de trabalho de gravação do MySQL normalmente se beneficiam quando o buffer InnoDB doublewrite é desativado. O InnoDB do MySQL executa gravação dupla durante o processo de limpeza de página suja, de modo que possa recuperar possíveis páginas interrompidas.

No entanto, se houver um caminho de gravação atômico de 16 KB completo para garantir que uma página de dados de 16 KB não seja parcialmente confirmada no disco ou na gravação interrompida, não é necessário executar gravação dupla. Quando a gravação dupla é desativada, o recurso de limpeza de página suja do banco de dados é duplicado. Isso reduz a frequência na qual o banco de dados cai em um estado de limpeza de sincronização, levando a um desempenho mais estável e possivelmente maior.

Antes de começar

Como criar um caminho de gravação atômico de 16 KB do banco de dados para o dispositivo de bloco

É possível criar um caminho de gravação atômico de 16 KB completo com base no banco de dados para o dispositivo de bloco utilizando um disco permanente de 16 KB. Assim, é possível desativar com segurança o recurso de gravação dupla no MySQL/InnoDB e conseguir um desempenho mais estável e melhor em uma carga com uso intenso de gravação.

Crie e conecte um disco permanente por meio do Console do Google Cloud Platform, da ferramenta gcloud ou da API.

  1. Crie um disco permanente de tamanho de bloco de 16 KB e conecte-o à sua VM. O disco permanente de 16 KB fornece uma atomicidade de gravação de 16 KB no nível do bloco físico.

    Embora seja opcional, é recomendável configurar sua instância do MySQL para armazenar arquivos de dados apenas no disco permanente de 16 KB. Armazene arquivos de registros, especialmente redo log e binlogs, em um disco permanente de 4 KB que esteja conectado à mesma VM. Isso garante que as gravações de arquivos de registro continuem sendo de alto desempenho, uma vez que as gravações de registro pequenas em um disco permanente de 16 KB podem acionar muitas gravações de modificação de leitura, que são mais lentas.

  2. Formate o disco de 16 KB usando o sistema de arquivos ext4 com a opção BigAlloc. Em seguida, defina o tamanho do cluster como 16 KB. Este é um exemplo do comando mkfs com a opção BigAlloc especificada:

    mkfs.ext4 -O bigalloc -C 16384 [...other options…]
    

    O uso de BigAlloc com 16 KB como tamanho de cluster garante que o sistema de arquivos aloque arquivos que se alinhem ao limite de 16 KB no disco.

  3. Ao criar a instância da VM, escolha uma imagem do SO da família de imagens do sistema operacional otimizado para contêiner do Google no projeto de nuvem cos.

    Use o comando gcloud para ver uma lista de todas as imagens cos disponíveis:

    gcloud compute images list --project cos-cloud --no-standard-images
    

    Selecione a versão 67 ou posterior. Para ter resultados melhores, escolha uma imagem da família cos-stable.

    A escolha de uma imagem cos garante que as gravações não sejam divididas incorretamente no limite de 16 KB por camadas entre o sistema de arquivos e a camada de dispositivo de bloco físico. O processo de qualificação da imagem cos tem testes integrados para garantir esse resultado.

  4. Certifique-se de que max_segments e max_sectors_kb estejam configurados corretamente no sistema operacional:

    max_segments >= max_sectors_kb/4
    

    Essas duas variáveis já estão configuradas em todas as VMs do Compute Engine. Se você não tiver um script que altere essas duas variáveis após a criação da VM, não precisará fazer nada nesta etapa.

    É possível consultar estas duas constantes no sistema operacional neste caminho:

    /sys/block/sd<drive letter>/queue/
    
  5. Configure noop ou none como o programador de E/S do disco permanente de 16 KB.

    echo "none" > /sys/block/sd<drive_letter>/queue/scheduler
    
  6. Desative as solicitações de E/S que se fundem no kernel do disco permanente de 16 KB.

    echo 2 > /sys/block/sd<drive_letter>/queue/nomerges
    
  7. Configure InnoDB para usar O_DIRECT. Defina (ou inclua) O_DIRECT na configuração do banco de dados innodb_flush_method.

Agora, é possível desativar com segurança a opção innodb_doublewrite.

Esse método não é a única abordagem possível para garantir gravações atômicas de 16 KB completas usando um dispositivo de bloco de 16 KB. Por exemplo, se você configurar seu banco de dados para usar o dispositivo de bloco diretamente como um dispositivo bruto sem usar um sistema de arquivos, poderá pular as etapas acima que descrevem como configurar o sistema de arquivos.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine