Je viens de voir la mise à jour, la table 60-col avec principalement des champs VARCHAR (2k) - c'est (potentiellement) une table monstre.
Tout d'abord ...
Vous devez d'abord comprendre votre goulot d'étranglement. Du côté de l'application, retournez à votre solution d'insertion par lots à un seul thread (1/2 / 3k à la fois) et commencez à l'exécuter et connectez-vous à la machine DB et exécutez un `` top '' - voyez combien le temps que prend le processus DB ET combien (le cas échéant) wa% de temps la machine affiche.
Si top vous affiche TOUT temps, cela signifie que votre base de données est liée aux E / S et vous devrez probablement prendre en compte plusieurs machines DB (fragments) ou envisager de lancer des SSD sur la machine hôte.
C'est ça; votre recherche s'arrête là. Peu importe la quantité de CPU prise par la base de données ou la saturation de votre client d'application. si vous rencontrez des problèmes de latence d'E / S sur la base de données hôte, c'est aussi rapide que cela ne vous ira JAMAIS.
CONSEIL Si des modifications matérielles sont hors de question, selon le système de fichiers que vous exécutez (Linux), vous pouvez essayer de désactiver la journalisation ou l'écriture de métadonnées pour la base de données afin d'améliorer légèrement les performances au niveau du système de fichiers. Vous pouvez faire quelque chose de similaire sur NTFS, mais cela ne vous donnera qu'un petit coup de pouce. Ce ne sera pas 2x.
Maintenant, deuxièmement ...
Supposons que vous n'ayez presque pas eu de temps, mais que votre processeur est entièrement lié au processus DB. Votre seule option est maintenant d'introduire plus de machines DB (fragments) et de diviser le travail.
Encore une fois, vous avez terminé vos recherches si tel est le cas. Rien de ce que vous pouvez faire pour modifier le CPU pour aller plus vite.
Enfin, troisième chose ... troisième ...
Disons que la DB ne fait pas grand-chose. Ensuite, accédez à la machine cliente exécutant l'insertion par lots et vérifiez la charge du processeur - est-elle liée? Si c'est le cas, lancez quelques autres machines en faisant exactement les mêmes insertions par lots et voyez si vous pouvez obtenir une rampe linéaire.
Si le CPU n'est pas arrimé, lancez quelques threads supplémentaires sur la même machine jusqu'à ce qu'il soit arrimé et voyez comment la base de données évolue.
Je pense que vous avez peut-être déjà essayé cela, donc je suppose que votre hôte client était déjà ancré (et plus de threads ne feront pas de différence) ou que la base de données atteignait déjà sa limite et ne peut pas évoluer plus loin.
Addenda
Faire des insertions brutes sur une table non indexée qui ne contient pas de déchets est essentiellement une opération APPEND qui devrait aller aussi vite que le disque peut gérer les écritures.
Créer plus de tables sur la même machine hôte ne va pas aider, si cela augmente votre recherche de disque (pour accéder aux autres tables du disque pour y ajouter) et ralentira les choses.
Il est essentiel de comprendre ce goulot d'étranglement d'abord, puis nous pouvons optimiser l'enfer hors de lui.
J'espère que cela pourra aider! Tenez-nous au courant.