J'ai un processus d'importation qui s'exécute de temps en temps et je veux que ce soit une sorte d'accord tout ou rien, alias: une transaction.
Il y a de nombreux aspects, et les importations peuvent produire entre 100k-1mil + enregistrements. Cela équivaut à une charge utile allant de plusieurs Mo à quelques centaines de Mo de données.
Je sais que les tables temporaires sont une autre option - mais cette méthode semble si pratique.
Y a-t-il des mises en garde à prendre en compte concernant ce type de pratique avec une grande quantité de manipulation de données entre les validations? (En dehors de la rafale de charge d'écriture / d'indexation typique une fois validée)
mysql
innodb
mysql-5.5
transaction
mince
la source
la source
Réponses:
Un goulot d'étranglement à connaître est le tampon de journal InnoDB. La taille est définie par innodb_log_buffer_size . Voici ce que la documentation MySQL en dit:
Le tampon de journal InnoDB ne doit pas être confondu avec le pool de tampons InnoDB. La principale différence entre eux est leur objectif. Le tampon de journal InnoDB enregistre essentiellement les modifications à court terme qui sont écrites dans les journaux de rétablissement (ib_logfile0, ib_logfile1). Le pool de tampons InnoDB (dimensionné par innodb_buffer_pool_size ) met en cache les données et les pages d'index qui doivent être validées (si les pages sont sales) et éventuellement écrites) sur le disque. Une fois validées, les pages de modifications restent dans la RAM jusqu'à leur suppression via les règles LRU.
Les transactions importantes doivent passer par le tampon de journal. Comme mentionné, un tampon de journal plus grand réduira les E / S disque. Seul un gros commit présenterait un goulot d'étranglement.
Vous voudrez peut-être examiner d'autres options InnoDB à configurer.
J'ai d'autres articles sur l'optimisation d'InnoDB pour de nouvelles recherches
la source