INF: Анализ и избежание взаимоблокировок в SQL Server

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:169960
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
Microsoft SQL Server поддерживает целостность транзакций и базы данныхсогласованность с помощью блокировок. При необходимости использует SQL Server версии 6.5 строки-Блокировка на уровне для операций вставки и блокировка на уровне страницы используется для другихоперации. Как и в любой системе реляционной базы данных, блокировки может привести квзаимоблокировки между пользователями.

Предположим, что пользователь User1 (или Connection1) заблокировал элемент данных «A» итребуется блокировка данных товара «б». Пользователь2 заблокировал элемент данных «B» и теперьтребуется блокировка элемента данных, «а». В этом случае SQL Server, либо пользователь User1 илиUser2 будет жертвы взаимоблокировки и другие пользователи получают правоЗапрошенная блокировка.

В SQL Server разработчик приложения может решить, какое подключение будетс помощью SET DEADLOCK_PRIORITY быть кандидатом для жертвы. ЕслиРазработчик не назначить приоритет взаимоблокировки, SQL Server выбираетжертвы, выбрав в процессе завершения круглыйЦепочка блокировок.

Системы приложений баз данных может измениться при переносить из одногореляционные базы данных в другую, в зависимости от реализациисистема реляционной базы данных. Одной из областей, чтобы просмотреть изменения в поведенииБлокировка. В этой статье объясняется, как анализировать взаимоблокировок в SQLСервер и приемов, которые можно использовать во избежание их.
Дополнительная информация
В этой статье подчеркивается использование выходных данных трассировки флаг T1204 для анализавзаимоблокировки. Если установлен флаг трассировки T1204, SQL Server выводит сведения оо взаимоблокировке при его возникновении. Чтобы использовать этот флаг трассировки, используйтеследующие команды в командной строке для запуска SQL Server:
   sqlservr -c -T1204				

Результаты трассировки отправляются в окно консоли, если установлен флаг трассировкиT3605 отправляет выходные данные трассировки в журнал ошибок.

Взаимоблокировки возникает, когда два подключения обновления таблиц в обратном порядке.Например, одно подключение вставляет в таблицу «example1» сначала и затемв «example2», во время другого подключения вставляет в таблицу «example2»а затем в «example1» в рамках транзакции. Примером является ситуацияполезные показывают, как избежать взаимоблокировок.

Ниже приведены инструкции SQL, используемый для создания таблицы, используемой для данногоПример:
   create table example1 (column1 int, column2 char(20), column3 char(50))   go   create table example2 (column1 int, column2 char(20), column3 char(50))   go   declare @lvar int   select @lvar = 0   while @lvar < 500   begin   insert into example1 values (@lvar, 'AAA', 'CCC')   insert into example2 values (@lvar, 'AAA', 'CCC')   select @lvar = @lvar + 1   end   go   create unique clustered index ex1ind1 on example1 (column1, column2)   with fill factor = 90, PAD_INDEX   go   create unique clustered index ex2ind1 on example2 (column1, column2)   with fill factor = 90, PAD_INDEX   go				

Пример 1: Таблица вставок в обратном порядке

В этом примере две таблицы были вставлены в обратном порядке и взаимоблокировкипроизошло. Взаимоблокировки возникают при выполнении двух или нескольких подключенийобновляет или удаляет на таблицах в обратном порядке.
   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')   Connection2 > INSERT INTO example2 VALUES (200, 'AAAB', 'CCC')   Connection2 > INSERT INTO example1 VALUES (200, 'AAAB', 'CCC')				

На этом этапе Connection1 может блокировать Connection2, так как строкаConnection2 Вставка может быть на той же странице, где имеется Connection1уже вставлены строки и удерживает блокировку.
   Connection1 > INSERT INTO example2 VALUES (100, 'AAAA', 'CCC')				

На этом этапе Connection2 может блокировать Connection1, так как строкаConnection1 Вставка может быть на той же странице, где есть Connection2уже вставлены строки и удерживает блокировку. Это приводит к взаимоблокировке.

