Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Параллелизм внутри курсора  [new]
lex452
Member

Откуда:
Сообщений: 588
Подскажите пожалуйста. Стоит задача обновить в таблице все значения в текстовых полях с null на пустоту ''. Решил использовать динамический sql. Получаю список всех текстовых колонок в таблице, и пробегаюсь курсором по этому списку , внутри курсора делая


EXEC('UPDATE '+@tablename+'
set '+@columnName+'=''''
WHERE  '+@columnName+' is null ')



но периодически возникают deadlock блокировки по которым видно, что одновременно идет update разных колонок в одной таблице, чего (по моей логике) быть не должно.
Внимание вопрос, возможно ли что внутри курсора идет выполнение не последовательно, а параллельно и если да, то как этого избежать?
13 ноя 20, 20:16    [22231697]     Ответить | Цитировать Сообщить модератору
 Re: Параллелизм внутри курсора  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Стейтменты в одной сессии всегда выполняются последовательно.
13 ноя 20, 20:19    [22231699]     Ответить | Цитировать Сообщить модератору
 Re: Параллелизм внутри курсора  [new]
lex452
Member

Откуда:
Сообщений: 588
Гавриленко Сергей Алексеевич, спасибо, буду искать проблему в другом месте
13 ноя 20, 20:32    [22231711]     Ответить | Цитировать Сообщить модератору
 Re: Параллелизм внутри курсора  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8047
lex452,

если Вы обновляете ту же таблицу, что и просматриваете, то такое возможно. Откройте профайлер и запищите трассу событий deadlock c XML графом, увидите - откуда берутся взаимоблокировки.

Сообщение было отредактировано: 14 ноя 20, 00:34
14 ноя 20, 00:37    [22231814]     Ответить | Цитировать Сообщить модератору
 Re: Параллелизм внутри курсора  [new]
lex452
Member

Откуда:
Сообщений: 588
Владислав Колосов
lex452,

если Вы обновляете ту же таблицу, что и просматриваете, то такое возможно. Откройте профайлер и запищите трассу событий deadlock c XML графом, увидите - откуда берутся взаимоблокировки.


Обновление идет в отдельном потоке, но теоретически эту таблицу могут просматривать в это же время правда с хинтом (nolock). А где связь между тем что одно обновление блокирует другое и одновременным просмотром, не понимаю?
14 ноя 20, 11:23    [22231957]     Ответить | Цитировать Сообщить модератору
 Re: Параллелизм внутри курсора  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8047
lex452,

смотрите граф блокировки, там может быть что-то связанное и с курсором.
15 ноя 20, 01:57    [22232243]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить