Deadlocks
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: реферат на тему деятельность, сочинения по литературе
| Добавил(а) на сайт: Евтихия.
Предыдущая страница реферата | 5 6 7 8 9 10 11 12 13 14 15 | Следующая страница реферата
Подготовим две транзакции в разных окнах QA и, соответственно, в разных подключениях.
Первая транзакция: T1
-- установим необходимый уровень изоляции SET TRANSACTION ISOLATION LEVEL READ COMMITTED BEGIN TRAN UPDATE Tbl SET X = 4 WHERE X = 4 –- обновим строку X=4 WAITFOR DELAY '00:00:10' UPDATE Tbl SET X = 6 WHERE X = 6 –- обновим строку X=6 COMMIT TRAN |
Стоит заметить, что уровень изоляции в данном случае соответствует уровню изоляции, выставляемому по умолчанию, и делать его ниже крайне не рекомендуется. Оператор WAITFOR нужен для того, чтобы сервер исполнял команды не сразу друг за другом, а с разрывом в 10 секунд, чтобы мы успели переключиться во второе окно и стартовать вторую транзакцию, имитируя тем самым одновременность их выполнения.
Вторая транзакция: T2
--- установим необходимый уровень изоляции SET TRANSACTION ISOLATION LEVEL READ COMMITTED BEGIN TRAN UPDATE Tbl SET X = 2 WHERE X = 2 –- обновим строку X=2 COMMIT TRAN |
Естественно, совершенно не важно, какие значения мы запишем в X в этих транзакциях, в данном случае важно лишь условие выборки.
Запустив T1, а затем, переключившись и запустив T2, мы получим взаимоблокировку. Обратите внимание, что на первый взгляд транзакции вполне безобидны. Более того, условия никак не пересекаются по диапазонам, в первом случае затрагиваются строки X = 4 и X = 6, а во втором X = 2. Можно пойти еще дальше, и изменить в T2 условие таким образом:
UPDATE Tbl SET Y = 10 WHERE Y = 10 |
Тогда условия выборки не будет пересекаться даже по полям! Но взаимоблокировка все равно произойдет.
Как уже упоминалось выше, в реальной ситуации найти виновные транзакции бывает достаточно проблематично, так как по умолчанию известен только процесс, запустивший транзакцию-«жертву» и, как правило, этого недостаточно.
Определение «виновных» транзакций
Существует возможность заставить сервер выдать более полную информацию об ошибке. Однако не следует этой возможностью злоупотреблять, так как производительность сервера при этом серьезно понижается. Для более тонкой настройки сервер поддерживает флаги трассировки (trace flags). Некоторые из этих флагов предназначены для получения более полной информации об ошибках. Флаги устанавливаются с помощью команды DBCC TRACEON (flag,…), а снимаются, соответственно с помощью DBCC TRACEOFF (flag,…).
Вот краткий перечень флагов, которые могут пригодиться при отлове взаимоблокировок:
1204 – сбор расширенной информации о взаимоблокировке.
3605 – выдача информации в EventLog.
Рекомендуем скачать другие рефераты по теме: урок изложение, диплом разработка.
Категории:
Предыдущая страница реферата | 5 6 7 8 9 10 11 12 13 14 15 | Следующая страница реферата