Ниже представлен результат для флага трассировки 1204 возникновения взаимоблокировки.
97/04/20 11:51:57.88 spid13   *** DEADLOCK DETECTED with spid 14 ***   spid 13 requesting EX_PAGE (waittype 0x8005), blocked by:     EX_PAGE: spid 14, dbid 6, page 0x188, table example2, indid 0x1     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example2 VALUES (100,     'AAAA', 'CCC')   spid 14 waiting for EX_PAGE (waittype 0x8005), blocked by:     EX_PAGE: spid 13, dbid 6, page 0x180, table example1, indid 0x1     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES (200,   'AAAB', 'CCC')   VICTIM: spid 13, pstat 0x0000 , cputime 30				

Каждой строке трассировки взаимоблокировок можно сообщить пользователям дополнительные сведения о взаимоблокировке.Connection1 spid 13 а Connection2 — spid 14 (можно определитьИдентификатор SPID, связанных с подключением sp_who системы храненияпроцедура).
   >> 97/04/20 11:51:57.88 spid13   *** DEADLOCK DETECTED with spid 14 ***   The deadlock was detected between spid 13 and spid 14.   >> spid 13 requesting EX_PAGE (waittype 0x8005), blocked by:   >>   EX_PAGE: spid 14, dbid 6, page 0x188, table example2, indid 0x1   >>   pcurcmd INSERT(0xc3), input buffer: INSERT INTO example2 VALUES   (100, 'AAAA', 'CCC')				

SPID 13 запрашивает блокировку EX_PAGE и заблокированного spid 14, которыйуже имеет блокировку EX_PAGE для страницы 0x188 в таблице example2 в dbid 6. ВБлокировка удерживается на странице, принадлежащих кластеризованного индекса.
      Indid Value         Description-------------------------------------         0                Data page if there is no clustered index, or the                          leaf page of a clustered index if there is one         1                Non-leaf page of the clustered index page       255                Text/image page    Any other value       Non-clustered secondary index				

Текущая команда, выполняемая с spid 13 — это инструкции INSERT, а также трассировкичасть входного буфера.
   >> spid 14 waiting for EX_PAGE (waittype 0x8005), blocked by:   >>   EX_PAGE: spid 13, dbid 6, page 0x180, table example1, indid 0x1   >>   pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES   (200, 'AAAB', 'CCC')				

SPID 14 Ожидание блокировки EX_PAGE и блокируется spid 13, которыйуже владеет блокировкой EX_PAGE на одной странице.
   >> VICTIM: spid 13, pstat 0x0000 , cputime 30   SQL Server has chosen spid 13 as the deadlock victim.				

Ниже приводится объяснение, что означают различные блокировки втрассировки:

SH_INT и EX_INT
Блокировка с намерением, предпринимаемые для элемента более высокого уровня (например, таблицы)до блокировок более низкого уровня (например, странице) следует выполнить, посколькуДиспетчер блокировок не подозревает о том, что связи между различными типамиэлементы (в этот случай страниц и таблиц). Если блокировку EX_INT не был переведентаблицы перед получением блокировки EX_PAG на страницах, другой пользователь может получитьEX_TAB блокировку ту же таблицу и диспетчер блокировок не будет знать,существует конфликт. В настоящее время SQL Server содержит только для таблиц с намерением.Существует два типа блокировки с намерением: общий (SH_INT) и монопольная (EX_INT)блокировки.

EX_PAGE
Это исключительный страницу блокировки, которое выполняется при обновлении страницы из-заинструкции INSERT, DELETE или обновления с блокировкой на уровне строк вставки (IRL)отключено.

UP_PAGE
Это блокировка обновления страницы, берется вместо блокировки общую страницуЕсли отсканированные страницы и оптимизатор знает, что страница будетобновлено (или использовать подсказку UPDLOCK).

PR_EXT, NX_EXT, UPD_EXT и EX_EXT
Эти блокировки выделение и освобождение места на диске. UPD_EXTберется при выделении или освобождение страницы из существующей степени идругие счета используются при выделении или освобождение всего экстентов.

IX_PAGE и LN_PAGE
Они IRL блокировок. IX_PAGE блокировка намерения к строки блокировка на странице.LN_PAGE съемки, когда страница, на которой IRL производится следует разбить.

RLOCK и XRLOCK
Эти Краткосрочные блокировки обход дерева b индекса. Существуютдва вида такого рода блокировки: общий (RLOCK) и монопольная (XRLOCK).Общие блокировки во время сканирования, пока монопольной блокировкистраницы индекса во время обновления.

EX_TAB
Это монопольная блокировка таблицы, возникающая, когда оптимизатор SQL ServerОпределяет, что просмотр таблицы наиболее эффективным способом устранения обновлениезапрос (например, когда для таблицы без индексов). EX_TAB блокировкитакже отображаются при блокировать таблицу с помощью подсказки TABLOCKX или SQL Serverукрупняет блокировку страниц в таблице до блокировки таблицы.

SH_TAB
Это разделяемую блокировку таблицы, используется, если предполагается, что оптимизаторБольшая часть таблицы будет сканироваться (или укрупняет блокировку страницы) илиИспользуется подсказка TABLOCK.

В предыдущем примере взаимоблокировок можно избежать, если обновление двух подключенийтаблицы в следующей последовательности:
   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')   Connection2 > INSERT INTO example1 VALUES (200, 'AAAB', 'CCC')   Connection2 > INSERT INTO example2 VALUES (200, 'AAAB', 'CCC')   Connection1 > INSERT INTO example2 VALUES (100, 'AAAA', 'CCC')				

Пример 2: Вставка в различные части той же таблицы

Этой взаимоблокировки может также возникать при двух подключений вставить в другуючасти той же таблицы в обратном порядке, когда строки совместно использовать страницы. ДляПример:
   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')   Connection2 > INSERT INTO example1 VALUES (400, 'AAAB', 'CCC')   Connection1 > INSERT INTO example1 VALUES (400, 'AAAA', 'CCC')				

В этот образец таблицы есть кластеризованный индекс на первый столбецв таблице example1. Будет строк с одинаковыми значениями для первого столбцакак правило, делятся на одной странице. В приведенном примере вставки второй строкиConnection1 скорее всего будет приходиться на той же странице, что первая строка, вставляемаяпо Connection2 так как они оба имеют значение 400 кластеризованного индекса. Этоприводит к Connection2 блоку Connection1.
   Connection2 > INSERT INTO example1 VALUES (100, 'AAAB', 'CCC')				

Теперь Connection2 могут быть заблокированы по Connection1, что приводит к взаимоблокировке.Ниже приведен трассировки взаимоблокировок.
   97/04/20 12:56:01.40 spid16   *** DEADLOCK DETECTED with spid 15 ***   spid 16 requesting EX_PAGE (waittype 0x8005), blocked by:     EX_PAGE: spid 15, dbid 6, page 0x2c5, table example1, indid 0     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES (100,   'AAAB', 'CCC')   spid 15 waiting for EX_PAGE (waittype 0x8005), blocked by:     EX_PAGE: spid 16, dbid 6, page 0x8bd, table example1, indid 0     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES (400,   'AAAA', 'CCC')   VICTIM: spid 16, pstat 0x0000 , cputime 130				

16 Запроса spid для EX_PAGE блокировку страницы 0x2c5, блокируется spid 15,который уже владеет блокировкой EX_PAGE для страницы 0x2c5 после был первымВставка. И spid 15 также получил заблокирована spid 16 в ожидании EX_PAGEБлокировка страницы 0x8db интерлиньяжа к взаимоблокировкам.

Можно избежать этой взаимоблокировки, используя следующую команду для включения IRLдля таблицы example1.
   sp_tableoption 'example1', 'insert row lock', true				

Пример 3: Вставка с помощью IRL

IRL позволяет совместно использовать страницы, когда они только вставить несколько пользователейоперации, которые часто приводит к лучшей производительности. Однако включение IRLне всегда уменьшает взаимоблокировок. В некоторых случаях может привести к IRLвзаимоблокировки.
   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')   Connection2 > INSERT INTO example1 VALUES (105, 'AAAB', 'CCC')				

С поддержкой IRL оба соединения будет удерживать блокировки IX_PAGE на страницесодержащий две новых строк. Если IRL был отключен, будет иметь Connection1получена блокировка EX_PAGE и Connection2 будут заблокированынемедленно.
   Connection2 > UPDATE example1 SET column3 = 'CCCB' where column1 = 105   and column2 = 'AAAB'				

На этом этапе Connection2 требует блокировки с монопольной страницы для этого обновленияоператор, который несовместим с его Connection1 IX_PAGE блокировку.Таким образом будет ожидать Connection2.
   Connection1 > UPDATE example1 SET column3 = 'CCCA' where column1 = 100   and column2 = 'AAAA'				

Теперь Connection1 могут быть заблокированы по Connection2, что приводит к взаимоблокировке. ВНиже приведен трассировки взаимоблокировок.
   97/04/20 15:13:50.07 spid17   *** DEADLOCK DETECTED with spid 18 ***   spid 17 requesting UP_PAGE (waittype 0x8007), blocked by:     IX_PAGE: spid 18, dbid 6, page 0x2c5, table example1, indid 0     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCA' where column1 = 100 and column2 = 'AAAA'   spid 18 waiting for UP_PAGE (waittype 0x8007), blocked by:     IX_PAGE: spid 17, dbid 6, page 0x2c5, table example1, indid 0     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCB' where column1 = 105 and column2 = 'AAAB'   VICTIM: spid 17, pstat 0x0000 , cputime 20				

17 SPID (подключение одного) находится в состоянии ожидания блокировки с UP_PAGE, в первую очередьшаг получение блокировки монопольного страницы. Он блокируется spid 18,на странице 0x2c5, который удерживает блокировку IX_PAGE. SPID 18 ожидает блокировки UP_PAGEна той же странице и IX_PAGE lock блокировка удерживается spid 17.Это приводит к взаимоблокировке, так как блокировка IX_PAGE сделать общим, тогда как UP_LOCKне является. Во время первой операции вставки, оба идентификатора SPID, полученного IX_PAGE блокировкиодной странице, и впоследствии они пытались обновить блокировки для блокировки UP_PAGE которогоневозможна из-за блокировки UP_PAGE exclusive.

Один из способов избежать взаимоблокировки является вставка обновленное значение непосредственнов таблице вместо вставки, а затем обновление строки в том жетранзакции. Если это невозможно, с помощью следующей командыОтключение IRL поможет избежать взаимоблокировок:
   sp_tableoption 'example1', 'insert row lock', false				

Пример 4: Вставки строк на одной странице

Взаимоблокировка может также возникнуть при работе два идентификатора SPID строкино другой принадлежит к той же странице.
   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')   Connection2 > INSERT INTO example1 VALUES (400, 'AAAB', 'CCC')   Connection1 > UPDATE example1 SET column3 = 'CCCA' where column1 = 405   and column2 = 'AAAA'				

На этом этапе Connection1 могут быть заблокированы по Connection2. Эта ситуацияВозможно, Connection1 хочет обновить строку на странице гдеConnection2 уже ввела строку.
   Connection2 > UPDATE example1 SET column3 = 'CCCB' where column1 = 105   and column2 = 'AAAB'				

На этом этапе Connection2 также блокируется Connection1, который будетпривести к взаимоблокировке. Такая ситуация может возникнуть при Connection2обновление строк на странице, где Connection1 вставила строку. Нижеявляется трассировки взаимоблокировок:
   97/04/20 15:48:21.18 spid20   *** DEADLOCK DETECTED with spid 19 ***   spid 20 requesting UP_PAGE (waittype 0x8007), blocked by:     EX_PAGE: spid 19, dbid 6, page 0x2c4, table example1, indid 0     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCB' where column1 = 105 and column2 = 'AAAB'   spid 19 waiting for UP_PAGE (waittype 0x8007), blocked by:     EX_PAGE: spid 20, dbid 6, page 0xc48, table example1, indid 0     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCA' where column1 = 405 and column2 = 'AAAA'   VICTIM: spid 20, pstat 0x0000 , cputime 60				

Можно избежать этой взаимоблокировки, распределения строк через различныестраницы. Одним из способов сделать это является повторное создание кластеризованного индекса нав этой таблице с коэффициентом заполнения большого размера. Вот инструкция,создается кластеризованный индекс с коэффициентом заполнения, равное 50 процентам.
   create unique clustered index ex1ind1 on example1 (column1, column2)   with fill factor = 50, PAD_INDEX				

Эта инструкция создает кластеризованный индекс, оставляя половину страницы пустая,включая неконечных уровнях кластеризованного индекса (из-заПараметр PAD_INDEX). Таблица занимает вдвое фактический размер иколичество строк на страницу, половина из них были.

Коэффициент заполнения не сохраняется в таблице. Таблица re-organizedс коэффициентом заполнения, указанным только во время создания индекса. Со временемстрок на каждой странице изменится с коэффициентом заполнения, указанный во время индексаСоздание. При этом может быть хорошей идеей для повторного созданиякластеризованный индекс с коэффициентом заполнения нужного.

Другое решение, чтобы избежать предыдущей ситуации взаимоблокировки находится на панели рукописного вводаТаблица с фиктивной столбцы (например, dummy1 char(255)). Это увеличиваетразмер строки и приводит к меньшим количеством строк на страницу (всего лишь одну строку для каждогостраницы). Так как этот тип заполнения сохраняется во времени, ненеобходимо повторно создать кластеризованный индекс для поддержания заполнение (хотя выможет потребоваться повторное создание кластеризованного индекса по другим причинам). ВНедостатком этого приема является, что дисковое пространство занято в фиктивноеполя.

Пример 5: Заполнение строк

Заполнение строк приводит к меньшим количеством строк на страницу (следовательно меньшее количество взаимоблокировок), но онне будет полностью избежать взаимоблокировок.

В этой таблице пример example1 дополняется занимают одну строку на каждой странице. ВНиже приведены инструкции для создания таблицы для этого примера.
   create table example1 (column1 int, column2 char(20), column3 char(50),   dummy_column4 char (255), dummy_column5 char (255), dummy_column6 char   (255))   go   create unique index ex1ind5 on example1 (column3, column2, column1,   dummy_column4, dummy_column5, dummy_column6) with fill factor = 85   go   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC', ' ', ' ',   ' ', ' ')   Connection2 > INSERT INTO example1 VALUES (400, 'AAAB', 'CCC', ' ', ' ',   ' ', ' ')   Connection1 > UPDATE example1 SET column3 = 'CCCA' where column1 = 401   and column2 = 'AAAA'				

На этом этапе Connection1 заблокирована Connection2 при обновлениистроки. Поскольку SQL Server должен поддерживать цепочке страниц указателей, он блокируетПредыдущая страница следующая страница и страница обновляется. Так какConnection2 удерживает блокировку на предыдущей странице, необходимо дождаться Connection1Connection2 фиксирует транзакцию.
   Connection2 > UPDATE example1 SET column3 = 'CCCB' where column1 = 101   and column2 = 'AAAB'				

На этом этапе Connection2, блокируется Connection1 потому, что его необходимо заблокироватьПредыдущая страница, которая в настоящее время заблокировал(а) Connection1. В результатевзаимоблокировка. Ниже приведен трассировки взаимоблокировок.
   spid 20 requesting UP_PAGE (waittype 0x8007), blocked by:     EX_PAGE: spid 19, dbid 6, page 0x12b5, table example1, indid 0     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCB' where column1 = 101 and column2 = 'AAAB'   spid 19 waiting for UP_PAGE (waittype 0x8007), blocked by:     EX_PAGE: spid 20, dbid 6, page 0x1531, table example1, indid 0     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCA' where column1 = 401 and column2 = 'AAAA'   VICTIM: spid 20, pstat 0x0000 , cputime 300				

Можно избежать этой взаимоблокировки, Вставка пустой строки между строк,вставке, обновлении или удалении. Например, если работает Connection1(вставки, обновления или удаления) с помощью первичного ключа строк = 1 и Connection2 работает сСтрока pk = 5, Вставка строки между этими двумя строками (например, строкусодержащий pk = 3) позволит избежать взаимоблокировок. Этот метод также увеличиваетсяразмер таблицы, но может быть лучшим решением для этих таблиц в очередьважные для приложения.

Пример 6: Некластеризованные индексы

В некоторых случаях некластеризованные индексы вторичного может привести к взаимоблокировкам. Вв этом примере обслуживания вторичный индекс представляет взаимоблокировки.

Ниже приводится инструкция, используемая для создания вторичного индекса, используемый вв этом примере:
   create index ex1ind2 on example1 (column3) with fill factor = 90,   PAD_INDEX   Connection1 > BEGIN TRANSACTION   Connection2 > BEGIN TRANSACTION   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCBA', ' ', '   ', ' ', ' ')   Connection2 > INSERT INTO example1 VALUES (300, 'AAAB', 'CCCZ', ' ', '   ', ' ', ' ')   Connection2 > UPDATE example1 SET column3 = 'CCBA' where column1 = 105				

На этом этапе Connection2 могут быть заблокированы по Connection1, так какВозможно, Connection1 удерживает блокировку на странице дополнительных некластеризованного индексагде Connection2 необходимо обновить.
   Connection1 > UPDATE example1 SET column3 = 'CCCZ' where column1 = 305				

На этом этапе Connection1 может блокироваться Connection2, в результате чеговзаимоблокировки. Эта ситуация может произойти при ожидании Connection1 блокировкиЧтобы обновить индекс вторичного некластеризованный, где уже имеется Connection2Вставить и удерживает блокировку на этой странице. Ниже приведен трассировки взаимоблокировокв этом примере взаимоблокировки:
   97/04/20 19:05:38.75 spid11   *** DEADLOCK DETECTED with spid 12 ***   spid 11 requesting EX_PAGE (waittype 0x8005), blocked by:     EX_PAGE: spid 12, dbid 6, page 0x112f, table example1, indid 0x2     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCCZ' where column1 = 305   spid 12 waiting for EX_PAGE (waittype 0x8005), blocked by:     EX_PAGE: spid 11, dbid 6, page 0x1108, table example1, indid 0x2     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =   'CCBA' where column1 = 105   VICTIM: spid 11, pstat 0x0000 , cputime 50				

Можно избежать этой взаимоблокировки, удаление вторичного индекса. Это неможно заполнить один индекс строки на каждой странице, таким образом эта ситуацияможно избежать только путем удаления кластеризованного индекса вторичные илиИзменение приложения.

Может привести к взаимоблокировкам с более чем двух подключений, в этом случаеСписок трассировки взаимоблокировок идентификатора SPID, участвующие во взаимоблокировке, а такжеконфликтующих блокировок. С RLOCK и XRLOCK блокировку, может привести к взаимоблокировкам которогобудут получены в течение пересечение индекса. Взаимоблокировки возникают из-заблокировок экстентов (UPD_EXT PR_EXT, NX_EXT, & EX_EXT).

Для получения дополнительных сведений об анализе взаимоблокировок можно включитьследующие флаги трассировки:

T1200
Печать всех данных запроса и выпуск блокировки при их возникновении, лиВзаимоблокировка участвует или нет. Это дороги производительности,Однако можно использовать для анализа.

T1206
Печатает все блокировки, удерживаемые идентификатора SPID участвующие во взаимоблокировке.

T1208
Выводит имя хоста и имя программы, предоставленные клиентом. Это может помочьидентификации жертвы взаимоблокировки, клиента, при условии, что клиент указываетуникальное значение для каждого подключения.

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 169960 — последний просмотр: 12/04/2015 17:12:30 — редакция: 4.0

Microsoft SQL Server 6.5 Standard Edition

  • kbnosurvey kbarchive kbhowto kbusage kbmt KB169960 KbMtru
Отзывы и предложения