Qual é o melhor sistema de arquivos Linux para MySQL (InnoDB)?

47

Eu tentei procurar benchmark nas performances de vários sistemas de arquivos com o MySQL InnoDB, mas não consegui encontrar nenhum.

Minha carga de trabalho de banco de dados é o típico OLTP baseado na Web, cerca de 90% de leitura, 10% de gravação. IO aleatório.

Entre sistemas de arquivos populares como ext3, ext4, xfs, jfs, Reiserfs, Reiser4, etc. qual você acha que é melhor para o MySQL?

    
por Continuation 20.06.2009 / 21:06

7 respostas

43

Quanto você valoriza os dados?

Sério, cada sistema de arquivos tem suas próprias compensações. Antes de ir muito além, sou um grande fã do XFS e do Reiser, embora eu frequentemente execute o Ext3. Portanto, não há um viés de sistema de arquivos real em funcionamento aqui, apenas informando ...

Se o sistema de arquivos é pouco mais que um container para você, então vá com o que lhe der os melhores tempos de acesso.

Se os dados tiverem algum valor significativo, você desejará evitar o XFS. Por quê? Porque se ele não puder recuperar uma parte de um arquivo que está em diário desa zerar os blocos e tornar os dados não recuperáveis. Este problema é corrigido no Linux Kernel 2.6.22 .

O ReiserFS é um ótimo sistema de arquivos, desde que nunca quebre com força . A recuperação da revista funciona bem, mas se por algum motivo você perder suas informações de parição, ou se os blocos centrais do sistema de arquivos ficarem explodidos, você pode ter um quandry se houver várias partições ReiserFS em um disco - porque o mecanismo de recuperação é basicamente > faz a varredura de todo o disco, setor por setor, procurando o que "pensa" é o início do sistema de arquivos . Se você tem três partições com o ReiserFS, mas apenas uma é queimada, você pode imaginar o caos que isso causará quando o processo de recuperação juntar uma bagunça de Frankenstein dos outros dois sistemas ...

Ext3 é "lento", em "Eu tenho 32.000 arquivos e leva tempo para encontrá-los todos executando ls ". Se você vai ter milhares de pequenas mesas temporárias em todos os lugares, você terá um pouquinho de luto. Agora, as versões mais recentes incluem uma opção de índice que reduz drasticamente a passagem de diretórios, mas ainda pode ser dolorosa.

Eu nunca usei o JFS. Eu só posso comentar que cada revisão que eu já li foi algo ao longo das linhas de "sólido, mas não o garoto mais rápido no bloco". Pode merecer investigação.

Chega dos contras, vamos ver os profissionais:

XFS:

  • grita com arquivos enormes, tempo de recuperação rápido
  • pesquisa de diretório muito rápida
  • Primitivos para congelar e descongelar o sistema de arquivos para despejo

ReiserFS:

  • Acesso a arquivos pequenos altamente ideal
  • Agrupa vários arquivos pequenos nos mesmos blocos, conservando o espaço do sistema de arquivos
  • recuperação rápida, rivais tempos de recuperação de XFS

Ext3:

  • Experimentado e verdadeiro, com base em código Ext2 bem testado
  • Muitas ferramentas para trabalhar com ele
  • Pode ser re-montado como Ext2 em uma pitada para recuperação
  • Pode ser reduzido e expandido (outros sistemas de arquivos só podem ser expandidos)
  • As versões mais recentes podem ser expandidas "ao vivo" (se você é ousado)

Então você vê, cada um tem suas próprias peculiaridades. A questão é, qual é o menos peculiar para você?

    
por 22.06.2009 / 07:54
12

Também pode ser interessante notar que você pode executar o InnoDB sem um sistema de arquivos e melhorar o desempenho sem sobrecarga do sistema de arquivos. Não tenho certeza se recomendaria, mas já usei antes sem problemas.

InnoDB Raw Devices

Além disso, se você estiver rodando com 90% de leituras e 10% de gravações, a menos que você precise da capacidade transacional do InnoDB, você pode procurar portar para o MyISAM para melhor desempenho de leitura.

    
por 06.10.2009 / 19:53
10

As respostas aqui estão seriamente obsoletas e precisam ser atualizadas, já que isso está chegando nos resultados do Google.

Para ambientes de produção, XFS. Toda vez. O XFS é registrado em diário e não bloqueia. Certifique-se de ter as seguintes variáveis para um banco de dados MySQL moderno (2011/2012) usando o InnoDB em produção:

innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1 # an ACID requirement
sync_binlog = 1 # more ACID
innodb_flush_method = O_DIRECT

Não use EXT3 nem EXT4. Um dia, o BTRFS chegará lá.

EXT3, e talvez EXT4, bloqueia no nível do inode, não é inteligente!

