tamanho do bloco MySQL InnoDB ext3

2

Eu estou procurando recomendações para o tamanho do bloco do sistema de arquivos ext3 para o MySQL 5.6 usando InnoDB.

Execução de uma VM do CentOS 5.4 no VMware ESXi 5, datastore do VMFS 5 nos NetApp FibreChannel LUNs (que têm 4k de tamanho de bloco). Usando O_DIRECT, innodb_flush_log_at_trx_commit = 2, buffer pool 14G e o db faz OLTP com algumas consultas grandes ocasionais processando muitos dados. Algumas tabelas são várias GB ou mais, outras muito pequenas. Os arquivos table e ibdata estão em um sistema de arquivos, binlogs e ib_logfiles em outro, para que possam ter diferentes tamanhos de bloco.

Eu entendo que o InnoDB usa 16k de tamanho de bloco, o que não é configurável pelo usuário, então estou querendo saber se vale a pena definir o tamanho do bloco ext3 para corresponder, em vez do padrão 4k.

obrigado!

    
por carillonator 04.06.2012 / 20:37

2 respostas

4

O tamanho do bloco do sistema de arquivos não deve ter um impacto ruim no InnoDB. Eu não estou falando sobre pequenos pedaços de desempenho de cpu, uma vez que a sobrecarga do sistema de arquivos para ele é muito pequena. O que você deve se preocupar é o desempenho do IO.

Quando o mysql precisa ler a página InnodDB dos discos, ele acessa a estrutura do inode para o arquivo. ext3 inode contém referências a 15 blocos. Primeiros 12 pontos para blocos de dados diretamente. O resto 3 aponta para blocos, contendo outras referências de blocos, que também podem ser diretos ou indiretos.

Portanto, se a página InnoDB for colocada em primeiro lugar (12 * 4) = 48KB do arquivo - ela será buscada em 2 operações IO: 1 para inode, segunda para bloco de dados, se colocar na primeira (12 * 4 + 1024 ) * 4 = 4.2MB em 3 ops, (12 + 1024 + 1024 ^ 2) * 4 = 4GB - 4 ops, (12 * bs + 1024 + 1024 ^ 2 + 1024 ^ 3) * 4 = 4TB - 5 ops.

1024 é o número de referência de bloco de 4 bytes no bloco de 4k.

Readahead (pré-alocação para gravações) e cache reduzirão essa contagem, permitindo ler / gravar vários blocos de uma só vez.

O tamanho do bloco de 4k é o mesmo que o tamanho da página de memória do Linux, tornando o cache de página mais fácil de codificar.

Quando a página Innodb for escrita pela primeira vez, o ext3 pré-aloca 8 blocos sequenciais (32kb) e grava 4 deles, outros 4 serão descartados (ou usados para mais uma página). Todas as alterações nesta página serão armazenadas nos mesmos blocos.

A redução do tamanho do bloco só traz benefícios ao economizar espaço em disco, já que 1 bloco é uma unidade mínima de dados para armazenar em disco.

Aumentá-lo (há alguns patches de kernel para fazer isso) irá melhorar o desempenho de arquivos muito grandes, mas não tanto, como você pode pensar. A correspondência com o tamanho da página InnoDB não faz sentido, já que na grande maioria dos casos os blocos de dados para uma página InnoDB serão colocados sequencialmente no disco e serão lidos / gravados em uma única operação.

    
por 05.06.2012 / 13:44
1

Nevermind, os únicos tamanhos de bloco disponíveis para ext2 / 3 parecem ser 1K, 2K, 4K.

da página do manual mke3fs (8) :

       -b block-size
          Specify  the  size  of  blocks in bytes.  Valid block size vales are 1024, 2048 and 4096 bytes per block.
    
por 04.06.2012 / 20:49