Fragmentação é um efeito colateral inevitável de um sistema de arquivos sendo projetado com copy-on-write. É também o que permite os instantâneos do sistema de arquivos quase livres.
A razão para isso é bastante simples: toda vez que um bloco é alterado, o novo bloco deve ser gravado em algum local diferente daquele do bloco original. Portanto, mesmo que o arquivo fosse contíguo originalmente, não será depois de modificado.
Não sei como o Btrfs nodatacow
interage com os instantâneos, mas tenho a sensação de que, no instante em que você tem um instantâneo em um conjunto de dados, você força pelo menos um comportamento parcial de cópia na gravação, independentemente de quais bandeiras usando; caso contrário, como você seria capaz de acessar os dados antigos através do instantâneo?
No entanto, não é um dado que isso necessariamente afetará severamente seu desempenho no MySQL, por dois motivos:
- Discos modernos são realmente muito rápidos para cargas de trabalho de usuário único (o que eu acho que você está mais interessado porque você mencionou que seu sistema é uma "estação de trabalho")
- Os sistemas operacionais modernos possuem algoritmos de cache muito bons, reduzindo, assim, a necessidade de realmente atingir o armazenamento físico
Só para você ter uma ideia, eu mesmo estou executando o ZFS (do qual o Btrfs empresta muitas ideias), e atualmente há um scrub em andamento. O pool em questão é um raidz2 de seis discos, que não é realmente conhecido por seu desempenho estelar, apoiado fisicamente por seis discos de 7200 rpm (dois SATA, quatro SAS) que também não são exatamente conhecidos por IOPS estelares em particular. Um scrub do ZFS navega por toda a árvore Merkle em disco, lê todos os dados e verifica somas de verificação em tudo para garantir que tudo seja lido como foi gravado anteriormente; no meu caso, computando SHA-256 hashes de tudo ao longo do caminho. A velocidade de scrub atual (depois que passou da parte inicial, pesada de metadados, que envolve busca pesada) está pairando em torno de 200 MB / s e, na verdade, subindo lentamente. E isso é para E / S real em platter , sem o cache envolvido (porque o cache não faz sentido quando você quer verificar o que está no armazenamento persistente).
Claro, é muito provável que você veja alguma degradação de desempenho da fragmentação se mudar para um sistema de arquivos copy-on-write. Mas você não pode comer o bolo e guardá-lo também; Se rápido, instantâneos de baixo custo é algo que você quer, é provável que você vai ter que desistir de algo mais para obtê-los.
O que eu faria no seu caso é benchmark. Configure algum armazenamento Btrfs, coloque uma cópia do banco de dados MySQL lá e veja como os dois funcionam sob cargas de trabalho razoáveis.