Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / deadlock victim при операции SELECT / 12 сообщений из 12, страница 1 из 1
17.11.2021, 22:56
    #40112688
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
подключаюсь к БД и делаю единственный запрос:

SELECT * FROM t;

получаю:
Transaction (Process ID ХХХ) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction

БД удаленная у заказчика и собрать логи, графы пока проблематично,
но интересует главный вопрос: как теоретически возможен DEADLOCK для SELECT-операции?
Кто-нибудь может привести пример, чтобы можно было у себя повторить?
...
Рейтинг: 0 / 0
17.11.2021, 23:00
    #40112689
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1,

это легко гуглится, пробовали?

...
Рейтинг: 0 / 0
17.11.2021, 23:06
    #40112691
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
конечно читал, но там только теоретически рассуждения о том, что да, такое возможно...
а мне нужен бы конкретный пример, чтобы мог у себя повторить и проанализировать
вот примера я не нашел, как именно UPDATE/INSERT может в паре с SELECT в другом процессе спровоцировать deadlock
...
Рейтинг: 0 / 0
17.11.2021, 23:22
    #40112693
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1,

Код: sql
1.
2.
3.
4.
drop table if exists d1, d2;

create table d1 (id int);
create table d2 (id int);



последовательно выполнить:
Код: sql
1.
2.
3.
--session 1
begin tran;
select * from d1 with(tablockx);



Код: sql
1.
2.
3.
--session 2
begin tran;
select * from d2 with(tablockx);



Код: sql
1.
2.
--session 1
select * from d2;



Код: sql
1.
2.
--session 2
select * from d1;
...
Рейтинг: 0 / 0
17.11.2021, 23:32
    #40112695
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
так это не то...

повторюсь - в моей сессии только лишь только:
SELECT * FROM t
go

и больше ничего!
как такая сессия может спровоцировать deadlock?
...
Рейтинг: 0 / 0
17.11.2021, 23:57
    #40112697
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1
конечно читал, но там только теоретически рассуждения о том, что да, такое возможно...
а мне нужен бы конкретный пример, чтобы мог у себя повторить и проанализировать
вот примера я не нашел, как именно UPDATE/INSERT может в паре с SELECT в другом процессе спровоцировать deadlock


на ваш вопрос

victorov1но интересует главный вопрос: как теоретически возможен DEADLOCK для SELECT-операции?
(выделение авторское)


там есть ответ:

1 SELECT queries take shared locks on the rows they analyze. Shared locks may conflict exclusive locks from update/delete/insert statements . Two SELECT statements are not going to deadlock, but a SELECT can deadlock with an UPDATE. When such deadlock occurs, the SELECT is usually the victim as it did not perform any update so is always going to loose the draw.

2you are getting the deadlocks because SELECT and UPDATE (or other) operations deadlocking each other, not SELECT vs SELECT. You will have to look at all your queries touching that table and create proper covering indexes for those queries and that will solve your problems. Good covering indexes is the preferred solution rather than using WITH (NOLOCK) table hints.
...
Рейтинг: 0 / 0
18.11.2021, 01:58
    #40112709
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1,

граф что ли покажите тогда.

у вас вторая транзакция тогда точно помимо обычного select без подсказок использовала dml
...
Рейтинг: 0 / 0
18.11.2021, 06:14
    #40112719
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1
так это не то...

повторюсь - в моей сессии только лишь только:
SELECT * FROM t
go

и больше ничего!
как такая сессия может спровоцировать deadlock?


Так это в твоей сессии select.
Чаво в другой сессии - ты не показываешь.
А там update.

ВашЪ КО.
...
Рейтинг: 0 / 0
18.11.2021, 12:06
    #40112785
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
Конечно дедлок возможен, т.к. чтение тоже накладывает мягкую блокировку для транзакционной чистоты данных.

А если попробовать SELECT * from MyTable WITH(NOLOCK) ?

Может уменьшить проблему.
...
Рейтинг: 0 / 0
18.11.2021, 12:15
    #40112789
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
L_argo
мягкую блокировку


S = Shared
...
Рейтинг: 0 / 0
18.11.2021, 16:40
    #40112899
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1


как теоретически возможен DEADLOCK для SELECT-операции?


LOCK_ESCALATION и другими способами, ибо нефиг всю таблицу селектить .
...
Рейтинг: 0 / 0
18.11.2021, 17:38
    #40112928
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
deadlock victim при операции SELECT
victorov1,

with another process означает конфликт с другим процессом, сеансом.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / deadlock victim при операции SELECT / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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