Fontes:  - www.mysqlperformanceblog.com  - link  - Entendendo o MySQL Internals por Sasha Pachev  - link  - link  - Algum kit de swing, tentativa e erro.

EDIT: uma atualização. EXT4 parece estar indo muito bem a partir de meados de 2013! O BTRFS ainda não é uma boa opção. E o RHEL pode tornar o XFS o novo sistema de arquivos padrão. Novamente, NÃO use o EXT3.

    
por 12.12.2012 / 09:56
8

A versão curta é que o mais próximo de uma recomendação que o MySQL fez nos sistemas de arquivos é o XFS, mas o ext3 também deve ser bom, o ext4 promete ser uma boa melhoria, mas ainda não é estável, embora deva ser ser antes do final do ano.

Se você estiver executando sistemas de arquivos em cluster, CXFS, OCFS2 e GFS devem estar todos ok.

Eu gostaria strongmente de avisar contra quaisquer derivativos do Reiser, e o JFS, embora uma vez tenha sido muito bem batido pelo XFS e pelo ext4, que são ambos mais amplamente implementados.

    
por 21.06.2009 / 12:35
6

Não é provável que faça muita diferença. Vá com o que sua distribuição usa como padrão, desde que seja suficiente.

Gaste seu esforço ajustando outras coisas - obtenha RAM suficiente - obtenha um controlador de raid que não sugue - e corrija o uso do banco de dados (NB: este é o principal culpado na maioria dos casos em que não já foi feito).

Considere, no entanto, cuidadosamente, o sistema de arquivos no qual você coloca o seu mysql tmpdir; isto afetará o desempenho, particularmente as consultas que fazem o filesort () s baseado em disco (veja EXPLAIN para mais detalhes).

Eu acho que um sistema de arquivos que suporta alocação atrasada é realmente útil aqui, já que você pode evitar o IO completamente para arquivos de vida curta quando houver memória RAM suficiente para mantê-los no cache. O XFS, por exemplo, não se incomoda em escrever arquivos que são excluídos e fechados antes de serem alocados.

Claro que colocar um tmpdir em um tmpfs é atraente do ponto de vista do desempenho, mas leva a um risco de esgotar o espaço e ter consultas que, de outra forma, seriam bem sucedidas (embora com arquivos temporários de disco usados) falham.

    
por 21.06.2009 / 13:09
4

Eu não estou encontrando nenhum artigo recente com "roundups" de benchmark no MySQL rodando em vários sistemas de arquivos. Dada a carga de trabalho que você descreve, duvido que a fragmentação no nível do arquivo seja um grande problema. Sem um benchmark formal, não posso dizer nada que você deva tomar como autoritativo, mas meu instinto diz que todo sistema de arquivos que você mencionou acima será executado aproximadamente no mesmo estádio (ou seja, todos na mesma ordem de grandeza para números de desempenho) .

O banco de dados está realmente executando o programa, já que o sistema de arquivos está apenas gerenciando grandes extensões que o mecanismo de armazenamento está acessando.

Ainda assim, seria interessante fazer um resumo de desempenho com todos esses sistemas de arquivos. (Eu tenho menos do que nenhum entusiasmo pelo MySQL, então, eu não vou me comprometer. Benchmarking Postgres, OTOH, pode ser interessante ...)

    
por 20.06.2009 / 21:26
2

IMHO os FSs dignos de nota disponíveis para o Linux são:

XFS (baixa velocidade de leitura), conhecido por ser leve nos recursos do sistema e rápido com arquivos grandes, mas ruim para lidar com muitos arquivos pequenos.

ReiserFS (baixa velocidade de gravação) não é muito bom em recursos do sistema, mas funciona muito bem com muitos arquivos pequenos.

EXT3 cai no meio, tendo um desempenho aceitável em todos os campos (a razão pela qual é considerado o default linux FS).

Eu ainda não usei o EXT4, não o ReiserFS4, mas olhei em torno de alguns benchmarks e o ReiserFS parece ter o melhor desempenho quando se trata de velocidade de leitura, o que você disse ser o mais importante para você.

Veja isto: ReserFS4 X Ext4 X Ext3

Eu recomendaria o Ext3 por sua estabilidade, segurança e maturidade, mas se a velocidade de leitura é o mais importante para você, você deve considerar o ReiserFS.

Lembre-se de que você também deve considerar o uso da CPU, a estabilidade e a segurança antes de escolher um FS.

E, claro, criar um piloto, testá-lo e compará-lo em seu ambiente específico é sempre a melhor maneira de saber o que funcionará melhor para você.

PS: Eu teria postado mais referências, mas não posso postar mais de um link.

    
por 21.06.2009 / 21:47