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

Переводы статьи Переводы статьи
Код статьи: 169960 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

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 удерживает блокировку на предыдущей странице, необходимо дождаться Connection1 Connection2 фиксирует транзакцию.
   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 - Последний отзыв: 3 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 6.5 Standard Edition
Ключевые слова: 
kbhowto kbusage kbmt KB169960 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:169960
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com