Acelerar as inserções do MySQL com partições no MyISAM com chave exclusiva

9

Eu tenho uma grande tabela MyISAM (~ 30M linhas). Em algum momento eu mudei para o formato de linha fixa, então agora a tabela leva ~ 40GB no disco e 2GB para os índices. A tabela tem um índice exclusivo e há 100 consultas de inserção em atualização de chave duplicada por segundo. À medida que a tabela cresce, essas inserções ficam cada vez mais lentas.

Não tenho certeza, mas as partições me ajudarão a acelerar as inserções?

    
por d0rc 18.08.2011 / 16:55

2 respostas

1

Em primeiro lugar, as gravações simultâneas definitivamente não são uma opção para o armazenamento MyISAM. Cada um deles irá bloquear uma tabela inteira (exceto para leitura em alguns casos). Se o InnoDB não combina com você, tente o TokuDB. Mas será mais lento se comparado ao MyISAM devido à natureza transacional do mecanismo TokuDB (e InnoDB, é claro) (você deve gravar os mesmos dados pelo menos duas vezes: arquivos de diário e de dados). Além disso, se o seu servidor travar algum dia, você estará esperando por horas até que seus reparos de tabela MyISAM 40Gb.

Se você ainda quiser carregar dados em suas tabelas MyISAM e quiser fazê-lo rapidamente, recomendo usar LOAD DATA INFILE em vez de inserções. Essa é a maneira mais rápida de carregar grandes volumes de dados na tabela. E sim, os índices retardarão o desempenho da inserção de maneira exponencial.

Uma palavra sobre partições: instruções INSERT no MySQL não suportam a remoção, então todas as suas partições serão escaneadas em cada instrução para uma correspondência de índice única. Além disso, todas as partições serão bloqueadas até o final da inserção.

    
por 17.02.2017 / 19:05
0

Essas consultas de inserções são concorrentes ou originadas do mesmo processo? Se eles são concorrentes, é melhor usar o armazenamento InnoDB para esta tabela, porque o MyISAM bloqueia a tabela inteira e o InnoDB utiliza bloqueios de linha. Se a mudança para outro armazenamento não for uma opção, você pode tentar a instrução INSERT DELAYED e várias outras otimizações de inserção . O particionamento não ajudará, a menos que você coloque diferentes partições em diferentes discos físicos.

    
por 18.08.2011 / 19:19