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

Por que o mysql pula alguns ids de incremento automático?


É um exemplo de bloqueio de incremento automático no InnoDB:Como você está executando 2 instruções simultaneamente na mesma sessão:o bloqueio de inc automático é obtido pela primeira consulta e a geração de valor de incremento automático não é intercalada entre as instruções - esse é o ponto inteiro de transação.

Isso sempre acontecerá por design:Se não, a maneira como as transações no InnoDB funcionam, bem, não funcionaria. A escalabilidade sob cargas do tipo OLTP seria horrível, pois cada inserção teria que esperar que todas as outras inserções terminassem, fossem confirmadas ou pior - revertidas.

Ou seja:Se sua primeira inserção for 5x mais longa que a segunda, e falhar e for revertida, a segunda ainda será concluída e confirmada. Caso contrário, você teria que esperar por ea. consulta seja completada após a outra.

Se você precisar de IDs sequenciais e absolutamente exclusivos, extraia-os de outra fonte. As colunas AutoInc simplesmente garantem um valor único - não necessariamente uma monossequência - que é um ponto de serialização e um gargalo.

Uma maneira de contornar isso, se necessário:

defina innodb_autoinc_lock_mode = 0 no seu my.cnf/mysql.ini

Descrição de bloqueio automático no InnoDB e Opções