24 hop - deadlocks
DESCRIPTION
TRANSCRIPT
Professional Association for SQL Server
Взаимоблокировки, блокировки и уровни изоляции в SQL Server
Резник ДенисКиевThe Frayman GroupMVP, MCT, MCITP, MCPD, MCTS
Содержание
• Блокировки– Виды блокировок– Гранулярность блокировок– Уровни изоляции
• Взаимоблокировки– Классические взаимоблокировки– Неочевидные взаимоблокировки– Обработка взаимоблокировок
Виды блокировок - Shared
S S
X
Виды блокировок - Exclusive
X
XS
Виды блокировок - Update
U
US
SX
Виды блокировок – Intent блокировки
S
ISIS
Гранулярность блокировки
• Строка (Key или RowID)• Диапазон ключей (несколько строк)• Страница• Экстент• Секция (включается дополнительной опцией)• Таблица• База Данных
READ COMMITTED
• Уровень изоляции по умолчанию• Нет «грязных чтений»• Блокировка на чтение снимается сразу по окончании
операции• Возможны неповторяемые чтения
Professional Association for SQL Server
ДемонстрацияДедлоки при уровне изоляции READ COMMITTED
READ UNCOMMITTED
• Самый лёгкий уровень изоляции• Допускает «грязные чтения»• Не ставится блокировка на чтение• Блокировки на запись удерживаются до конца
транзакции
Professional Association for SQL Server
ДемонстрацияДедлоки при уровне изоляции READ UNCOMMITTED
REPEATABLE READ
• Более жесткий чем READ COMMITTED• Блокировка на чтение удерживается до конца
транзакции• Повторяемые чтения• Возможно появление фантомных записей
Professional Association for SQL Server
ДемонстрацияДедлоки при уровне изоляции REPEATABLE READ
SERIALIZABLE
• Самый жесткий уровень изоляции• Нет фантомных записей• Все блокировки удерживаются до конца транзакции
Professional Association for SQL Server
ДемонстрацияДедлоки при уровне изоляции SERIALIZABLE
READ COMMITTED SNAPSHOT
• Оптимистичная блокировка• При изменении данных, старая версия строки
сохраняется в хранилище версий в tempdb• Не ставится блокировка на чтение• Возможны неповторяемые чтения• Возможно появление фантомных записей
Professional Association for SQL Server
ДемонстрацияДедлоки при уровне изоляции SNAPSHOT READ COMMITTED
SNAPSHOT
• Оптимистичная блокировка• Нет грязных чтений• Повторяемые чтения• Нет фантомных записей• Блокировка на чтение не ставится• При попытке пользователя изменить запись, которая
в данный момент изменяется кем-то, генерируется ошибка
Professional Association for SQL Server
ДемонстрацияДедлоки при уровне изоляции SNAPSHOT
Как избежать?
• Проектировать базу данных так, чтобы не было возможности дедлока
• Выравнивать порядок использования таблиц в транзакциях
• Добавление или удаление индексов• Смена уровня изоляции транзакции• Нерешаемых дедлоков нет.. Есть варианты решения,
которые не до конца устраивают
Ресурсы
• Locking in the Database Engine• Analyze Deadlocks with SQL Server Profiler• Handling Deadlocks in SQL Server• Deadlock Trobleshot series
• Twitter to SQL
Professional Association for SQL Server
Взаимоблокировки, блокировки и уровни изоляции в SQL Server
Резник ДенисКиев@[email protected]://reznik.uneta.com.ua