sp_lock (Transact-SQL)sp_lock (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Сообщает сведения о блокировках.Reports information about locks.

Важно!

Этот компонент находится в режиме обслуживания и может быть удален в будущей версии Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. для получения сведений о блокировках в Компонент SQL Server Database EngineSQL Server Database Engineиспользуйте динамическое административное представление sys. dm_tran_locks .To obtain information about locks in the Компонент SQL Server Database EngineSQL Server Database Engine, use the sys.dm_tran_locks dynamic management view.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]  
[ ; ]  

АргументыArguments

[ @spid1 = ] 'session ID1' — это Компонент Database EngineDatabase Engine идентификатор сеанса из sys. dm_exec_sessions , для которого пользователь хочет получить сведения о блокировке.[ @spid1 = ] 'session ID1' Is a Компонент Database EngineDatabase Engine session ID number from sys.dm_exec_sessions for which the user wants locking information. session ID1 имеет тип int и значение по умолчанию NULL.session ID1 is int with a default value of NULL. Выполните sp_who , чтобы получить сведения о ходе сеанса.Execute sp_who to obtain process information about the session. Если параметр session ID1 не указан, отображаются сведения обо всех блокировках.If session ID1 is not specified, information about all locks is displayed.

[ @spid2 = ] 'session ID2' — это еще один Компонент Database EngineDatabase Engine идентификатор сеанса из sys. dm_exec_sessions , который может иметь блокировку в то же время, что и id1 сеанса , а также сведения о том, что пользователю требуется информация.[ @spid2 = ] 'session ID2' Is another Компонент Database EngineDatabase Engine session ID number from sys.dm_exec_sessions that might have a lock at the same time as session ID1 and about which the user also wants information. Session id2 имеет тип int и значение по умолчанию NULL.session ID2 is int with a default value of NULL.

Значения кода возвратаReturn Code Values

0 (успешное завершение)0 (success)

Результирующие наборыResult Sets

Результирующий набор sp_lock содержит по одной строке для каждой блокировки, удерживаемой сеансами, указанными в параметрах @SPID1 и @SPID2 .The sp_lock result set contains one row for each lock held by the sessions specified in the @spid1 and @spid2 parameters. Если не указано ни @SPID1 , ни @SPID2 , результирующий набор сообщает о блокировках для всех сеансов, активных в данный момент в экземпляре Компонент Database EngineDatabase Engine.If neither @spid1 nor @spid2 is specified, the result set reports the locks for all sessions currently active in the instance of the Компонент Database EngineDatabase Engine.

Имя столбцаColumn name Тип данныхData type ОписаниеDescription
spidspid smallintsmallint Числовой идентификатор сеанса компонента Компонент Database EngineDatabase Engine для процесса, запрашивающего блокировку.The Компонент Database EngineDatabase Engine session ID number for the process requesting the lock.
dbiddbid smallintsmallint Числовой идентификатор базы данных, в которой удерживается блокировка.The identification number of the database in which the lock is held. Для идентификации базы данных можно использовать функцию DB_NAME().You can use the DB_NAME() function to identify the database.
ObjIdObjId intint Числовой идентификатор объекта, на который удерживается блокировка.The identification number of the object on which the lock is held. Для идентификации объекта можно использовать функцию OBJECT_NAME() в связанной базе данных.You can use the OBJECT_NAME() function in the related database to identify the object. Значение 99 является особым, и означает блокировку на одной из системных страниц, используемых для записи распределенных страниц в базе данных.A value of 99 is a special case that indicates a lock on one of the system pages used to record the allocation of pages in a database.
Столбец indidIndId smallintsmallint Числовой идентификатор индекса, для которого удерживается блокировка.The identification number of the index on which the lock is held.
ТипType nchar (4)nchar(4) Типы блокировки:The lock type:

RID = Блокировка на одну строку в таблице, задаваемой идентификатором строки (RID — row ID);RID = Lock on a single row in a table identified by a row identifier (RID).

KEY = Блокировка внутри индекса, которая защищает диапазон ключей в сериализуемых транзакциях;KEY = Lock within an index that protects a range of keys in serializable transactions.

PAG = Блокировка данных или индексной страницы;PAG = Lock on a data or index page.

EXT = Блокировка на экстент.EXT = Lock on an extent.

TAB = Блокировка на целую таблицу, включая все данные и индексы;TAB = Lock on an entire table, including all data and indexes.

DB = Блокировка на базу данных;DB = Lock on a database.

FIL = Блокировка на файл базы данных;FIL = Lock on a database file.

APP = Блокировка на ресурс приложения;APP = Lock on an application-specified resource.

MD = Блокировка на метаданные или данные о каталоге;MD = Locks on metadata, or catalog information.

ХБТ = блокировка в куче или сбалансированном дереве (HoBT).HBT = Lock on a heap or B-Tree (HoBT). Эти сведения неполные в SQL ServerSQL Server.This information is incomplete in SQL ServerSQL Server.

AU = Блокировка на единицу распределения (allocation unit).AU = Lock on an allocation unit. Эти сведения неполные в SQL ServerSQL Server.This information is incomplete in SQL ServerSQL Server.
РесурсовResource nchar (32)nchar(32) Значение, определяющее блокируемый ресурс.The value identifying the resource that is locked. Формат значения зависит от типа ресурса, определенного в столбце тип :The format of the value depends on the type of resource identified in the Type column:

Тип Значение: значение ресурсаType Value: Resource Value

RID: идентификатор в формате ИД файла: PageNumber: RID, где идентификатор файла определяет файл, содержащий страницу, PageNumber определяет страницу, содержащую строку, а RID определяет конкретную строку на странице.RID: An identifier in the format fileid:pagenumber:rid, where fileid identifies the file containing the page, pagenumber identifies the page containing the row, and rid identifies the specific row on the page. параметр ИД соответствует столбцу file_id в представлении каталога sys. database_files .fileid matches the file_id column in the sys.database_files catalog view.

KEY — шестнадцатеричное число, используемое для внутренних целей Компонент Database EngineDatabase Engine.KEY: A hexadecimal number used internally by the Компонент Database EngineDatabase Engine.

PAG: число в формате ИД файла: PageNumber, где "ИД" определяет файл, содержащий страницу, а PageNumber определяет страницу.PAG: A number in the format fileid:pagenumber, where fileid identifies the file containing the page, and pagenumber identifies the page.

EXT — номер, определяющий первую страницу в экстенте.EXT: A number identifying the first page in the extent. Число в формате fileid:pagenumber.The number is in the format fileid:pagenumber.

TAB: сведения не предоставлены, так как таблица уже определена в столбце objID .TAB: No information provided because the table is already identified in the ObjId column.

DB: сведения не предоставлены, так как база данных уже определена в столбце DBID .DB: No information provided because the database is already identified in the dbid column.

Файлы. идентификатор файла, который соответствует столбцу file_id в представлении каталога sys. database_files .FIL: The identifier of the file, which matches the file_id column in the sys.database_files catalog view.

Приложение: идентификатор, уникальный для блокируемого ресурса приложения.APP: An identifier unique to the application resource being locked. В формате ДбпринЦиплеид:<первые от двух до 16 символов строки ресурса ><хэшированное значение >.In the format DbPrincipleId:<first two to 16 characters of the resource string><hashed value>.

MD: зависит от типа ресурса.MD: varies by resource type. Дополнительные сведения см. в описании столбца resource_description в sys. DM_TRAN_LOCKS ()Transact-SQL.For more information, see the description of the resource_description column in sys.dm_tran_locks (Transact-SQL).

ХБТ: сведения не предоставлены.HBT: No information provided. Вместо этого используйте динамическое административное представление sys. dm_tran_locks .Use the sys.dm_tran_locks dynamic management view instead.

AU: сведения не предоставлены.AU: No information provided. Вместо этого используйте динамическое административное представление sys. dm_tran_locks .Use the sys.dm_tran_locks dynamic management view instead.
РежимMode nvarchar (8)nvarchar(8) Запрашиваемый режим блокировки.The lock mode requested. Возможны следующие варианты:Can be:

NULL = Блокировки нет.NULL = No access is granted to the resource. Играет роль заполнителя.Serves as a placeholder.

Sch-S = Блокировка стабильности схемы.Sch-S = Schema stability. Заверяет, что элемент схемы, такой как таблица или индекс, не будет удален до тех пор, пока сеанс связи удерживает блокировку стабильности схемы на данный элемент схемы.Ensures that a schema element, such as a table or index, is not dropped while any session holds a schema stability lock on the schema element.

Sch-М = Блокировка изменения схемы.Sch-M = Schema modification. Должен поддерживаться любым сеансом связи, во время которого предполагается изменить схему данного ресурса.Must be held by any session that wants to change the schema of the specified resource. Заверяет, что другие сеансы не имеют ссылок на обозначенный объект.Ensures that no other sessions are referencing the indicated object.

S = Коллективная блокировка.S = Shared. Удерживающему сеансу предоставлен коллективный доступ к ресурсу.The holding session is granted shared access to the resource.

U = Блокировка обновления.U = Update. Указывает блокировку обновления, полученную на ресурсы, которые со временем могут быть обновлены.Indicates an update lock acquired on resources that may eventually be updated. Используется для предотвращения общей формы взаимоблокировки, которая возникает, когда множество сеансов блокируют ресурсы для потенциального обновления в последующее время;It is used to prevent a common form of deadlock that occurs when multiple sessions lock resources for potential update at a later time.

X = Монопольная блокировка.X = Exclusive. Удерживающему сеансу предоставлен исключительный доступ к ресурсу.The holding session is granted exclusive access to the resource.

IS = Блокировка с намерением коллективного доступа.IS = Intent Shared. Указывает намерение поместить блокировки типа S на некоторые подчиненные ресурсы в иерархии блокировок.Indicates the intention to place S locks on some subordinate resource in the lock hierarchy.

IU = Блокировка с намерением обновления.IU = Intent Update. Указывает намерение поместить блокировки типа U на некоторые подчиненные ресурсы в иерархии блокировок.Indicates the intention to place U locks on some subordinate resource in the lock hierarchy.

IX = Блокировка с намерением монопольного доступа.IX = Intent Exclusive. Указывает намерение поместить блокировки типа X на некоторые подчиненные ресурсы в иерархии блокировок.Indicates the intention to place X locks on some subordinate resource in the lock hierarchy.

SIU = Коллективная блокировка с намерением обновления.SIU = Shared Intent Update. Указывает коллективный доступ к ресурсу с намерением получения блокировок обновления на подчиненные ресурсы в иерархии блокировок.Indicates shared access to a resource with the intent of acquiring update locks on subordinate resources in the lock hierarchy.

SIX = Коллективная блокировка с намерением монопольного доступа.SIX = Shared Intent Exclusive. Указывает коллективный доступ к ресурсу с намерением получения монопольных блокировок на подчиненные ресурсы в иерархии блокировок.Indicates shared access to a resource with the intent of acquiring exclusive locks on subordinate resources in the lock hierarchy.

UIX = Блокировка обновления с намерением монопольного доступа.UIX = Update Intent Exclusive. Указывает блокировку обновления ресурса с намерением получения монопольных блокировок на подчиненные ресурсы в иерархии блокировок.Indicates an update lock hold on a resource with the intent of acquiring exclusive locks on subordinate resources in the lock hierarchy.

BU = Блокировка массового обновления.BU = Bulk Update. Используется для массовых операций.Used by bulk operations.

RangeS_S = Блокировка разделяемого диапазона ключей и разделяемых ресурсов.RangeS_S = Shared Key-Range and Shared Resource lock. Указывает на последовательный просмотр диапазона.Indicates serializable range scan.

RangeS_U = Блокировка разделяемого диапазона ключей и обновляемых ресурсов.RangeS_U = Shared Key-Range and Update Resource lock. Указывает на последовательное сканирование обновления.Indicates serializable update scan.

RangeI_N = Блокировка вставляемого диапазона ключей и NULL-ресурсов.RangeI_N = Insert Key-Range and Null Resource lock. Используется для проверки диапазонов, перед тем как вставить новый ключ в индекс.Used to test ranges before inserting a new key into an index.

RangeI_S = блокировка преобразования диапазона ключей.RangeI_S = Key-Range Conversion lock. Создается перекрытием блокировок RangeI_N и S;Created by an overlap of RangeI_N and S locks.

RangeI_U = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и U;RangeI_U = Key-Range Conversion lock created by an overlap of RangeI_N and U locks.

RangeI_X = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и X;RangeI_X = Key-Range Conversion lock created by an overlap of RangeI_N and X locks.

RangeX_S = блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N иRangeX_S = Key-Range Conversion lock created by an overlap of RangeI_N and RangeS_S. RangeS_S.locks.

RangeX_U = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и RangeS_U.RangeX_U = Key-Range Conversion lock created by an overlap of RangeI_N and RangeS_U locks.

RangeX_X = Блокировка монопольного диапазона ключей и монопольных ресурсов.RangeX_X = Exclusive Key-Range and Exclusive Resource lock. Блокировка диалога, используемая во время обновления ключа в диапазоне.This is a conversion lock used when updating a key in a range.
СостояниеStatus nvarchar (5)nvarchar(5) Состояние запроса блокировки:The lock request status:

КНВРТ: блокировка преобразуется из другого режима, но преобразование блокируется другим процессом, удерживающим блокировку с конфликтующим режимом.CNVRT: The lock is being converted from another mode, but the conversion is blocked by another process holding a lock with a conflicting mode.

GRANT: блокировка получена.GRANT: The lock was obtained.

WAIT: Блокировка заблокирована другим процессом, удерживающим блокировку с конфликтующим режимом.WAIT: The lock is blocked by another process holding a lock with a conflicting mode.

RemarksRemarks

Пользователи могут управлять блокировкой операций чтения следующим образом.Users can control the locking of read operations by:

  • Используя SET TRANSACTION ISOLATION LEVEL для указания уровня блокировки для сеанса.Using SET TRANSACTION ISOLATION LEVEL to specify the level of locking for a session. Синтаксис и ограничения см. в разделе SET TRANSACTION изоляция (Level Transact-)SQL.For syntax and restrictions, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Использование табличных указаний блокировки, чтобы задать уровень блокировки для индивидуальной ссылки на таблицу в предложении FROM.Using locking table hints to specify the level of locking for an individual reference of a table in a FROM clause. Синтаксис и ограничения см. в разделе Табличные указания (Transact)-SQL.For syntax and restrictions, see Table Hints (Transact-SQL).

Все распределенные транзакции, не связанные с сеансом, являются потерянными транзакциями.All distributed transactions not associated with a session are orphaned transactions. Компонент Компонент Database EngineDatabase Engine назначает всем потерянным транзакциям значение SPID равное -2, что упрощает выявление блокирующих распределенных транзакций.The Компонент Database EngineDatabase Engine assigns all orphaned distributed transactions the SPID value of -2, which makes it easier for a user to identify blocking distributed transactions. Дополнительные сведения см. в статье Использование помеченных транзакций для согласованного восстановления связанных баз данных (модель полного восстановления).For more information, see Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

РазрешенияPermissions

Необходимо разрешение VIEW SERVER STATE.Requires VIEW SERVER STATE permission.

ПримерыExamples

A.A. Перечисление всех блокировокListing all locks

В следующем примере отображаются сведения обо всех блокировках, которые в данный момент удерживаются экземпляром компонента Компонент Database EngineDatabase Engine.The following example displays information about all locks currently held in an instance of the Компонент Database EngineDatabase Engine.

USE master;  
GO  
EXEC sp_lock;  
GO  

б.B. Перечисление блокировок от односерверного процессаListing a lock from a single-server process

В следующем примере отображаются сведения о процессе с идентификатором 53, включая его блокировки.The following example displays information, including locks, about process ID 53.

USE master;  
GO  
EXEC sp_lock 53;  
GO  

См. также статьюSee Also

sys.dm_tran_locks (Transact-SQL) sys.dm_tran_locks (Transact-SQL)
DB_NAME (Transact-SQL) DB_NAME (Transact-SQL)
KILL (Transact-SQL) KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL) OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL) sp_who (Transact-SQL)
sys.database_files (Transact-SQL) sys.database_files (Transact-SQL)
sys. dm_os_tasks ( Transact-) SQLsys.dm_os_tasks (Transact-SQL)
sys. dm_os_threads (TRANSACT-SQL)sys.dm_os_threads (Transact-SQL)