Plusieurs connexions à une base de données à partir de plusieurs threads d'une application augmenteront-elles les performances des requêtes d'insertion?

StackOverflow https://stackoverflow.com/questions/605607

Question

Il s’agit ici d’une base de données contenant des dizaines de millions d’enregistrements. J'ai une application qui se connecte à la base de données, extrait toutes les données d'une seule colonne d'une table, effectue des opérations dessus et les met à jour (pour SQL Server - utilisation de curseurs).

Pour des millions d’enregistrements, la mise à jour prend très très longtemps. Donc, je veux faire plus vite en

  1. utiliser plusieurs threads avec une connexion indépendante pour chaque thread.

ou

  1. en utilisant une seule connexion sur tous les threads pour déclencher les requêtes de mise à jour.

Lequel est le plus rapide, ou si vous avez d'autres idées, expliquez-les.

J'ai besoin d'une solution indépendante du type de base de données. Si vous connaissez des solutions spécifiques à chaque type de base de données, répondez-moi.

Était-ce utile?

La solution

L’accélération que vous essayez d’atteindre ne fonctionnera pas. Au contraire, cela ralentira le traitement dans son ensemble, car la base de données doit également maintenir plusieurs connexions / sessions / transactions synchronisées.

Conservez le moins de connexions / transactions possible pour des opérations répétitives et comparables. Si cela prend trop de temps à votre goût, essayez peut-être d'analyser si les requêtes peuvent être optimisées d'une manière ou d'une autre. Consultez également les extensions spécifiques à la base de données (opérations en bloc) adaptées à votre problème.

Autres conseils

Tout dépend de la base de données et du matériel sur lequel elle s'exécute.

Si la base de données peut utiliser un traitement simultané et éviter les conflits sur les ressources partagées (par exemple, les verrous de base de pages s'étendent sur plusieurs enregistrements, mais pas sur les enregistrements). Les ressources partagées dans ce cas incluent le matériel, une seule machine principale ne pourra pas exécuter plusieurs activités gourmandes en ressources (par exemple, analyser SQL) en parallèle.

La latence du réseau est une solution que vous pouvez aider à réduire avec des insertions simultanées, même si la base de données n'est pas en mesure d'exploiter la simultanéité.

Comme pour toute question de performance, il existe un substitut au test dans votre scénario spécifique.

Si possible, essayez d'utiliser la procédure stockée pour effectuer tout le traitement et mettre à jour les enregistrements.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top