Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 помогите разобраться с deadlock по графу  [new]
HattoryHanzo
Member

Откуда:
Сообщений: 13
Здравствуйте.
Помогите пожалуйста разобраться с дедлоком.

Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4) 


CREATE TABLE [dbo].[Account](
	[ID] [numeric](12, 0) IDENTITY(1,1) NOT NULL,
	[SubscriberID] [numeric](12, 0) NOT NULL,
	[Number] [dbo].[BCOMMENT] NOT NULL,
	[Saldo] [money] NOT NULL,
	[AccountType] [dbo].[BBOOL] NOT NULL,
	[tmpID] [dbo].[BIDENT] NULL,
	[CurrencyID] [dbo].[BIDENT] NOT NULL,
	[CreditLimit] [money] NOT NULL,
	[AdvanceGeneration] [dbo].[BBOOL] NOT NULL,
	[ServiceGrouping] [dbo].[BBOOL] NOT NULL,
 CONSTRAINT [PKAccountID] PRIMARY KEY CLUSTERED ([ID] ASC))

CREATE NONCLUSTERED INDEX [IdxAccountCurrencyID] ON [dbo].[Account] ([CurrencyID] ASC)
CREATE NONCLUSTERED INDEX [IdxAccountSubscriberID] ON [dbo].[Account] ([SubscriberID] ASC)
CREATE NONCLUSTERED INDEX [IdxAccountSIDCIDAT] ON [dbo].[Account] ([SubscriberID] ASC,[CurrencyID] ASC,[AccountType] ASC) INCLUDE ( [CreditLimit])


2012-02-17 14:10:31.10 spid4s      Deadlock encountered .... Printing deadlock information
2012-02-17 14:10:31.10 spid4s      Wait-for graph
2012-02-17 14:10:31.10 spid4s      
2012-02-17 14:10:31.10 spid4s      Node:1

2012-02-17 14:10:31.10 spid4s      KEY: 11:72057594057195520 (0100d09659b8) CleanCnt:3 Mode:U Flags: 0x0
2012-02-17 14:10:31.10 spid4s       Grant List 1:
2012-02-17 14:10:31.10 spid4s         Owner:0x1F7C5000 Mode: U        Flg:0x0 Ref:0 Life:00000001 SPID:75 ECID:0 XactLockInfo: 0x55C56E1C
2012-02-17 14:10:31.10 spid4s         SPID: 75 ECID: 0 Statement Type: UPDATE Line #: 48
2012-02-17 14:10:31.10 spid4s         Input Buf: Language Event: exec Estimator 1, 1
2012-02-17 14:10:31.10 spid4s       Requested By: 
2012-02-17 14:10:31.10 spid4s         ResType:LockOwner Stype:'OR'Xdes:0x48DEA770 Mode: U SPID:80 BatchID:0 ECID:0 TaskProxy:(0x4B9F4378) Value:0x453c8e00 Cost:(0/707588)
2012-02-17 14:10:31.10 spid4s      
2012-02-17 14:10:31.10 spid4s      Node:2

2012-02-17 14:10:31.10 spid4s      KEY: 11:72057594057195520 (0100cb085051) CleanCnt:2 Mode:U Flags: 0x0
2012-02-17 14:10:31.10 spid4s       Grant List 0:
2012-02-17 14:10:31.10 spid4s         Owner:0x42A417E0 Mode: U        Flg:0x0 Ref:0 Life:00000001 SPID:80 ECID:0 XactLockInfo: 0x48DEA794
2012-02-17 14:10:31.10 spid4s         SPID: 80 ECID: 0 Statement Type: UPDATE Line #: 48
2012-02-17 14:10:31.10 spid4s         Input Buf: Language Event: exec Estimator 4, 1
2012-02-17 14:10:31.10 spid4s       Requested By: 
2012-02-17 14:10:31.10 spid4s         ResType:LockOwner Stype:'OR'Xdes:0x55C56DF8 Mode: U SPID:75 BatchID:0 ECID:0 TaskProxy:(0x51F1C378) Value:0x1f7c5020 Cost:(0/1074844)
2012-02-17 14:10:31.10 spid4s      
2012-02-17 14:10:31.10 spid4s      Victim Resource Owner:
2012-02-17 14:10:31.10 spid4s       ResType:LockOwner Stype:'OR'Xdes:0x48DEA770 Mode: U SPID:80 BatchID:0 ECID:0 TaskProxy:(0x4B9F4378) Value:0x453c8e00 Cost:(0/707588)
2012-02-17 14:10:31.10 spid13s     deadlock-list
2012-02-17 14:10:31.10 spid13s      deadlock victim=process7fa5c8
2012-02-17 14:10:31.10 spid13s       process-list
2012-02-17 14:10:31.10 spid13s        process id=process7fa5c8 taskpriority=0 logused=707588 waitresource=KEY: 11:72057594057195520 (0100d09659b8) waittime=1468 ownerId=122363425 transactionname=user_transaction lasttranstarted=2012-02-17T14:10:18.307 XDES=0x48dea770 lockMode=U schedulerid=1 kpid=41016 status=suspended spid=80 sbid=0 ecid=0 priority=0 transcount=2 lastbatchstarted=2012-02-17T14:10:07.157 lastbatchcompleted=2012-02-17T14:10:07.147 clientapp=SQLAgent - TSQL JobStep (Job 0x5CAE8A6C3107874BA6347391D4BAAEEF : Step 1) hostname=LOADTESTWIN2000 hostpid=3136 loginname=NT AUTHORITY\SYSTEM isolationlevel=read committed (2) xactid=122363425 currentdb=11 lockTimeout=4294967295 clientoption1=673185824 clientoption2=128056
2012-02-17 14:10:31.10 spid13s         executionStack
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.AccountSaldoUpd line=48 stmtstart=3042 stmtend=3432 sqlhandle=0x03000b00f73e37106a6dd800fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     update Account with(rowlock)
    set
      Saldo = Account.Saldo - ta.Sum,
      CreditLimit = ta.NewCreditLimit
    from #TAccount ta
    where Account.ID = ta.ID


-- drop table #TAccount     
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.BillingEntryAdd line=249 stmtstart=16888 stmtend=16938 sqlhandle=0x03000b00d943dd02d336c100fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     exec AccountSaldoUpd     
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.EstimatorDialUpByTraffic line=346 stmtstart=29434 stmtend=30092 sqlhandle=0x03000b00f6f8a1070744c100fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     exec BillingEntryAdd
          @ServiceAccountID = null,
          @AccountID = null,
          @BillingEventID = null,
          @Sum = null,
          @EntryDate = null,
          @EntryType = null,
          @NotChangeStatus = null,
          @ID = null,
          @SubscriberID = null,
          @NoPrint = @NoPrint     
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.Estimator line=305 stmtstart=18950 stmtend=19560 sqlhandle=0x03000b002ed70000db36d300fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     exec EstimatorDialUpByTraffic
          @EstimatorsCount = @EstimatorsCount,
          @EstimatorNum = @EstimatorNum,
          @EstimatorMaxRecCount = @EstimatorMaxRecCountForDialUpByTraffic,
          @EstimatedRecCount = @LastEstimatedRecCountDialUpByTraffic out,
          @NoPrint = @NoPrint     
2012-02-17 14:10:31.10 spid13s          frame procname=adhoc line=1 sqlhandle=0x01000b00a3662018c09bc50a000000000000000000000000
2012-02-17 14:10:31.10 spid13s     exec Estimator 4, 1     
2012-02-17 14:10:31.10 spid13s         inputbuf
2012-02-17 14:10:31.10 spid13s     exec Estimator 4, 1    
2012-02-17 14:10:31.10 spid13s        process id=process8887a8 taskpriority=0 logused=1074844 waitresource=KEY: 11:72057594057195520 (0100cb085051) waittime=1484 ownerId=122379418 transactionname=user_transaction lasttranstarted=2012-02-17T14:10:27.643 XDES=0x55c56df8 lockMode=U schedulerid=2 kpid=41332 status=suspended spid=75 sbid=0 ecid=0 priority=0 transcount=2 lastbatchstarted=2012-02-17T14:10:07.060 lastbatchcompleted=2012-02-17T14:10:07.060 clientapp=SQLAgent - TSQL JobStep (Job 0x7AAD56674E3FC64292C4ED3D7F0E1DF7 : Step 1) hostname=LOADTESTWIN2000 hostpid=3136 loginname=NT AUTHORITY\SYSTEM isolationlevel=read committed (2) xactid=122379418 currentdb=11 lockTimeout=4294967295 clientoption1=673185824 clientoption2=128056
2012-02-17 14:10:31.10 spid13s         executionStack
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.AccountSaldoUpd line=48 stmtstart=3042 stmtend=3432 sqlhandle=0x03000b00f73e37106a6dd800fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     update Account with(rowlock)
    set
      Saldo = Account.Saldo - ta.Sum,
      CreditLimit = ta.NewCreditLimit
    from #TAccount ta
    where Account.ID = ta.ID


-- drop table #TAccount     
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.BillingEntryAdd line=249 stmtstart=16888 stmtend=16938 sqlhandle=0x03000b00d943dd02d336c100fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     exec AccountSaldoUpd     
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.EstimatorNetflow line=679 stmtstart=60756 stmtend=61384 sqlhandle=0x03000b002f1d96087046c100fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     exec BillingEntryAdd
            @ServiceAccountID = null,
            @AccountID = null,
            @BillingEventID = null,
            @Sum = null,
            @EntryDate = null,
            @EntryType = null,
            @NotChangeStatus = null,
            @ID = null,
            @SubscriberID = null     
2012-02-17 14:10:31.10 spid13s          frame procname=loadhead.dbo.Estimator line=366 stmtstart=22816 stmtend=23496 sqlhandle=0x03000b002ed70000db36d300fa9f00000100000000000000
2012-02-17 14:10:31.10 spid13s     exec EstimatorNetflow
          @EstimatorsCount = @EstimatorsCount,
          @EstimatorNum = @EstimatorNum,
          @EstimatorMaxRecCount = @EstimatorMaxRecCountForNetflow,
          @EstimatedRecCount = @LastEstimatedRecCountNetflow out,
          @MaxEstimatedEventID = @MaxEstimatedEventID out,
          @NoPrint = @NoPrint     
2012-02-17 14:10:31.10 spid13s          frame procname=adhoc line=1 sqlhandle=0x01000b005b10792180259c06000000000000000000000000
2012-02-17 14:10:31.10 spid13s     exec Estimator 1, 1     
2012-02-17 14:10:31.10 spid13s         inputbuf
2012-02-17 14:10:31.10 spid13s     exec Estimator 1, 1    
2012-02-17 14:10:31.10 spid13s       resource-list
2012-02-17 14:10:31.10 spid13s        keylock hobtid=72057594057195520 dbid=11 objectname=loadhead.dbo.Account indexname=PKAccountID id=lock40c72f40 mode=U associatedObjectId=72057594057195520
2012-02-17 14:10:31.10 spid13s         owner-list
2012-02-17 14:10:31.10 spid13s          owner id=process8887a8 mode=U
2012-02-17 14:10:31.10 spid13s         waiter-list
2012-02-17 14:10:31.10 spid13s          waiter id=process7fa5c8 mode=U requestType=wait
2012-02-17 14:10:31.10 spid13s        keylock hobtid=72057594057195520 dbid=11 objectname=loadhead.dbo.Account indexname=PKAccountID id=lock43b2db80 mode=U associatedObjectId=72057594057195520
2012-02-17 14:10:31.10 spid13s         owner-list
2012-02-17 14:10:31.10 spid13s          owner id=process7fa5c8 mode=U
2012-02-17 14:10:31.10 spid13s         waiter-list
2012-02-17 14:10:31.10 spid13s          waiter id=process8887a8 mode=U requestType=wait


К сообщению приложен файл. Размер - 124Kb
21 фев 12, 12:14    [12128834]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ахаха. биллинг ака бухучет ака машина проводок? дебет / кредит, короче?
класска от порядка изменения + хинты с перепугу поставлены - убрать
общий код такой, небось:

begin tran
update accounts where id = @id1
update accounts where id = @id2
commit


1.убираете хинты
2.переделываете так:

begin tran
declare @i int
select @i = count(*) from accounts where id in ( @id1, @id2 )
update accounts where id = @id1
update accounts where id = @id2
commit


3.PROFIT
21 фев 12, 12:19    [12128890]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ой. вечно я хинты забываю. select count from accounts with (xlock) конечно же
21 фев 12, 12:20    [12128897]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
У вас доступ к ключам одной таблицы в разном порядке. По #TAccount.ID ведь нет никакого индекса, правда?
21 фев 12, 12:20    [12128900]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Гавриленко Сергей Алексеевич
У вас доступ к ключам одной таблицы в разном порядке. По #TAccount.ID ведь нет никакого индекса, правда?


точно. и индекс во времянке создать. может и count(*) не нужно будет делать.
21 фев 12, 12:25    [12128938]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
HattoryHanzo
Member

Откуда:
Сообщений: 13
Гавриленко Сергей Алексеевич,

Да, по #TAccount.ID нет индекса.
И в таблице #TAccount не более 1000 записей.
Есть 4 экземпляра процедуры Estimator. Каждая обслуживает свои записи в Account.
21 фев 12, 12:25    [12128942]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
HattoryHanzo
Member

Откуда:
Сообщений: 13
Crimean,

Да биллинг, Вы правы.
21 фев 12, 12:28    [12128962]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
HattoryHanzo
Да, по #TAccount.ID нет индекса.
Сделайте кластерный и, если можно, уникальный.

Сообщение было отредактировано: 21 фев 12, 12:28
21 фев 12, 12:28    [12128963]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
HattoryHanzo
Member

Откуда:
Сообщений: 13
Гавриленко Сергей Алексеевич
HattoryHanzo
Да, по #TAccount.ID нет индекса.
Сделайте кластерный и, если можно, уникальный.

Да, сделаю кластерный уникальный. Только не пойму как это поможет.
21 фев 12, 12:31    [12128992]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
HattoryHanzo
Да, сделаю кластерный уникальный. Только не пойму как это поможет.


у вас проблемы от порядка наложения блокировок
повторить оч просто

create table a ( id int primary key )
go
insert into a select 1
insert into a select 2
go

теперь открываем 2 конекшена

#1
begin tran
update a set id = id where id = 1

#2
begin tran
update a set id = id where id = 2

#1
begin tran
update a set id = id where id = 2

#2
begin tran
update a set id = id where id = 1

здесь ловим дедлок (не забыть сделать rollback или commit по желанию в живом конекшене)

если в начале поставить select count(*) from a with (xlock) where id in ( 1,2 ) то один конекшен выполнится, второй будет его ждать и после тоже выполнится

только у вас из-за вашего with(rowlock) происходит не x/x и не u>x а u/u, что сути дела не меняет
21 фев 12, 13:01    [12129186]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а добавив индекс в свою времянку вы фиксируете (и унифицируете) порядок наложения блокировок на accounts
в результате вышеописанной ситуации быть не должно
ну на край или подопрете ваши update хинтом with (xlock) или поставите таки count(*) from with (xlock) в начале транзакции
21 фев 12, 13:02    [12129194]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
udploсk?
Guest
HattoryHanzo
Гавриленко Сергей Алексеевич
пропущено...
Сделайте кластерный и, если можно, уникальный.

Да, сделаю кластерный уникальный. Только не пойму как это поможет.


в этом случае порядок обхода во всех конектах будет одинаков...



ЗЫ


мне не совсем понятно откуда появились по две u блокировки на конект, одна из них должны была конвертнуться к x к тому моменту как запрашивается вторая u.

у вас в точно там ни каких селектов с udploсk раньше нет?
21 фев 12, 13:12    [12129287]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
2 u/u
Guest
Crimean
только у вас из-за вашего with(rowlock) происходит не x/x и не u>x а u/u, что сути дела не меняет

вот эти 2 u/u мне и не понятны, как такое могло сучиться на двух update-ах, должны быть x(grant)-u(wait) - u(victim)-x(grant)
21 фев 12, 13:15    [12129320]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
HattoryHanzo
Member

Откуда:
Сообщений: 13
udploсk?
HattoryHanzo
пропущено...

Да, сделаю кластерный уникальный. Только не пойму как это поможет.


в этом случае порядок обхода во всех конектах будет одинаков...



ЗЫ


мне не совсем понятно откуда появились по две u блокировки на конект, одна из них должны была конвертнуться к x к тому моменту как запрашивается вторая u.

у вас в точно там ни каких селектов с udploсk раньше нет?


До этого есть запрос с updlock из таблицы Entry. А в ней есть поле AccountID ну и FK соответственно. Из таблицы Account запросов с updlock нет.
21 фев 12, 13:24    [12129426]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
HattoryHanzo
Member

Откуда:
Сообщений: 13
Crimean,

У меня эти 2 транзакции изменяют разные записи в таблице.
21 фев 12, 13:26    [12129437]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
HattoryHanzo
У меня эти 2 транзакции изменяют разные записи в таблице.


вопрос в порядке обновления. универсальный рецепт - в самом начале транзакции сделать count(*) with (xlock)
ну или изучать плотнее механизм блокировок, только универсальный проще и точно работает
21 фев 12, 13:46    [12129735]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
2 u/u
Guest
Crimean
HattoryHanzo
У меня эти 2 транзакции изменяют разные записи в таблице.


вопрос в порядке обновления. универсальный рецепт - в самом начале транзакции сделать count(*) with (xlock)
ну или изучать плотнее механизм блокировок, только универсальный проще и точно работает

если записи во временных таблицах не пересекаются - то дидлока не будет, а если пересекаются - то дидлок должен быть не u/u-u/u.
21 фев 12, 13:55    [12129846]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
2 u/u,

ну так sp_lock вам в руки
21 фев 12, 14:06    [12129982]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
2 u/u
Guest
Crimean
2 u/u,

ну так sp_lock вам в руки

мне то зачем?
я не знаю ситуаций в которых два udpate-а по кластерному ключу приведут к дидлоку на ключах u/u - u/u
может вы знаете?
я буду благодарен если вы поделитесь своими знаниями.
21 фев 12, 14:19    [12130116]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
2 u/u
я не знаю ситуаций в которых два udpate-а по кластерному ключу приведут к дидлоку на ключах u/u - u/u


запросто возможно - там with (rowlock). а дедлок update vs update типа u/x - классика
21 фев 12, 16:05    [12131365]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
2 u/u
Guest
Crimean
2 u/u
я не знаю ситуаций в которых два udpate-а по кластерному ключу приведут к дидлоку на ключах u/u - u/u


запросто возможно - там with (rowlock). а дедлок update vs update типа u/x - классика


вы издеваетесь?

в графе нет X блокировок, НИ ОДНОЙ, только u. Поэтому "класический дедлок update vs update типа u/x" к этому случаю не имеет отношения.
21 фев 12, 16:15    [12131468]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
2 u/u,

готовим

-- drop table a
create table a ( id int primary key , flag int )
go
create index ia_1 on a ( flag )
go
insert into a select 1, 1
insert into a select 2, 2
insert into a select 3, 3
insert into a select 4, 4
go


#1

set nocount on
if @@trancount <> 0 rollback

drop table #a
go

create table #a ( id int , flag int )
go

insert into #a select 1 , 1
insert into #a select 2 , 1
insert into #a select 3 , 1
insert into #a select 4 , 1

while 1=1 begin

begin tran

update a set a.flag = a.flag + b.flag from a a with (rowlock) join #a b on b.id = a.id
update a set a.flag = a.flag - b.flag from a a with (rowlock) join #a b on b.id = a.id

commit

end

rollback


#2

set nocount on
if @@trancount <> 0 rollback

drop table #a
go

create table #a ( id int , flag int )
go

insert into #a select 4 , 1
insert into #a select 3 , 1
insert into #a select 2 , 1
insert into #a select 1 , 1

while 1=1 begin

begin tran

update a set a.flag = a.flag + b.flag from a a with (rowlock) join #a b on b.id = a.id
update a set a.flag = a.flag - b.flag from a a with (rowlock) join #a b on b.id = a.id

commit

end

rollback



может я чего не понимаю?

К сообщению приложен файл. Размер - 46Kb
21 фев 12, 16:55    [12131820]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
2 u/u
Guest
Crimean,

я был уверен, что при nested loop + index seek u в х, как и в случае скана, конвертится сразу...
оказалось что все чуть сложнее

последовательность блокировок следующая

1. накладываются U на ключи 4,3,2,1 (именно в такой последовательности)

2. накладывается (WTF?) U блокировка на ключ 1
3. накладывается блокировка X на ключ 1 (точнее конвертится U в X)


пункты 2,3 повторяются для всех записей в порядке кластерного ключа


4 снимаются все X блокировки


при scan-е/range seek-е все проще

накладывается u блокировка и тут же конвертится в x либо снимается... (в зависимости попадает ли запись в условия апдейта)




PS
это если не обращать внимания на ix/iu блокировки страниц/обектов
21 фев 12, 17:36    [12132177]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
Crimean
Member

Откуда:
Сообщений: 13147
2 u/u,

я просто это уже проходил. в свое время голову тоже поломал
21 фев 12, 17:43    [12132245]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с deadlock по графу  [new]
2 u/u
Guest
Crimean
2 u/u,

я просто это уже проходил. в свое время голову тоже поломал

а какого... делается повторное наложение U блокировки (пункт 2)
21 фев 12, 17:45    [12132262]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить