sp_lock (Transact-SQL)

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

Важное примечаниеВажно!

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.Для получения сведений о блокировках компонента SQL Server Database Engine используется динамическое административное представление sys.dm_tran_locks.

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

Синтаксис

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

Аргументы

  • [ @spid1 = ] 'session ID1'
    Идентификатор сеанса компонента Database Engine (SPID в версиях SQL Server 2000 и более ранних) из представления sys.dm_exec_sessions, для которого пользователю требуются сведения о блокировке. session ID1 — аргумент типа int со значением по умолчанию NULL. Выполните процедуру sp_who для получения сведений о сеансе. Если аргумент session ID1 не указан, отображаются сведения обо всех блокировках.

  • [ @spid2 = ] 'session ID2'
    Другой идентификатор сеанса компонента Database Engine из представления sys.dm_exec_sessions, который может иметь блокировку в то же самое время, что и аргумент session ID1, и о котором пользователю также требуются сведения. Аргумент session ID2 имеет тип int и значение по умолчанию NULL.

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

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

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

Результирующий набор процедуры sp_lock содержит по одной строке на каждую блокировку процессов, заданных аргументами @spid1 и @spid2. Если ни один из аргументов @spid1 и @spid2 не задан, результирующий набор содержит блокировки для всех процессов, которые активны в данный момент в экземпляре компонента Database Engine.

Имя столбца

Тип данных

Описание

spid

smallint

Числовой идентификатор сеанса компонента Database Engine для процесса, запрашивающего блокировку.

dbid

smallint

Числовой идентификатор базы данных, в которой удерживается блокировка. Для идентификации базы данных можно использовать функцию DB_NAME().

ObjId

int

Числовой идентификатор объекта, на который удерживается блокировка. Для идентификации объекта можно использовать функцию OBJECT_NAME() в связанной базе данных. Значение 99 является особым, и означает блокировку на одной из системных страниц, используемых для записи распределенных страниц в базе данных.

IndId

smallint

Числовой идентификатор индекса, для которого удерживается блокировка.

Type

nchar(4)

Типы блокировки:

RID = Блокировка на одну строку в таблице, задаваемой идентификатором строки (RID — row ID);

KEY = Блокировка внутри индекса, которая защищает диапазон ключей в сериализуемых транзакциях;

PAG = Блокировка данных или индексной страницы;

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

TAB = Блокировка на целую таблицу, включая все данные и индексы;

DB = Блокировка на базу данных;

FIL = Блокировка на файл базы данных;

APP = Блокировка на ресурс приложения;

MD = Блокировка на метаданные или данные о каталоге;

HBT = Блокировка на кучу или индекс сбалансированного дерева (B-Tree). Эти сведения неполные в SQL Server.

AU = Блокировка на единицу распределения (allocation unit). Эти сведения неполные в SQL Server.

Resource

nchar(32)

Значение, определяющее блокируемый ресурс. Формат значения зависит от типа ресурса определяемого в столбце Type:

Type Значение: Resource Значение

RID: Идентификатор в формате fileid:pagenumber:rid, где fileid определяет файл, содержащий страницу, pagenumber определяет страницу, содержащую строку, а rid определяет заданную строку на странице. fileid соответствует столбцу file_id в представлении каталога sys.database_files.

KEY: шестнадцатеричное число, используемое компонентом Database Engine для внутренних целей.

PAG: Число в формате fileid:pagenumber, где fileid определяет файл, содержащий страницу, а pagenumber определяет страницу.

EXT: Число, определяющее первую страницу в экстенте. Число в формате fileid:pagenumber.

TAB: Сведения не предоставляются, так как таблица уже определена в столбце ObjId.

DB: Сведения не предоставляются, так как база данных уже определена в столбце dbid.

FIL: Идентификатор файла, который соответствует столбцу file_id в представлении каталога sys.database_files.

APP: Уникальный идентификатор блокируемого ресурса приложения. В формате DbPrincipleId:<от 2 до 16 первых символов строки ресурса><значение хэша>.

MD: зависит от типа ресурса. Дополнительные сведения см. в описании столбца resource_description в разделе sys.dm_tran_locks (Transact-SQL).

HBT: Сведения не предоставлены. Вместо этого необходимо использовать динамическое административное представление каталога sys.dm_tran_locks.

AU: Сведения не предоставлены. Вместо этого необходимо использовать динамическое административное представление каталога sys.dm_tran_locks.

Mode

nvarchar(8)

Запрашиваемый режим блокировки. Может быть:

NULL = Блокировки нет. Служит как местозаполнитель (placeholder);

