2009-11-24 6 views
1

Est-il possible de limiter l'utilisation de l'UC à SqlBulkCopy? Lorsque j'exécute mon code (voir ci-dessous), l'utilisation de l'UC sur le serveur SQL passe à 100%. Je voudrais limiter cela à, disons, 50%. Est-ce possible?Limiter l'UC à SqlBulkCopy

code:

string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ToString(); 
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString)) 
{ 
    bulkCopy.DestinationTableName = "dbo.CSVFile"; 
    bulkCopy.BulkCopyTimeout = 600; 
    bulkCopy.BatchSize = 1000; 
    bulkCopy.WriteToServer(tableCSV); 
} 

EDIT: Ce code est en cours d'exécution sur la machine séparée du serveur db. Pourquoi j'ai besoin de limiter l'utilisation de l'UC: ce serveur SQL a plusieurs bases de données, l'une d'entre elles est acceseed constamment de deux ordinateurs, chacun d'eux fait quelques requêtes par seconde. Ces deux ordinateurs exploitent deux grosses machines, donc chaque fois qu'un de ces ordinateurs attend que ses requêtes soient exécutées, il arrête sa machine, attend que les requêtes s'exécutent puis réexécute sa machine. Donc, chaque fois que je lance quelque chose sur un serveur SQL qui consomme beaucoup de CPU, cela arrête certaines machines en production.

+0

Combien d'enregistrements sont dans tableCSV? Vraisemblablement, ce code fonctionne sur une machine distincte du serveur DB? – AdaTheDev

Répondre

2

Les données que vous mettez à jour affectent-elles les résultats des requêtes de l'autre machine? Si c'est le cas, il devrait les bloquer, rien à faire avec le CPU mais parce que les enregistrements sont verrouillés pour la mise à jour. Vous voulez que l'opération s'exécute le plus rapidement possible afin que le processeur maximum soit bon.

Si les deux ensembles de données sont différentes, il n'y a aucune raison pour laquelle un serveur SQL bien configuré ne pouvait pas servir à la fois, se pencher sur les options de réglage, la quantité de mémoire disponible, etc.

+0

Ce sont des bases de données complètement séparées. En ce qui concerne le serveur, il s'agit d'une machine virtuelle VMWare, avec peu de ressources ... – sventevit

+0

Quoi qu'il en soit, il ne doit toujours exister qu'une seule instance de SQL Server en train de servir les données des deux. Je regarderais l'optimisation des performances, si le processeur est au maximum j'imagine ses ressources de mémoire qui tuent ce que vous essayez de ne pas le processeur. Si les données pour la requête fréquente sont en cours de pagination afin de faire la mise à jour de masse, alors ce serait la cause, pas quelque chose qui peut être résolu en «limitant le CPU» – Chris

1

Pourquoi? Vous demandez au serveur de faire le travail, il fait le travail. Le rendre deux fois plus lent n'a pas de sens. Laisser à SQL Server de planifier ses travaux, vous ne pouvez pas le faire vous-même, car vous ne savez pas quels types de travaux sont actifs.

+0

J'ai édité ma question pour que vous puissiez voir pourquoi j'en aurais besoin. – sventevit

0

Vous avez dit:

Ils sont complètement séparés bases de données.

Vous pouvez installer une seconde instance de serveur SQL avec une affinité/priorité CPU différente. Vous pouvez également acheter un deuxième serveur.