SQL 2005 запускает мой запрос на одном процессоре и, следовательно, работает медленно - PullRequest
1 голос
/ 17 февраля 2010

У меня есть запрос, который объединяет 6 таблиц, создает 800 000 строк и вставляет их в таблицу.

Я выполняю этот запрос в Sql 2005 Standard на 8-ядерном компьютере, на котором не выполняется другая рабочая нагрузка. Служба Sql использует только одно ядро ​​ЦП при выполнении этого запроса (используя этот ЦП на 100%), и таким образом запрос выполняется почти 4 минуты.

Как я могу сделать так, чтобы мой запрос использовал все доступные процессоры?

Перестройка статистики не помогла. И были времена, когда этот запрос использовал все процессоры и работал значительно быстрее.

(В запросе также используются две скалярные функции TSQL, но это не должно быть проблемой, так как это было не раньше. Эти функции используют только свои параметры в вычислениях и не получают доступа к таблицам из базы данных. эти функции не должны препятствовать распараллеливанию запроса.)

(Может ли включение «изоляции зафиксированного моментального снимка для чтения» в базе данных вызвать такое поведение? Запрос был запущен до того, как я включил его, и с тех пор он работает на одном процессоре.)

1 Ответ

2 голосов
/ 17 февраля 2010

Посмотрите на план запроса, возможно, он даст вам некоторое представление о том, что происходит. Вы также можете опубликовать запрос и его план (в текстовом режиме) здесь для анализа другими.

Попробуйте принудительно установить другой уровень изоляции транзакции (УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ ЧИТАТЬ КОМИТЕТ) и сравнить планы запросов - он покажет вам, вызвало ли изменение изоляции по умолчанию проблему.

На всякий случай вам может потребоваться проверить параметр максимальная степень параллелизма (его можно установить как параметр для всего сервера или как подсказку MAXDOP для конкретного запроса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...