2013-10-03 1 views
0

У меня есть процедура, которая заполняет кучу регулярных и временных таблиц миллионами записей и занимает несколько часов. Это не проблема, когда я запускаю ее в одиночку.sql profiler вызывает «сканирование с помощью NOLOCK из-за перемещения данных»

Тем не менее, я пытался повысить производительность и пытаюсь настроить трассировку SQL Profiler. Теперь процедура бомбит каждый раз:

Не удалось продолжить сканирование с помощью NOLOCK из-за перемещения данных.

Если отключить SQL Profiler, он снова работает. Моя система SQL R2 64 SP2 на четырехъядерном процессоре Dell Precision T5400 Xeon, 8 ГБ оперативной памяти и большой емкости (3 тб) на сервере W2k8 Server 64 (последняя версия).

+0

Кроме того, сервер изолирован. Ни одна другая БД не работает, и единственным действием является эта процедура. Внешних подключений нет - только этот процесс. –

+0

SQL Profiler значительно изменяет сроки и может выявить состояние гонки, которое у вас есть * в любом случае *. Исключение, которое вы видите, следует ожидать, если вы используете NOLOCK в процедуре. Попробуйте использовать трассировку на стороне сервера sp_trace_xxx вместо SQL Profiler. Очень немногие перфомансы требуют SQL Profiler в любом случае, в DMVs/wait_stats есть намного лучшие инструменты. –

+0

Я не использую NOLOCK в процедурах. Изменит ли это ваше предложение? –

ответ

0

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