Este tópico já foi discutido aqui: Entendendo tamanhos de bloco Mas tenho mais algumas coisas a acrescentar para meu caso de uso.
Geralmente, a maioria database systems
usa um padrão block size
de 8 KB
, embora alguns permitam que ele seja modificado. Por outro lado, os modernos operating systems
geralmente usam um 4 KB
tamanho de bloco para file systems
. Essa discrepância pode resultar em várias physical I/O
solicitações para preencher um único database page
.
Um tamanho de bloco de sistema de arquivo menor beneficia random reads
, como index lookups
, enquanto tamanhos de bloco maiores são vantajosos para sequential scans
e heap fetches
. Considerando esses pontos, tenho algumas perguntas:
- Existe uma prática comum para alinhar o tamanho do bloco do banco de dados com o tamanho do bloco do sistema de arquivos para OLTP?
- Em um
clustered system
(por exemplo,SQL Server Availability Groups
ouPostgreSQL streaming replication
) com um primário e um ou mais secundários, é aceitável ter tamanhos de bloco de sistema de arquivos diferentes ou isso é algo que deve ser sempre evitado? - Para
analytical databases
oucolumnar tables
, é benéfico usar um tamanho de bloco maior?
Na verdade, não. O melhor tamanho de bloco do sistema de arquivos dependerá de muitos outros fatores, como os tamanhos de faixa (ou similares com base na tecnologia), localização (você pode não saber realmente qual armazenamento remoto está usando nos bastidores), drivers, sistema de arquivos e, então, a carga de trabalho real do ambiente, que é a parte mais importante.
Não ajuda, por exemplo, ver um tamanho de bloco de 8k para uma unidade de alocação de 8k para um sistema de banco de dados apenas para ter a maioria/toda a E/S real sendo feita em unidades de 256 KB. O gráfico para tamanho de bloco vs IOPs é geralmente inversamente proporcional, o que significa que conforme o tamanho do bloco aumenta, a quantidade de IOPs diminui enquanto a taxa de transferência geral aumenta.
O ideal é que tudo seja a mesma cópia carbono um do outro. Você pode executá-lo sem ser exatamente o mesmo, mas dependendo do seu SO/DBMS isso pode causar problemas de desempenho imprevistos. Por exemplo, se o sistema estiver fazendo replicação física em um nível de bloco, mas um bloco em um sistema tem 512 bytes, mas um bloco em outro sistema tem 16kb (observe que isso é no nível de hardware). Ter tamanhos de bloco de sistema de arquivos diferentes geralmente funciona, com as mesmas ressalvas.
Depende do perfil geral de IO que é criado pelo uso dos recursos. Recursos diferentes funcionam de maneiras diferentes. É melhor obter um rastreamento ETW para o perfil de IO para seu DBMS para entender quais tamanhos e tipos de IO (síncrono/assíncrono) ele prefere para esse recurso/carga de trabalho.