Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Может ли запрос с одним и тем же планом выполнения создавать деадлок? / 25 сообщений из 31, страница 1 из 2
27.04.2018, 11:03
    #39637225
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
Не секрет, что некоторые запросы могут приводить к деадлокам. У меня возник вопрос, а может ли это случиться когда план выполнения один и тот же?(надеюсь разработчики заложили одни и те же правила сортировки)
...
Рейтинг: 0 / 0
27.04.2018, 11:09
    #39637232
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
для простоты будем считать что сложный запрос на удаление строк в таблице
...
Рейтинг: 0 / 0
27.04.2018, 11:17
    #39637240
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

Нормально сформулируйте.
Причем чем тут один и тот же план? Если имеется ввиду один запрос, естественно может быть дедлок.
Бонально неоптимизированный update к примеру.
...
Рейтинг: 0 / 0
27.04.2018, 11:20
    #39637245
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
aleksrov,

Один и тот же запрос(запрос на запрос), с update, с одним и тем же планом. Может быть deadlock?
...
Рейтинг: 0 / 0
27.04.2018, 11:22
    #39637249
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

Что значит запрос на запрос?

Запустите на куче
Update Table set column2=Val
where column1 = Val
План один и тот же, отличаться будет только условие, может быть дедлок.
...
Рейтинг: 0 / 0
27.04.2018, 11:22
    #39637250
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
aleksrovМуМу,

Нормально сформулируйте.
Причем чем тут один и тот же план? Если имеется ввиду один запрос, естественно может быть дедлок.
Бонально неоптимизированный update к примеру.
он хотел сказать, возможна ли ситуация,
когда к дедлоку приводит один и тот же запрос,
выполненный из разных сессий,
план запросов один и тот же и "с виду" доступ к ресурсам идет в одном и том же порядке.

очевидно же, что никакие "правила сортировки, заложенные разработчиками"
не имеют отношения к вопросу, т.к. для дедлока сортировка вообще не нужна.
нужно минимум 2 ресурса и доступ к ним в разном порядке
...
Рейтинг: 0 / 0
27.04.2018, 11:28
    #39637260
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
Если бы я был разработчиком, вполне мог бы создать ситуацию когда это было бы невозможно(правда издержки могли бы быть больше от подобной выгоды). Вопрос, возник при споре с коллегами. Вопрос не практический, просто любопытно.
...
Рейтинг: 0 / 0
27.04.2018, 11:36
    #39637264
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

Каждая система уникальна, разработчики не могут предсказать как она будет использоваться.
...
Рейтинг: 0 / 0
27.04.2018, 11:37
    #39637269
ssms
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМуЕсли бы я был разработчиком, вполне мог бы создать ситуацию когда это было бы невозможно(правда издержки могли бы быть больше от подобной выгоды). Вопрос, возник при споре с коллегами. Вопрос не практический, просто любопытно.

Да.
...
Рейтинг: 0 / 0
27.04.2018, 11:43
    #39637280
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМуУ меня возник вопрос, а может ли это случиться когда план выполнения один и тот же?(надеюсь разработчики заложили одни и те же правила сортировки)Может.

Правила сортировки тут вообще ни при чем.
А одинаковость плана не означает, что его экземпляры не могут находится на разных этапах выполнения.
...
Рейтинг: 0 / 0
27.04.2018, 11:49
    #39637289
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
invm,
Можно пример?
...
Рейтинг: 0 / 0
27.04.2018, 11:51
    #39637291
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
invm,

собственно вопрос к этапам выполнения.
...
Рейтинг: 0 / 0
27.04.2018, 11:59
    #39637303
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

Например, в плане есть Table Scan -> Sort -> ... -> Table Update. Блокировки уровня строки или таблицы. TIL RR или выше.
Один экземпляр на этапе Table Scan, другой - на Table Update. Соответственно, порядок обрабатываемых строк будет разным.
...
Рейтинг: 0 / 0
27.04.2018, 12:03
    #39637309
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
Что такое план- алгоритм более эффективно обрабатывающий данные. Есть этап предобработки статистики, своего рода компиляция. Если алгоритм просчитывает и идет по одним и тем же этапам, соблюдая сортировку и т.п., по идее деадлоков можно избежать теоретически.(для апдейта по одной таблице) Пока вопросы остаются, хотя возможно все просто.
...
Рейтинг: 0 / 0
27.04.2018, 12:04
    #39637313
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
invm,

Эскалацию предположим уберем как внезапный фактор.
...
Рейтинг: 0 / 0
27.04.2018, 12:12
    #39637326
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

