Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL otimizando a velocidade de INSERT sendo desacelerada por causa de índices


Se você deseja inserções rápidas, a primeira coisa que você precisa é de hardware adequado. Isso pressupõe uma quantidade suficiente de RAM, um SSD em vez de unidades mecânicas e uma CPU bastante poderosa.

Como você usa o InnoDB, o que você deseja é otimizá-lo, pois a configuração padrão é projetada para máquinas lentas e antigas.

Aqui está uma ótima leitura sobre como configurar o InnoDB

Depois disso, você precisa saber uma coisa - e é como os bancos de dados fazem suas coisas internamente, como os discos rígidos funcionam e assim por diante. Vou simplificar o mecanismo na seguinte descrição:

Uma transação é o MySQL esperando que o disco rígido confirme que gravou os dados. É por isso que as transações são lentas em drives mecânicos, eles podem fazer 200-400 operações de entrada-saída por segundo. Traduzido, isso significa que você pode obter 200 consultas de inserção por segundo usando o InnoDB em uma unidade mecânica. Naturalmente, esta é uma explicação simplificada , apenas para descrever o que está acontecendo, não é o mecanismo completo por trás da transação .

Como uma consulta, especialmente aquela correspondente ao tamanho de sua tabela, é relativamente pequena em termos de bytes - você está efetivamente desperdiçando IOPS preciosos em uma única consulta.

Se você agrupar várias consultas (100 ou 200 ou mais, não há um número exato, você precisa testar) em uma única transação e depois confirmá-la - você obterá instantaneamente mais gravações por segundo.

Os caras da Percona estão conseguindo 15k inserções por segundo em um hardware relativamente barato. Mesmo 5k inserções por segundo não é ruim. A tabela como a sua é pequena, fiz testes em uma tabela semelhante (3 colunas a mais) e consegui chegar a 1 bilhão de registros sem problemas perceptíveis, usando máquina de 16gb de ram com um SSD de 240GB (1 drive, sem RAID, usado para fins de teste).

TL;DR:- siga o link acima, configure seu servidor, obtenha um SSD, envolva várias inserções em 1 transação e lucre. E não desative e ative a indexação, nem sempre é aplicável, porque em algum momento você gastará tempo de processamento e E/S para construí-los.