Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Люди, помогите пожалуйста ответить на следующий вопрос о мёртвых блокировках: What Transact-SQL feature (or complexity) is normally required for deadlocks to occur, but how (why?) might they also occur in a simple situation? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 06:52 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
См. BOL: Contents->Accessing and Changing Relational Data->Locking->Customizing Locking with SQL Server->Deadlocking. Или в индексе набери deadlock и получишь сслыки на несколько статей. Там подробно все описано, даже с картинками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 08:03 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Там много статей, но всё слишком общо. Хотелось бы поконкретнее. Какое свойство языка Transact SQL является типичной причиной мертвых блокировок? Можно ли привести элементарный пример (без использования этого свойства), в котором возникает deadlock? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 08:21 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Если вы все внимательно прочитали, то как же вы не увидели пример Guaranteed Deadlock (Concurrent Trsnsactions) Transaction One Transaction Two Begin Transaction Begin Transaction Update Table Supplier Update Table Part Update Table Part Update Table Supplier Commit Transaction Commit Transaction т.е. к Deadlock-у может привести последовательность команд, хотя каждая команда в отдельности может и не вызывать Deadlock. Или какой смысл тогда вы вкладываете в слова "Какое свойство языка Transact SQL является типичной причиной мертвых блокировок? " ? Есть ли специальная команда START DEADLOCK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 08:47 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Спасибо. Я этот пример конечно же увидел. Мои сомнения в том, что вопросы немного не об этом. Если на первый из вопросов ответ: "Одновременно работающие транзакции", то приведенный пример не подходит в качестве ответа на второй вопрос, так как там требуется привести пример без использования свойства, указанного в ответе на вопрос 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 09:01 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Например declare @i int set @i = 0 while @i < 1000000 begin select * from mytable options(tablockx) /*на таблицу будет наложена экслюзивная блокировка до окончания выполнения запроса */ set @i = @i + 1 end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 09:19 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Я запустил этот пример в Query Analyzer, поставив 1000 вместо 1000000. Выполнилось за 1 сек без сообщений об ошибках и предупреждений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 09:58 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Я не согласен с Glory, последний пример - это не deadlock. BOL:A deadlock occurs when there is a cyclic dependency between _two_ or _more_ threads for some set of resources. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 09:59 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Glory, аплодисменты по поводу "START DEADLOCK"!!! Для меня это стало зарядом бодрости на весь день >Какое свойство языка Transact SQL является типичной причиной мертвых блокировок? Это бессмысленный вопрос. И вообще, что такое "свойство языка Transact SQL"? Что-то не припоминаю такого термина. Пример Guaranteed Deadlock - отличная иллюстрация. Куда проще-то. Хочу напомнить, что транзакции бывают не только явные. Совершенно аналогичный пример можно написать, сделав конфликт между потоком, пишущим в таблицу, на которую повешен триггер и потоком, читающим из таблицы, изменения в которую вносит вышеупомянутый триггер. Будет то же самое, только якобы без транзакций. Хотя реально это окажется все тот же Guaranteed Deadlock. Vasia, ты хоть объясни, чего нужно-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 10:13 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
2Vasia Так вы пытаетесь получить deadlock из одного и того же коннекта ? Deadlock может возникнкть как минимум для двух коннектов. в таблице mytable ~100 000 000 записей 1-ый коннект 2-ой коннект select top 10 * from mytable select * from mytable ~1 сек ~ 30 мин select top 10 * from mytable select * from mytable options(tablockx) ~30 мин + 1 сек ~ 30 мин а пример с циклом я предложил из рассчета, что у вас наверное нет такой большой таблицы. Наверное неудачный пример, согласен с Barabanov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 10:27 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise: START DEADLOCK мне тоже понравилось, но, к сожалению, формулировку исходного вопроса (на англ. языке) придумал не я. Мне тоже не 100% понятно, что в нём имеется ввиду, почему речь идёт о Transact-SQL feature, а не о SQL Server feature. 2Glory: Запуск первого примера из двух коннектов не привел к deadlock - оба запроса успешно отработали примерно за равное время. Второй пример иллюстрирует lock, а не deadlock. Ведь оба коннекта дорабатывают до конца, пусть и по очереди. В случае deadlock SQL выдает сообщение и выбирает жертву. Как бы придумать простой пример, в котором бы этот эффект наблюдался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 10:42 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Блин, а... Чем тебя не устраивает Guaranteed Deadlock, выдранный из BOL и приведенный здесь Glory? Проще не бывает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 11:17 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise Идея устраивает, но мне не удается написать соответствующий SQL, чтобы возникло сообщение о deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 11:31 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
Скрипт: create table t1( col1_1 int, col1_2 sysname ) go create table t2( col2_1 int, col2_2 sysname ) go insert into t1 values (1, '1') insert into t2 values (2, '2') Теперь сценарий, как добиться дедлока. 1. Открываем 1-й коннект. Выполняем begin tran update t1 set col1_2 = '11' 2. Открываем 2-й коннект. Выполняем begin tran update t2 set col2_2 = '222' 3. На 1-м коннекте выполняем update t2 set col2_2 = '22' 4. На 2-м коннекте выполняем update t1 set col1_2 = '111' 5. На 2-м коннекте получаем сообщение "Transaction (Process ID 61) was deadlocked on {lock} resources with another process and has been chosen as the deadlock victim. Rerun the transaction." Так пойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 11:42 |
|
||
|
deadlocks
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise Сработало! Огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2001, 12:08 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3544&tid=1825486]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 358ms |

| 0 / 0 |