Sch-S = Блокировка стабильности схемы. Гарантирует, что элемент схемы, такой как таблица или индекс, не будет удален до тех пор, пока сеанс связи удерживает блокировку стабильности схемы на данный элемент схемы;

Sch-М = Блокировка изменения схемы. Должен поддерживаться любым сеансом связи, во время которого предполагается изменить схему данного ресурса. Гарантирует, что другие сеансы не имеют ссылок на обозначенный объект;

S = Коллективная блокировка. Удерживающему сеансу предоставлен коллективный доступ к ресурсу;

U = Блокировка обновления. Указывает блокировку обновления, полученную на ресурсы, которые со временем могут быть обновлены. Используется для предотвращения общей формы взаимоблокировки, которая возникает, когда множество сеансов блокируют ресурсы для потенциального обновления в последующее время;

X = Монопольная блокировка. Удерживающему сеансу предоставлен исключительный доступ к ресурсу;

IS = Блокировка с намерением коллективного доступа. Указывает намерение поместить S блокировки на некоторые подчиненные ресурсы в иерархии блокировок;

IU = Блокировка с намерением обновления. Указывает намерение поместить U блокировки на некоторые подчиненные ресурсы в иерархии блокировок;

IX = Блокировка с намерением монопольного доступа. Указывает намерение поместить X блокировки на некоторые подчиненные ресурсы в иерархии блокировок;

SIU = Коллективная блокировка с намерением обновления. Указывает коллективный доступ к ресурсу с намерением получения блокировок обновления на подчиненные ресурсы в иерархии блокировок;

SIX = Коллективная блокировка с намерением монопольного доступа. Указывает коллективный доступ к ресурсу с намерением получения монопольных блокировок на подчиненные ресурсы в иерархии блокировок;

UIX = Блокировка обновления с намерением монопольного доступа. Указывает блокировку обновления ресурса с намерением получения монопольных блокировок на подчиненные ресурсы в иерархии блокировок;

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

RangeS_S = Блокировка разделяемого диапазона ключей и разделяемых ресурсов. Указывает на упорядоченный просмотр диапазона;

RangeS_U = Блокировка разделяемого диапазона ключей и обновляемых ресурсов. Указывает на упорядоченный просмотр обновлений;

RangeI_N = Блокировка вставляемого диапазона ключей и NULL-ресурсов. Используется для проверки диапазонов, перед тем как вставить новый ключ в индекс;

RangeI_S = блокировка преобразования диапазона ключей. Создается перекрытием блокировок RangeI_N и S;

RangeI_U = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и U;

RangeI_X = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и X;

RangeX_S = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и RangeS_S;

RangeX_U = Блокировка преобразования диапазона ключей, созданная перекрытием блокировок RangeI_N и RangeS_U.

RangeX_X = Блокировка монопольного диапазона ключей и монопольных ресурсов. Блокировка преобразования, используемая при обновлении ключа в диапазоне.

Status

nvarchar(5)

Состояние запроса блокировки:

CNVRT: Блокировка, преобразованная в другом режиме, в ситуации блокирования другого процесса, удерживающего блокировку в конфликтном режиме.

GRANT: Блокировка получена.

WAIT: Блокировка занята другим процессом, удерживающим блокировку в конфликтном режиме.

Замечания

Пользователи могут управлять блокировкой операций чтения следующим образом.

  • Используя SET TRANSACTION ISOLATION LEVEL для указания уровня блокировки для сеанса. Синтаксис и ограничения см. в разделе SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Используя табличные подсказки блокировки, чтобы задать уровень блокировки для индивидуальной ссылки на таблицу в предложении FROM. Синтаксис и ограничения см. в разделе Табличные подсказки (Transact-SQL).

Дополнительные сведения о типах блокировок, используемых компонентом Database Engine, см. в разделе Блокировка в компоненте Database Engine.

Все распределенные транзакции, не связанные с сеансом, являются потерянными транзакциями. Компонент Database Engine назначает всем потерянным транзакциям значение SPID равное -2, что упрощает выявление блокирующих распределенных транзакций. Дополнительные сведения см. в разделе Использование помеченных транзакций (модель полного восстановления).

Разрешения

Требуется разрешение VIEW SERVER STATE.

Примеры

А. Список всех блокировок

В следующем примере отображаются сведения обо всех блокировках, которые в данный момент удерживаются экземпляром компонента Database Engine.

USE master;
GO
EXEC sp_lock;
GO

Б. Список блокировок от односерверных процессов

В следующем примере отображаются сведения о процессе с идентификатором 53, включая его блокировки.

USE master;
GO
EXEC sp_lock 53;
GO