J'essaie d'insérer environ 500 millions de lignes de données de déchets dans une base de données pour les tests. En ce moment j'ai un script PHP en boucle à travers quelques SELECT/INSERT
déclarations à l'intérieur d'un TRANSACTION
- clairement ce n'est pas la meilleure solution. Les tables sont InnoDB (verrouillage de ligne).Fourchette MySQL INSERT INTO (InnoDB)
Je me demande si je bifurque (proprement) le processus, cela accélérera-t-il le processus INSERT
? Au rythme où ça va, il faudra 140 heures pour terminer. Je suis préoccupé par deux choses:
Si
INSERT
déclarations doivent acquérir un verrou d'écriture, puis va le rendre inutile bifurquer, car plusieurs processus ne peuvent pas écrire à la même table en même temps? J'utiliseSELECT...LAST_INSERT_ID()
(dansTRANSACTION
). Cette logique se rompra-t-elle lorsque plusieurs processus seront intégrés dans la base de données? Je pourrais créer une nouvelle connexion de base de données pour chaque fork, donc j'espère que cela éviterait le problème.Combien de processus devrais-je utiliser? Les requêtes elles-mêmes sont simples, et j'ai une boîte de dev standard dual-core avec 2 Go de RAM. J'ai installé mon InnoDB pour utiliser 8 threads (
innodb_thread_concurrency=8
), mais je ne suis pas sûr si je devrais utiliser 8 processus ou si c'est même une façon correcte de penser à la correspondance.
Merci pour votre aide!
Merci pour la réponse détaillée! Content de savoir qu'il n'y a pas beaucoup de raisons de s'inquiéter. – ash