Удаленное удаление не соответствует пределу ресурса / тайм-ауту - PullRequest
2 голосов
/ 17 июня 2019

Работа моего агента SQL выполняется каждое утро в 4 часа утра. Он имеет 10 шагов.

Последние несколько недель с ошибкой пару раз в неделю на шаге 3 с этой ошибкой.

Поставщик OLE DB "SQLNCLI11" для связанного сервера "RemoteServerName" сообщил об ошибке.

Исполнение прекращено поставщиком, потому что предел ресурсов был достигнут. [SQLSTATE 42000] (ошибка 7399)

Невозможно получить набор строк от поставщика OLE DB "SQLNCLI11" для связанного сервера. "RemoteServerName". , [SQLSTATE 42000] (Ошибка 7421)

Поставщик OLE DB "SQLNCLI11" для связанного сервера "RemoteServerName" вернул сообщение "Запрос истекло время ожидания ". [SQLSTATE 01000] (ошибка 7412). Шаг не выполнен.

  • При успешном выполнении шага 3 продолжительность составляет от 1 до 7 минут.

  • При сбое шага 3 продолжительность составляет от 12 до 15 минут.

  • Для обоих серверов SQL «Время ожидания удаленного запроса» установлено равным 600 секундам (10 минутам).

Весь шаг 3, как ни странно, является простым оператором DELETE.

DELETE FROM [RemoteServerName].DbNameHere.dbo.CompanyProductLink_Copy
  1. Если для тайм-аута установлено значение 10 минут, а в сообщении об ошибке указано «истекло время ожидания запроса», почему длительность шага варьируется от 12 до 15 минут?

  2. Есть ли более эффективный способ удаления ~ 1 000 000 записей из удаленной таблицы?

Я могу довольно легко увеличить время ожидания ... Я просто хочу понять,

Запуск SQL Server v12 на твердотельных накопителях с выделенным ОЗУ 24 ГБ.

1 Ответ

2 голосов
/ 17 июня 2019

Удаление таблицы может занять некоторое время.Предполагая, что у вас нет триггеров или каскадных ссылок на внешние ключи, используйте вместо этого truncate table:

TRUNCATE TABLE [RemoteServerName].DbNameHere.dbo.CompanyProductLink_Copy;

Это должно быть намного быстрее, чем DELETE.

...