Что вы пристали к этой сортировке.
Дедлок возникает когда запрос получает доступ к ресурсам в разном порядке. К примеру вы делаете сначала update строки 1, на нее наложена X до конца транзации, другой запрос делает update строки 2, также update до конца транзации, в первой транзакции потом делается неоптимизированный select (т.е. скан) во второй также, в итоге оба запроса хотят наложить S и ждут пока снимется X, ура дедлок! Причем тут сортировка? Причем тут план запроса?
...
Рейтинг: 0 / 0
27.04.2018, 12:18
    #39637338
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
aleksrov,
spid 70 update A
spid 80 update B
spid 70 update B
spid 80 update A
вы об этом?;)
Один и тот же запрос на апдейт выполненный из разных сессий, приводящий к деадлоку, покажите мне пример.
...
Рейтинг: 0 / 0
27.04.2018, 12:20
    #39637340
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

Вам же уже 100 раз сказали: "Да, может"




Вот простой пример


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
--Создаем таблицу для тестов и заполняем ее 

create table dbo.TestDeadLock(
	id int not null primary key
	, f varchar(100)
)



insert dbo.TestDeadLock(
	id
)
select top 100 ROW_NUMBER() over(order by (select 1))
from sys.objects o1
cross join sys.objects o2



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-- в двух параллельных потоках запускаем 

create table #test(
	id					int not null identity(1,1)
	, testdeadlock_id	int not null
	, primary key (
		id
	)
)

insert #test(
	testdeadlock_id
)
select id
from dbo.TestDeadLock
order by NEWID()



while 1=1
begin 
	update t2 set 
		f = newid()
	from #test t1 
	inner join dbo.TestDeadLock t2 with(forceseek) on t1.testdeadlock_id = t2.id 
end




наслаждаемся дидлоком в одной из сессий
...
Рейтинг: 0 / 0
27.04.2018, 12:26
    #39637343
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
msLex,

Сортировки нет, а если с ней?(не могу проверить) Согласен, в моем случае были индексы уникальные(не сказал).
...
Рейтинг: 0 / 0
27.04.2018, 12:29
    #39637346
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМуmsLex,

Сортировки нет, а если с ней?(не могу проверить) Согласен, в моем случае были индексы уникальные(не сказал).
Я не знаю что у вас там за "запрос" и что за уникальные индексы, но с каждым последующим вашим постом ваш изначальный вопрос


"Может ли запрос с одним и тем же планом выполнения создавать деадлок?"
превращается в
"Может ли запрос с одним и тем же планом выполнения не создавать деадлок?"
...
Рейтинг: 0 / 0
27.04.2018, 12:31
    #39637348
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
Вопрос был не правильно сформулирован. Тема закрыта;)
...
Рейтинг: 0 / 0
27.04.2018, 13:01
    #39637387
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМу,

любая параллельная обработка имеет право на дедлок.
...
Рейтинг: 0 / 0
27.04.2018, 14:10
    #39637475
МуМу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
Итог(кто понял).
Любые случайные события провоцируют деадлок. Например неупорядоченная куча(отсутствие индексов) , случайно включенная эскалация, параллелизм который вряд ли работает в одном порядке распределения. Может еще что то?
...
Рейтинг: 0 / 0
27.04.2018, 14:28
    #39637493
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМуЛюбые случайные события провоцируют деадлок.Дедлоки провоцируются несовместимым доступом к ресурсам в разном порядке. И ничем более.
...
Рейтинг: 0 / 0
27.04.2018, 14:31
    #39637496
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
МуМуИтог(кто понял).
Любые случайные события провоцируют деадлок. Например неупорядоченная куча(отсутствие индексов) , случайно включенная эскалация, параллелизм который вряд ли работает в одном порядке распределения. Может еще что то?
Да. Курсор, а внутри update. А до него (апдейта одной строки) внутри цикла вычитка на клиента некоторых других строк select-ом, которая зависит от самочувствия клиента и скорости сети. Вы запустите миллион раз этот код, он сделает update для миллиона строк без дедлока. А на 1000001 раз очередной селект затормозит и внезапно Вы получите при попытке очередного апдейта дедлок. Из другой сессии, которая никогда раньше не мешала. Более того, Вы еще миллион раз прогоните тот же код в попытке разобраться - и не поймаете ни одного дедлока.

План - ничто (его сервер каждый раз для себя "рисует" на лету с целью оптимизации ресурсов прямо здесь и прямо сейчас, условия при этом всегда могут быть разные). Порядок выполнения паралелльных инструкций из разных сессий - всё. Вы - не единственный клиент реляционной БД и не работаете при этом с ней в одну сессию. А раз так - дедлоки неизбежны и необходимы. Чтобы оттестировать исключения на клиенте и логику повторной обработки и записи ошибок в отдельные таблицы для дальнейшего разбора полетов.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Может ли запрос с одним и тем же планом выполнения создавать деадлок? / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]