-1

Существует проблема с производством, когда одна из хранимых процедур заявлена ​​слишком долго - в среднем она занимает 15-20 секунд, но в один из дней потребовалось более 100 секунд ,Хранимая процедура SQL Server 2012 занимает слишком много времени

Это произошло на прошлой неделе, в понедельник, и это снова повторилось на этой неделе - во вторник. Мы проверили нагрузку на БД, все согласовано, нет большого объема по понедельникам или вторникам.

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

Что может быть неправильным?

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

Это не может быть связано с нагрузкой на БД или загрузкой ЦП, поскольку воздействие происходит только на одной хранимой процедуре.

Нет запланированных рабочих мест, которые работают только по понедельникам или вторникам.

+0

Похоже, вам нужна дополнительная информация. Я бы предложил запустить трассировку с использованием профилировщика SQL, чтобы узнать, можете ли вы определить, что происходит, когда вы испытываете проблемы с производительностью. –

+0

Да План выполнения даст важную информацию, чтобы увидеть, что вызывает узкое место. Если вы поделитесь, я могу помочь просмотреть. –

ответ

0

Я бы посмотрел на действия, которые видят, какой процесс занимает большинство CPU и использует профилировщик SQL, чтобы узнать, сколько запросов ресурсов занимает. Поскольку вы уверены, что хранимая процедура занимает слишком много CPU, вы должны проверить, как выполняются запросы.
В анализаторе запросов включите «Показать фактический план выполнения». Здесь я рассмотрю, как выполняется запрос, независимо от того, использует ли он сканирование индекса или таблицы, алгоритм сортировки и т. Д. Он показывает, какая функция потребляет наибольший процессор. Если это прочитанный запрос, я рассмотрю таблицы и посмотрю, как внутренне фрагментирована таблица и сколько нужно пройти для извлечения данных. Если это написать запрос, я рассмотрю блокировку строки и таблицы и журнал. Если вы измените модель восстановления от простого к полному, запись может занять значительное количество времени.
Если вы выполнили план выполнения, вставьте изображение с хранимой процедурой здесь, чтобы я мог видеть, что фактически замедляет выполнение.
Исправьте их, изменив SQL-запрос, индексирование, подсказку запроса и разбивку таблиц.