2009-11-24 59 views
1

是否可以限制SqlBulkCopy的CPU使用率?在SqlBulkCopy限制CPU

当我执行我的代码(见下文)时,SQL服务器上的CPU使用率跳转到100%。我想限制这个,比方说,50%。这可能吗?

代码:

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); 
} 

编辑: 此代码是独立的机器上运行从DB服务器。

为什么我需要限制CPU使用率:这个SQL服务器有多个数据库,其中一个从两台计算机不断加载,每个数据库每秒执行几个查询。这两台计算机运行两台大型机器,因此每次有一台计算机等待执行查询时,他会停止计算机,等待查询执行,然后再次运行计算机。 所以每次我在SQL服务器上运行一些消耗大量CPU的东西时,都会停止生产中的一些机器。

+0

tableCSV有多少条记录?据推测,这些代码运行在与数据库服务器分开的机器上? – AdaTheDev

回答

2

您正在更新的数据是否会影响其他计算机查询的结果?如果是,那么它应该阻止它们,与CPU无关,但是因为记录被锁定以便更新。你希望操作尽可能快地运行,所以最大的CPU是好的。

如果两个数据集是不同的,那么有没有理由以及配置的SQL服务器无法满足这两个,考虑调整选项,多少内存可用等

+0

它们是完全分离的数据库。关于服务器,它是一个VMWare虚拟机,虽然资源很少,但... – sventevit

+0

无论如何,应该仍然只有一个SQL Server实例正在运行从这两个服务器提供数据。我会考虑性能调整,如果CPU正在最大化,我会想象它的内存资源正在扼杀你想要做的而不是CPU。如果频繁查询的数据正在被分页以进行批量更新,那么这将是原因,而不是可以通过“限制CPU” – Chris

1

为什么?你要求服务器去做工作,它正在做这项工作。让它慢两倍是没有道理的。将它留给SQL Server来安排它的工作,你不能自己做,因为你不知道什么样的工作是活跃的。

+0

我编辑了我的问题,所以你可以看到为什么我需要这个。 – sventevit

0

你说:

他们完全分开 数据库。

您可以安装具有不同CPU亲和力/优先级的sql server的第二个实例。 您也可以购买第二台服务器。