powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Может ли запрос с одним и тем же планом выполнения создавать деадлок?
31 сообщений из 31, показаны все 2 страниц
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637225
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не секрет, что некоторые запросы могут приводить к деадлокам. У меня возник вопрос, а может ли это случиться когда план выполнения один и тот же?(надеюсь разработчики заложили одни и те же правила сортировки)
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637232
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для простоты будем считать что сложный запрос на удаление строк в таблице
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637240
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

План - ничто (его сервер каждый раз для себя "рисует" на лету с целью оптимизации ресурсов прямо здесь и прямо сейчас, условия при этом всегда могут быть разные). Порядок выполнения паралелльных инструкций из разных сессий - всё. Вы - не единственный клиент реляционной БД и не работаете при этом с ней в одну сессию. А раз так - дедлоки неизбежны и необходимы. Чтобы оттестировать исключения на клиенте и логику повторной обработки и записи ошибок в отдельные таблицы для дальнейшего разбора полетов.
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637500
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМуНе секрет, что некоторые запросы могут приводить к деадлокам.
Не секрет, что ВСЕ запросы на обновление данных в конкурентной среде доступа неизбежно будут приводить к дедлокам. И это то, с чем нужно смириться, принять и простить. И соломки заранее подстелить в том месте, где все будет падать.
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637596
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPМуМуНе секрет, что некоторые запросы могут приводить к деадлокам.
Не секрет, что ВСЕ запросы на обновление данных в конкурентной среде доступа неизбежно будут приводить к дедлокам. И это то, с чем нужно смириться, принять и простить. И соломки заранее подстелить в том месте, где все будет падать.

В нормально спроектированной системе с нормальными запросами дедлоков не бывает НИКОГДА
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637646
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovAndy_OLAPпропущено...

Не секрет, что ВСЕ запросы на обновление данных в конкурентной среде доступа неизбежно будут приводить к дедлокам. И это то, с чем нужно смириться, принять и простить. И соломки заранее подстелить в том месте, где все будет падать.

В нормально спроектированной системе с нормальными запросами дедлоков не бывает НИКОГДА
Это так. А далее бывает такая ситуация, что к одной и той же БД обращаются две разные нормально спроектированные системы. И первую корячить нельзя, и вторая делает то, что теперь нужно. И получаются два апдейта на одних и те же таблицах одной и той же БД. А так, да - обе спроектированы нормально, только вот друг о друге знают многое, но далеко не всё.
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39637699
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovВ нормально спроектированной системе с нормальными запросами дедлоков не бывает НИКОГДА
И при этом совершенно не требуется подсказок, смены уровня изоляции или отключения эскалации?
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39641150
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,
Какие то категоричные ответы. Я не знаю про внутреннее устройство движка MSSQL, могу лишь догадываться, поэтому и спрашиваю, интересуюсь скорее. Я понимаю что клиента(приложение) пишет разработчик каждый по своему, я понимаю про упорядоченное обращение к ресурсам. Когда сервером выступает "СЕРВЕР" с большой буквы - он может решать в каком порядке чего обрабатывать. Если мы говорим про вычитку А-Б,Б-А то да. Вопрос про одни и те же алгоритмы, запросы одним батчем, select-update. Когда начинается эта неопределённость?(параллелизм, кучи не упорядочные, случайная эскалация и т.п. ) Вопрос мой был сформулирован был не точно, давайте я его сформулирую более корректно позже с практическими примерами.
...
Рейтинг: 0 / 0
Может ли запрос с одним и тем же планом выполнения создавать деадлок?
    #39641178
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eleanor,

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


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