是否可以限制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 :(得分: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实例。 您还可以购买第二台服务器。