простое время ожидания обновления миллионов строк - PullRequest
0 голосов
/ 19 марта 2020

Попытка:

update _PECO_Detail set RunId = 37 

Я получаю:

Произошла ошибка транспортного уровня при получении результатов с сервера. (провайдер: провайдер TCP, ошибка: 0 - таймаут семафора

Я видел сообщения об этом, в которых говорится, что это проблема сети, но другие простые запросы работают нормально. Только этот. обновить 1,2 миллиона строк (приблизительно)

Мне все равно, если для запуска потребуется 10 часов (хотя я бы хотел, чтобы это было быстрее), но я не хочу, чтобы время истекло.

Таблица была правильно проиндексирована, имеет pk, а также имеется индекс для поля RunId.

Это управляемый экземпляр Azure. Он настроен в минимальном порядке c стоимость моды. Я не слишком знаком с Azure стоимостью базы данных.

1 Ответ

0 голосов
/ 19 марта 2020

Я уже давно этим занимаюсь. Это еще не разбилось. Я думаю, что это ответ:

Declare @RowsEffected INT = 999;
WHILE (@RowsEffected > 0)   
BEGIN
        UPDATE TOP (100000) _PECO_Detail set RunId = 37
        WHERE RunId <> 37

        SET @RowsEffected = @@ROWCOUNT
END
...