У меня есть процедура, которая заполняет кучу регулярных и временных таблиц миллионами записей и занимает несколько часов. Это не проблема, когда я запускаю ее в одиночку.sql profiler вызывает «сканирование с помощью NOLOCK из-за перемещения данных»
Тем не менее, я пытался повысить производительность и пытаюсь настроить трассировку SQL Profiler. Теперь процедура бомбит каждый раз:
Не удалось продолжить сканирование с помощью NOLOCK из-за перемещения данных.
Если отключить SQL Profiler, он снова работает. Моя система SQL R2 64 SP2 на четырехъядерном процессоре Dell Precision T5400 Xeon, 8 ГБ оперативной памяти и большой емкости (3 тб) на сервере W2k8 Server 64 (последняя версия).
Кроме того, сервер изолирован. Ни одна другая БД не работает, и единственным действием является эта процедура. Внешних подключений нет - только этот процесс. –
SQL Profiler значительно изменяет сроки и может выявить состояние гонки, которое у вас есть * в любом случае *. Исключение, которое вы видите, следует ожидать, если вы используете NOLOCK в процедуре. Попробуйте использовать трассировку на стороне сервера sp_trace_xxx вместо SQL Profiler. Очень немногие перфомансы требуют SQL Profiler в любом случае, в DMVs/wait_stats есть намного лучшие инструменты. –
Я не использую NOLOCK в процедурах. Изменит ли это ваше предложение? –