2009-11-24 2 views
1

Возможно ли ограничить использование ЦП на SqlBulkCopy?Ограничить процессор при SqlBulkCopy

Когда я выполняю свой код (см. Ниже), использование ЦП на сервере SQL достигает 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); 
} 

EDIT: Этот код выполняется на отдельной машине с сервера БД.

Почему мне нужно ограничить использование ЦП: этот SQL-сервер имеет несколько баз данных, один из которых постоянно используется с двух компьютеров, каждый из которых выполняет пару запросов в секунду. На этих двух компьютерах работают две большие машины, поэтому каждый раз, когда один из этих компьютеров ждет выполнения своих запросов, он останавливает свою машину, ждет выполнения запросов и снова запускает свою машину. Итак, каждый раз, когда я запускаю что-то на SQL-сервере, который потребляет много CPU, это останавливает некоторые машины на производстве.

+0

Сколько записей в таблицеCSV? Предположительно, этот код работает на машине отдельно от сервера db? – AdaTheDev

ответ

2

Данные, которые вы обновляете, влияют на результаты запросов другой машины? Если это тогда, то это должно блокировать их, ничего общего с процессором, а потому, что записи заблокированы для обновления. Вы хотите, чтобы операция выполнялась как можно быстрее, поэтому максимальный КПК хорош.

Если два набора данных различны, то нет никаких причин, почему хорошо настроен SQL-сервер не может обслуживать как, смотрите в опции настройки, сколько памяти доступно и т.д.

+0

Они полностью разделенные базы данных. Что касается сервера, это виртуальная машина VMWare с небольшими ресурсами, хотя ... – sventevit

+0

Несмотря на это, все равно должен быть только один экземпляр SQL Server, обслуживающий данные обоих. Я бы посмотрел на настройку производительности, если процессор достигнет максимума, я бы представил свои ресурсы памяти, которые убивают то, что вы пытаетесь сделать не в ЦП. Если данные для частого запроса выгружаются, чтобы сделать массовое обновление, это будет причиной, а не тем, что может быть исправлено путем «ограничения процессора», – Chris

1

Почему? Вы просите сервер выполнить работу, она выполняет работу. Сделать это в два раза медленнее, не имеет смысла. Оставьте это до SQL Server для планирования своих заданий, вы не сможете сделать это самостоятельно, так как не знаете, какие рабочие места активны.

+0

Я отредактировал мой вопрос, чтобы вы могли понять, зачем мне это нужно. – sventevit

2

Вы можете использовать MAXDOP временно использовать только один процессор: http://msdn.microsoft.com/en-us/library/ms181007.aspx

Если загрузка ЦП SQL является проблемой, вы можете переместить SqlServer на выделенный сервер.

+0

Удивительная идея. Но никаких объяснений о том, как использовать MaxDop с SqlBulkCopy – TamusJRoyce

0

Вы сказали:

Они полностью разделены базы данных.

Вы можете установить второй экземпляр сервера sql с разным приоритетом/приоритетом процессора. Вы также можете купить второй сервер.

Смежные вопросы