限制SqlBulkCopy的CPU

时间:2009-11-24 16:01:43

标签: c# sql-server-2005

是否可以限制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的东西时,就会停止生产中的某些机器。

4 个答案:

答案 0 :(得分:2)

您可以使用MAXDOP暂时只使用一个处理器: http://msdn.microsoft.com/en-us/library/ms181007.aspx

如果SQL CPU使用率有问题,您可以将SqlServer移动到专用服务器。

答案 1 :(得分:2)

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

如果两个数据集不同,那么没有理由为配置良好的SQL服务器无法同时服务,查看调优选项,可用内存量等等。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

你说:

  

他们是完全分开的   数据库。

您可以安装具有不同CPU关联性/优先级的第二个sql server实例。 您还可以购买第二台服务器。