Maison  >  Article  >  base de données  >  Comment résoudre le problème de performances de l'insertion ignorée dans mysql8.x

Comment résoudre le problème de performances de l'insertion ignorée dans mysql8.x

PHPz
PHPzavant
2023-06-03 11:25:112825parcourir

Insérer ignorer les problèmes de performances dans MySQL 8.x

L'efficacité du remplacement dans MySQL est très faible. Si plusieurs processus sont utilisés simultanément, la table sera verrouillée, donc la copie doit être utilisée pour les mises à jour. Je ne m'attendais pas à ce que même si j'utilise l'opération d'insertion ignorée, je puisse rencontrer des problèmes de performances. Je souhaite enregistrer ce problème que j'ai rencontré.

Afin d'insérer des données d'initialisation dans une table, j'ai ouvert 10 processus pour insérer simultanément des données dans la base de données en utilisant insert ignore. Chaque instruction insert ignore contient 7 lignes de données. De manière inattendue, après s'être connecté et avoir commencé à exécuter le script, de nombreuses tables de verrouillage sont apparues dans la base de données. À en juger par le journal d'état d'Innodb, ce qui est verrouillé est la clé primaire de l'ID à incrémentation automatique de la table.

Après un long débogage, j'ai découvert qu'il s'avère que lors de l'insertion ignorée, le verrou S sera utilisé pour chaque ligne de données insérées afin de détecter l'identifiant unique en même temps, le champ d'identification à incrémentation automatique de. la clé primaire sera ajoutée avec un verrou d'intention (insertion d'intension). Dans l'unique Lorsque la clé est plus complexe, le verrou d'intention d'insertion de la clé primaire sera toujours occupé lors de la détection de la clé unique. Les autres insertions ignorent également l'ajout. l'intention d'insertion se verrouille sur l'ID de clé primaire, ce qui entraîne un blocage.

La situation ci-dessus a été découverte dans MySQL 8.x. Il semble que je n'ai jamais rencontré de problèmes liés aux versions inférieures de MySQL auparavant, donc je ne sais pas s'il y a des pièges dans l'insertion ignorée des versions inférieures de MySQL, mais la version 8.x est préférable d'insérer ignorer N'insérez pas plusieurs lignes de données, surtout lorsque la clé unique est plus complexe (composée de trois ou quatre champs)

mysql insert ignore() function

Instruction INSERT IGNORE

Quand vous utilisez cette instruction INSERT pour ajouter à une table comportant plusieurs lignes, si une erreur se produit pendant le traitement, MySQL termine l'instruction et renvoie une erreur. Par conséquent, aucune ligne n’est insérée dans le tableau.

Cependant, si vous utilisez l'instruction insert ignore, les lignes contenant des données non valides à l'origine de l'erreur seront ignorées et les lignes contenant des données valides seront insérées dans le tableau.

insert ignore into actor values (3,'ED','CHASE','2006-02-15 12:34:33')

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer