Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятный deadlock (metadata lock)  [new]
rancid
Member

Откуда: *мск
Сообщений: 115
Доброго времени суток.
Утром подключил Red Gate SQL Monitor к рабочему SQL Server SP4.
Эта зараза установилась нормально и первым делом включила TRACE-флаг 1204, после чего я смог лицезреть десятки дедлоков. На всякий случай снес этот SQL Monitor, но trace-флаг остался - ситуация не изменилась.
На сервере крутится с десяток баз 1С 8.1 и 8.2. Самое удивительное, что пользователи не жалуются абсолютно. Не потому что привыкли, а потому что ошибок у них не появляется. Я удаленно, с помощью dameware, подключался к пользователю от которого сыпались дедлоки - у него работа шла спокойно, без ошибок.
Запустил профайлер, ловить графы дедлоков - за рабочий день около 100 графов, все вот такого типа:
Картинка с другого сайта.
Запросы-"жертвы" могут быть разные - их всего штук пять. Естественно, все активно используют tempdb. В интернетах нашел точно такую же проблему здесь, но, увы, без ответа.
Любую доп. информацию готов предоставить, подскажите, плиз, что это может быть и как с этим бороться. Работать не мешает, но как-то неправильно все это..

или просто снять trace-флаг и жить спокойно:)?
29 июн 11, 13:38    [10892715]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный deadlock (metadata lock)  [new]
rancid
Member

Откуда: *мск
Сообщений: 115
сорри
SELECT @@version
Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Nov 24 2008 16:17:31 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 (Build 7600: )
29 июн 11, 13:42    [10892745]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный deadlock (metadata lock)  [new]
rancid
Member

Откуда: *мск
Сообщений: 115
Граф дедлока в XML:
<deadlock-list>
<deadlock victim="process6ba5c8">
<process-list>
<process id="process6ba5c8" taskpriority="0" logused="652" waitresource="METADATA: database_id = 2 INDEXSTATS(object_id = 560976935, index_id or stats_id = 2)" waittime="1968" ownerId="3253262805" transactionname="CREATE STATISTICS" lasttranstarted="2011-06-29T16:07:19.060" XDES="0x6d05175d0" lockMode="Sch-S" schedulerid="3" kpid="804" status="suspended" spid="86" sbid="0" ecid="0" priority="0" transcount="2" lastbatchstarted="2011-06-29T16:07:19.060" lastbatchcompleted="2011-06-29T16:07:19.057" clientapp="1CV82 Server" hostname="V1C8" hostpid="3020" loginname="sa" isolationlevel="read committed (2)" xactid="3253262805" currentdb="2" lockTimeout="20000" clientoption1="673384544" clientoption2="128056">
<executionStack>
<frame procname="adhoc" line="1" sqlhandle="0x020000004605531be80457550e7037cf918886ddbdb76130">
 SELECT StatMan([SC0]) FROM (SELECT TOP 100 PERCENT [_Q_002_F_000RRef] AS [SC0] FROM [dbo].[#tt14_______________________________________________________________________________________________________________000000291F84] WITH (READUNCOMMITTED,SAMPLE 1.000000e+002 PERCENT) ORDER BY [SC0] ) AS _MS_UPDSTATS_TBL 
</frame>
<frame procname="unknown" line="1" sqlhandle="0x010006000100000020fc4b39030000000000000000000000">
 unknown 
</frame>
<frame procname="adhoc" line="1" sqlhandle="0x02000000e55447142e890f37b13e91f6100712582974fede">
 (@P1 varbinary(1),@P2 varbinary(4),@P3 datetime,@P4 varbinary(1))SELECT T1._Q_000_F_000_TYPE, T1._Q_000_F_000_RTRef, T1._Q_000_F_000_RRRef, T1._Q_000_F_001RRef, T1._Q_000_F_002, T1._Q_000_F_014, T1._Q_000_F_015, T3._Fld5271, T3._Fld5272, T3._Fld5267, T3._Fld5268, T3._Fld5269, T3._Fld5270, T3._Fld5271, T3._Fld5272, T1._Q_000_F_013_TYPE, T1._Q_000_F_013_RTRef, T1._Q_000_F_013_RRRef, T1._Q_000_F_014, T1._Q_000_F_015, T1._Q_000_F_016, T1._Q_000_F_017 FROM #tt17 T1 WITH(NOLOCK) LEFT OUTER JOIN #tt14 T2 WITH(NOLOCK) ON (T2._Q_002_F_001 = T1._Q_000_F_002) LEFT OUTER JOIN _InfoRg5259 T3 ON (((((CASE WHEN T2._Q_002_F_000RRef IS NOT NULL THEN @P1 END = T3._Fld5260_TYPE AND CASE WHEN T2._Q_002_F_000RRef IS NOT NULL THEN @P2 END = T3._Fld5260_RTRef AND T2._Q_002_F_000RRef = T3._Fld5260_RRRef) AND (T3._Fld5261 = @P3)) AND T3._Fld5262 = @P4) AND (T1._Q_000_F_002 = T3._Fld5264)) AND (T1._Q_000_F_001RRef = T3._Fld5263RRef)) 
</frame>
<frame procname="unknown" line="1" sqlhandle="0x000000000000000000000000000000000000000000000000">
 unknown 
</frame>
</executionStack>
<inputbuf>
 (@P1 varbinary(1),@P2 varbinary(4),@P3 datetime,@P4 varbinary(1))SELECT T1._Q_000_F_000_TYPE, T1._Q_000_F_000_RTRef, T1._Q_000_F_000_RRRef, T1._Q_000_F_001RRef, T1._Q_000_F_002, T1._Q_000_F_014, T1._Q_000_F_015, T3._Fld5271, T3._Fld5272, T3._Fld5267, T3._Fld5268, T3._Fld5269, T3._Fld5270, T3._Fld5271, T3._Fld5272, T1._Q_000_F_013_TYPE, T1._Q_000_F_013_RTRef, T1._Q_000_F_013_RRRef, T1._Q_000_F_014, T1._Q_000_F_015, T1._Q_000_F_016, T1._Q_000_F_017 FROM #tt17 T1 WITH(NOLOCK) LEFT OUTER JOIN #tt14 T2 WITH(NOLOCK) ON (T2._Q_002_F_001 = T1._Q_000_F_002) LEFT OUTER JOIN _InfoRg5259 T3 ON (((((CASE WHEN T2._Q_002_F_000RRef IS NOT NULL THEN @P1 END = T3._Fld5260_TYPE AND CASE WHEN T2._Q_002_F_000RRef IS NOT NULL THEN @P2 END = T3._Fld5260_RTRef AND T2._Q_002_F_000RRef = T3._Fld5260_RRRef) AND (T3._Fld5261 = @P3)) AND T3._Fld5262 = @P4) AND (T1._Q_000_F_002 = T3._Fld5264)) AND (T1._Q_000_F_001RRef = T3._Fld5263RRef)) 
</inputbuf>
</process>
</process-list>
<resource-list>
<metadatalock subresource="INDEXSTATS" classid="object_id = 560976935, index_id or stats_id = 2" dbid="2" id="lockd2794c80" mode="Sch-M">
<owner-list>
<owner id="process6ba5c8" mode="Sch-M"/>
</owner-list>
<waiter-list>
<waiter id="process6ba5c8" mode="Sch-S" requestType="wait"/>
</waiter-list>
</metadatalock>
</resource-list>
</deadlock>
</deadlock-list>
29 июн 11, 14:05    [10892963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить