Проблема: Вложенный цикл соединения, использующей объект «BOOKMARK LOOKUP.. .WITH PREFETCH "может удерживать блокировку длиной

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

Эта статья на английском языке:260652
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Проблема
Если план выполнения цикла соединения Nested и поиск закладок, где используется предложение WITH PREFETCH, блокировки в течение всего соединения вложенных циклов, определяя подходящий закладки. После закладки используется для извлечения данных столбца необработанных данных помещается в выходной буфер, затем снятия блокировки. Это может привести к блокировке другие системы идентификаторы процессов (spids).
Временное решение
При изменении подсказка соединения LOOP ХЭШИРОВАНИЯ или MERGE блокировки не происходит.
Дополнительная информация
Это может быть показано с помощью в следующем примере:
SELECT c.mstr_acct, c.last_name_m, c.first_name, c.name_prefix, c.company_nameFROM tickler a  INNER LOOP JOIN member b    ON a.mbr_acct = b.mbr_acct  INNER LOOP JOIN person c    ON b.mstr_acct = c.mstr_acct WHERE a.tickler_code = 'SPIRITEXT' 				
надписьюИНСТРУКЦИИ SHOWPLANвыходные данные для предыдущего запроса выглядит следующим образом:
StmtText                                                                                                                                            ---------------------------------------------------------------------------------------------------------------------------------------------  |--Bookmark Lookup(BOOKMARK:([Bmk1002]), OBJECT:([TestLoopJoin].[dbo].[person] AS [c]) WITH PREFETCH)       |--Nested Loops(Inner Join)            |--Nested Loops(Inner Join)            |    |--Index Seek(OBJECT:([TestLoopJoin].[dbo].[tickler].[tickler_code] AS [a]), SEEK:([a].[tickler_code]='SPIRITEXT') ORDERED)            |    |--Clustered Index Seek(OBJECT:([TestLoopJoin].[dbo].[member].[pk_member] AS [b]), SEEK:([b].[mbr_acct]=[a].[mbr_acct])  ORDERED)            |--Index Seek(OBJECT:([TestLoopJoin].[dbo].[person].[pk_person] AS [c]), SEEK:([c].[mstr_acct]=[b].[mstr_acct]) ORDERED)				
Режим блокировки сразу отражается, запуская другое подключение, которое производит UPDATE на первые несколько строк выбранных из таблицы. Можно заметить, что UPDATE заблокирован, пока не будут обработаны все закладки поиска для инструкции SELECT, и строки отправляются клиенту.Поиск закладок

Логический и физический оператор Bookmark Lookup использует закладки (идентификатор строки или ключу кластеризации) для поиска соответствующей строки в таблице или кластеризованном индексе. Столбец аргумент содержит метку закладки, используемый для поиска строки в таблице или кластеризованном индексе. Столбец аргумент содержит также имя таблицы или кластеризованного индекса, в которой ищутся строки. Если предложение WITH PREFETCH отображается в столбце аргумент, затем обработчик запросов определяет то, что оптимальное использование асинхронных prefetching (упреждающего чтения) при поиске закладки в таблице или кластеризованном индексе.

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

Свойства

Номер статьи: 260652 — последний просмотр: 01/16/2015 20:22:43 — редакция: 2.0

,

  • kbnosurvey kbarchive kbpending kbprb kbmt KB260652 KbMtru
Отзывы и предложения