|
Взаимоблокировка в SQL сервер 2008 R2 | ☑ | ||
---|---|---|---|---|
0
Habist
06.03.12
✎
17:48
|
Пытался смоделировать дедлок в 1С в разных режимах и разными способами, максимум что удалось сделать - отловить в ЦУПЕ и профайлере таймауты. Почитал на сайте MSDN - оказалось в 2008 сервере понятие дедлока есть только в теории, на практике монитор блокировок при обнаружении конфликта, выбирает "жертву" взаимоблокировки и откатывает эту транзакцию, вторая транзакция завершается нормально.
Получается что дедлоки - это невоспроизводимая ситуация или я не так что-то понял? Зачем тогда в профайлере и ЦУПЕ различные инструменты по обнаружению и анализу взаимоблокировок остались? |
|||
1
Живой Ископаемый
06.03.12
✎
17:50
|
Наверное потому что в8 работает не только с МС СКЛ?
|
|||
2
Habist
06.03.12
✎
17:57
|
хм... да, не так сформулировал вопрос. Про 2008 SQL я правильно понял?
|
|||
3
упс
06.03.12
✎
17:58
|
нет, не правильно. взаимоблокировка никуда не девается, а разруливать их любой sql server умеет
|
|||
4
thargon
06.03.12
✎
17:59
|
"на практике монитор блокировок при обнаружении конфликта, выбирает "жертву" взаимоблокировки и откатывает эту транзакцию, вторая транзакция завершается нормально" - такое поведение имхо еще с 2000го сервера.
|
|||
5
Habist
06.03.12
✎
18:01
|
тогда какого ЦУП и профайлер показывают таймаут а не дедлок
|
|||
6
rs_trade
06.03.12
✎
18:01
|
(0) потому что взаимоблокировки это не нормально. они дольше держат ресурсы заблокированными. а откат транзакции это тоже не нужная нагрузка на скуль сервер.
|
|||
7
упс
06.03.12
✎
18:06
|
(5) потому что на сервере не происходит взаимоблокировки, а отваливается ожидающая сессия по таймауту
|
|||
8
упс
06.03.12
✎
18:06
|
+(7) когда вы видите "таймаут"
|
|||
9
Habist
06.03.12
✎
18:07
|
а кто-нибудь пытался смоделировать дедлок и увиедть его в ЦУПе? Запускал одновременно 20 пользователей через тест-центр, и все выполняли один код с повышением уровня изоляции транзакции по взаимопересекающимся ресурсам - результат : превышение ожидания времени блокировки в транзакции, т.е. таймаут. Вообще сложилось впечатление, что для моделирования дедлока нужно очень сильно нагрузить сервер, просто так двумя десятками запросами не получится.
|
|||
10
Господин ПЖ
06.03.12
✎
18:07
|
(0) ты чего там навоспроизводил? заставил ждать вторую транзакцию и ее выкинуло по тайм-ауту? это не дедлок вообще-то
|
|||
11
Habist
06.03.12
✎
18:09
|
(10) нет, вторая ждет когда первая освободиться, а первая когда вторая. Классический пример
|
|||
12
rs_trade
06.03.12
✎
18:10
|
(9) дедлок это определенная ситуация. при чем тут нагрузки вообще?
|
|||
13
Habist
06.03.12
✎
18:13
|
(12) А вот попробуйте воссоздать искусственно эту ситуацию, с двумя пользователями. Ситуация-то создается, но проблема в том, что сервер 2008 не регистрирует дедлок в профайлере, а считает это таймаутом
|
|||
14
rs_trade
06.03.12
✎
18:15
|
(13)а зачем мне создавать эту ситуацию? какой в этом смысл? ну создал, ну посмотрел, да дедлок. дальше что?
|
|||
15
Господин ПЖ
06.03.12
✎
18:15
|
(11) он бы тогда и написал "дед-лок"
|
|||
16
Habist
06.03.12
✎
18:16
|
(15) а вот нифига. вот цитата с MSDN:Unlike Microsoft SQL Server, Microsoft SQL Server Compact 3.5 does not have deadlock detection. In SQL Server Compact 3.5, a deadlock is handled by using the lock time-out. If a transaction attempts to place a lock on a resource but cannot do so within the lock time-out, an error occurs. The lock time-out ensures that a transaction does not wait indefinitely for a resource held by another transaction. You can modify the lock time-out. For more information, see Lock Time-out.
If two transactions are involved in a deadlock, one of the transactions waiting for the resource times out and an error occurs. The transaction that times out is still active; it is not committed or rolled back. The other transaction then acquires the lock it requires and continues. For more information, see SQL Server Books Online. |
|||
17
Habist
06.03.12
✎
18:17
|
я так понял это спицифика 2008, 2005 бы написал deadlock
|
|||
18
Habist
06.03.12
✎
18:21
|
(14) чтобы было понятно, просто в ЦУПе захотелось отловить взаимоблокировки, на рабочих базах нет, да и не разрешают, вот и попробовал сам смоделировать, второй день мучаюсь, в итоге одни таймауты
|
|||
19
Господин ПЖ
06.03.12
✎
18:25
|
(16) а причем тут Server Compact 3.5? или у тебя на ней база крутится? О_о
|
|||
20
упс
06.03.12
✎
18:39
|
(0) В SSMS выполнить:
CREATE TABLE ##t1 (a int, b int, c int) INSERT INTO ##t1 SELECT 1,2,3 UNION SELECT 2,3,4 UNION SELECT 3,4,5 CREATE TABLE ##t2 (a int, b int, c int) INSERT INTO ##t2 SELECT 1,2,3 UNION SELECT 2,3,4 UNION SELECT 3,4,5 В новой сессии (1) выполнить: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION UPDATE ##t2 SET c = 2 В новой сессии (2) выполнить: BEGIN TRANSACTION UPDATE ##t1 SET c=1 В сессии (1) выполнить: SELECT * FROM ##t2 В сессии (2) выполнить: SELECT * FROM ##t1 В одной из сессий насладиться: Msg 1205, Level 13, State 56, Line 2 Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. Как смоделировать в 1С думай сам |
|||
21
упс
06.03.12
✎
18:41
|
(20) не все скопировал:
В новой сессии (2) выполнить: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION UPDATE ##t1 SET c=1 |
|||
22
rs_trade
07.03.12
✎
01:01
|
(18) про сифилис и триппер я думаю ты тоже слышал. не хочешь отловить их что бы понять что это такое? )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |