SET DEADLOCK_PRIORITY (Transact-SQL)
Определяет относительную важность продолжения обработки текущего сеанса, если произошла взаимоблокировка с другим сеансом.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Синтаксические обозначения в Transact-SQL
Синтаксис
SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH | <numeric-priority> | @deadlock_var | @deadlock_intvar }
<numeric-priority> ::= { -10 | -9 | -8 | … | 0 | … | 8 | 9 | 10 }
Аргументы
LOW
Указывает, что текущий сеанс будет выбран в качестве жертвы взаимоблокировки, если он входит во взаимоблокировку, а другие сеансы, входящие в цепочку взаимоблокировок, имеют приоритет взаимоблокировки, установленный равным NORMAL или HIGH либо равным целочисленному значению больше -5. Текущий сеанс не будет выбран в качестве жертвы взаимоблокировки, если другие сеансы имеют приоритет взаимоблокировки, установленный равным целочисленному значению меньше -5. Также указывает, что текущий сеанс может быть выбран в качестве жертвы взаимоблокировки, если другой сеанс имеет значение приоритета, установленное в LOW или равное целочисленному значению -5.NORMAL
Указывает, что текущий сеанс будет выбран в качестве жертвы взаимоблокировки, если другие сеансы, входящие в цепочку взаимоблокировок, имеют приоритет взаимоблокировки, установленный равным HIGH или равным целочисленному значению больше 0, но не станет жертвой взаимоблокировки, если другим сеансам назначен приоритет взаимоблокировки, равный LOW или равный целочисленному значению меньше 0. Также указывает, что текущий сеанс может быть выбран в качестве жертвы взаимоблокировки, если другой сеанс имеет значение приоритета, установленное в NORMAL или равное целочисленному значению 0. Значение NORMAL является приоритетом по умолчанию.HIGH
Указывает, что текущий сеанс будет выбран в качестве жертвы в случае взаимоблокировки с другим сеансом, если другой сеанс входит в цепочку взаимного блокирования с приоритетом, равным целочисленному значению больше 5, или может быть выбран в качестве жертвы, если другому сеансу назначен приоритет HIGH или равный целочисленному значению 5.<numeric-priority>
Диапазон целочисленных значений [-10; 10], обеспечивающий 21 уровень приоритета взаимоблокировки. Указывает, что текущий сеанс будет выбран в качестве жертвы в случае взаимоблокировки с другим сеансом, если другой сеанс в цепочке взаимного блокирования имеет более высокое значение приоритета, но не будет выбран в качестве жертвы в случае конфликта с другим сеансом, если другой сеанс в цепочке взаимного блокирования имеет меньшее значение приоритета, чем текущий сеанс. Также указывает, что текущий сеанс может быть выбран в качестве жертвы в результате взаимоблокировки, если другой сеанс в цепочке взаимного блокирования имеет такое же значение приоритета, что и текущий сеанс. LOW соответствует значению -5, NORMAL — 0, HIGH — 5.@ deadlock_var
Символьная переменная, указывающая приоритет взаимоблокировки. Переменной должно быть присвоено значение LOW, NORMAL или HIGH. Переменная должна быть достаточно большой, чтобы вместить всю строку.@ deadlock_intvar
Целочисленная переменная, указывающая приоритет взаимоблокировки. Переменной должно быть назначено целочисленное значение в диапазоне от -10 до 10.
Замечания
Взаимоблокировки возникают, когда два сеанса ожидают доступа к ресурсу, занятому другим сеансом. Когда экземпляр SQL Server обнаруживает, что два сеанса взаимоблокированы, для разрешения конфликта один из сеансов назначается в качестве жертвы. Выполняется откат текущей транзакции жертвы, и клиенту возвращается сообщение об ошибке взаимоблокировки 1205. В результате снимаются все блокировки этого сеанса, и другой сеанс получает возможность продолжить работу.
Выбор сеанса в качестве жертвы зависит от приоритета взаимоблокировки:
Если у обоих сеансов одинаковый приоритет взаимоблокировки, то экземпляр SQL Server выбирает сеанс, откат которого как откат жертвы связан с меньшими затратами ресурсов. Например, если оба сеанса имеют приоритет взаимоблокировки HIGH, то экземпляр выберет в качестве жертвы сеанс, откат которого предположительно связан с меньшими затратами ресурсов.
Если приоритеты взаимоблокировки сеансов различны, то в качестве жертвы выбирается сеанс с более низким приоритетом взаимоблокировки.
Значение SET DEADLOCK_PRIORITY задается на этапе выполнения или запуска, но не на этапе синтаксического анализа.
Разрешения
Требует членства в роли public.
Примеры
В следующем примере используется переменная для присвоения приоритету взаимоблокировки значения LOW.
DECLARE @deadlock_var NCHAR(3);
SET @deadlock_var = N'LOW';
SET DEADLOCK_PRIORITY @deadlock_var;
GO
В следующем примере приоритету взаимоблокировки присваивается значение NORMAL.
SET DEADLOCK_PRIORITY NORMAL;
GO