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

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
deadlock victim при операции SELECT
    #40112689
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victorov1,

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

...
Рейтинг: 0 / 0
deadlock victim при операции SELECT
    #40112691
victorov1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
конечно читал, но там только теоретически рассуждения о том, что да, такое возможно...
а мне нужен бы конкретный пример, чтобы мог у себя повторить и проанализировать
вот примера я не нашел, как именно UPDATE/INSERT может в паре с SELECT в другом процессе спровоцировать deadlock
...
Рейтинг: 0 / 0
deadlock victim при операции SELECT
    #40112693
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
deadlock victim при операции SELECT
    #40112695
victorov1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так это не то...

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

и больше ничего!
как такая сессия может спровоцировать deadlock?
...
Рейтинг: 0 / 0
deadlock victim при операции SELECT
    #40112697
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
deadlock victim при операции SELECT
    #40112709
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victorov1,

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

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

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

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


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

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

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

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


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


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


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

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


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