|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
Добрый день. Есть задача обновления одной таблицы в многопоточном режиме таблица секционированная по полю section, параллельно обновляются записи из разных секций. Таблица Код: sql 1. 2. 3. 4. 5.
Первый поток: Код: sql 1. 2.
Второй поток: Код: sql 1. 2.
При параллельном выполнении UPDATE возникают блокировки deadlock. Если это важно, то потоки вызывают хранимки в которые передается номер секции через переменную. Я предполагал что настройка (lock_escalation = auto) для таблицы должна предотвратить блокировки, но как оказалось это не помогло. Подскажите как реализовать подобное и избежать deadlock? И если не для решения подобной задачи, то зачем нужна настройка lock_escalation = auto Sql Server 2017 Enterprise ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 21:29 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
lex452, читайте документацию про индексы, кучи. секционирование изначально проектировалось не под те нужды под которые вы его пытаетесь подогнать. и на будующее: раз уж приводите примеры то приводите код структуры данных полностью, а не через призму вашего восприятия. в предоставленном выше посте нет ни намека на какое либо секционирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 00:28 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
lex452 Добрый день. Есть задача обновления одной таблицы в многопоточном режиме таблица секционированная по полю section, параллельно обновляются записи из разных секций. Таблица Код: sql 1. 2. 3. 4. 5.
Первый поток: Код: sql 1. 2.
Второй поток: Код: sql 1. 2.
При параллельном выполнении UPDATE возникают блокировки deadlock. Если это важно, то потоки вызывают хранимки в которые передается номер секции через переменную. Я предполагал что настройка (lock_escalation = auto) для таблицы должна предотвратить блокировки, но как оказалось это не помогло. Подскажите как реализовать подобное и избежать deadlock? И если не для решения подобной задачи, то зачем нужна настройка lock_escalation = auto Sql Server 2017 Enterprise Ну, типа, серваку позволили самому решать: переходить ли на блокировку всей таблицы целиком, или так и быть - тупиться в каждую запись из этой таблицы по-отдельности (ну, вдруг в таблице всего семь строк, а таблица сильно юзается) . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 03:00 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
felix_ff, Согласен, извиняюсь что не указал в скрипте секционирование. А по поводу escalation_lock =auto по справке выглядит так что она заточена для работы с секциями ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 08:28 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
SIMPLicity_, В справке вроде четко написано, что когда есть секции, то использует блокировку на уровне секций. Когда нет, то на уровне таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 08:30 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
felix_ff, Я знаю, что такое индексы и кучи. Но не вижу связи с моей задачей ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 08:31 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
lex452 felix_ff, Я знаю, что такое индексы и кучи. Но не вижу связи с моей задачей Подними веки? Секционирование тут нужно как собаке пятая нога. Даже меньше. 1. Кластерный индекс по (sectionNum, ...чего там ишо? ). Правда, желательно огласить прочие индексы или сделать их (sectionNum, ...) 2. Ограничение числа одновременно обновляемых строк до 5000 Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 10:44 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
Коллеги, я тут немного извиняюсь, а где вообще видно, что таблица секционирована? У ТС только "create table table1 (sectionNum int, val1 int)" и усё. Кластерный индекс вероятно поможет,- но мы не знаем ни чего про таблицу (ни индексов, ни к-ва строк, ни...) Итог: гадание на сферического коня в вакууме ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 12:20 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
lex452, вы о чем-то не договариваете. Смотрите на фактический план выполнения, наверняка запрос сканирует все секции вместо одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 12:21 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
SIMPLicity_, Таблица создана на схеме секционирования. Секционирование по столбцу sectionNum. Это куча, индексов нет совсем. Содержит несколько тысяч записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 13:10 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
Владислав Колосов, Скорее всего да, но в том и вопрос, как этого избежать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 13:11 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
Для того чтобы разобраться с дидлоком, для началу нужно понять чем он вызван, а для этого анализируют граф дидлока. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 13:30 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
lex452 SIMPLicity_, Таблица создана на схеме секционирования. Секционирование по столбцу sectionNum. Это куча, индексов нет совсем. Содержит несколько тысяч записей. Он то плакал, то смеялся, то щетинился как ёж. Он, гад, над нами издевался! Ну сумасшедший, что возьмешь? (c) В.Высоцкий ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 14:27 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
aleks222, К чему это? Лучше иногда промолчать... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 18:19 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
Выровненный индекс по полю, по которому производится секционирование - не спасет отца русской демократии? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2020, 08:18 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
uaggster Выровненный индекс по полю, по которому производится секционирование - не спасет отца русской демократии? Построил кластеризованный индекс. Посмотрю на поведение. Что такое выровненный не знаю) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2020, 16:35 |
|
Многопоточное обновление таблицы без блокировок
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2020, 16:47 |
|
|
start [/forum/topic.php?fid=46&msg=40008820&tid=1685527]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 282ms |
total: | 424ms |
0 / 0 |