Поделиться через


sp_lock (Transact-SQL)

Область применения: SQL Server

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

Внимание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Чтобы получить сведения о блокировках в ядро СУБД SQL Server, используйте динамическое представление управления sys.dm_tran_locks.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_lock
    [ [ @spid1 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

Аргументы

[ @spid1 = ] spid1

Номер идентификатора сеанса ядро СУБД, из sys.dm_exec_sessions которого пользователь хочет заблокировать информацию. @spid1 имеет значение int с значением по умолчаниюNULL. Выполните выполнение sp_who , чтобы получить сведения о процессе сеанса. Если @spid1 не указан, отображаются сведения обо всех блокировках.

[ @spid2 = ] spid2

Другой ядро СУБД идентификатор сеанса из sys.dm_exec_sessions этого может иметь блокировку одновременно с @spid1 и о том, какой пользователь также хочет получить информацию. @spid2 имеет значение int с значением по умолчаниюNULL.

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

0 (успешно).

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

Результирующий sp_lock набор содержит одну строку для каждой блокировки, удерживаемой сеансами, указанными в параметрах @spid1 и @spid2 . Если ни @spid1, ни @spid2 не указан, результирующий набор сообщает блокировки для всех сеансов, которые сейчас активны в экземпляре ядро СУБД.

Имя столбца Тип данных Description
spid smallint Идентификатор сеанса ядро СУБД для процесса, запрашивающего блокировку.
dbid smallint Числовой идентификатор базы данных, в которой удерживается блокировка. Функцию DB_NAME() можно использовать для идентификации базы данных.
ObjId int Числовой идентификатор объекта, на который удерживается блокировка. Функцию OBJECT_NAME() в связанной базе данных можно использовать для идентификации объекта. Значением 99 является особый случай, указывающий блокировку на одной из системных страниц, используемых для записи выделения страниц в базе данных.
IndId smallint Числовой идентификатор индекса, для которого удерживается блокировка.
Type nchar(4) Типы блокировки:

RID = блокировка одной строки в таблице, определяемой идентификатором строки (RID).
KEY = блокировка в индексе, который защищает диапазон ключей в сериализуемых транзакциях.
PAG = блокировка на странице данных или индекса.
EXT = блокировка экстентов.
TAB = блокировка всей таблицы, включая все данные и индексы.
DB = блокировка базы данных.
FIL = блокировка файла базы данных.
APP = блокировка указанного в приложении ресурса.
MD = блокирует метаданные или сведения о каталоге.
HBT = блокировка кучи или дерева B(HoBT). Эта информация не завершена в SQL Server.
AU = блокировка единицы выделения. Эта информация не завершена в SQL Server.
Resource nchar(32) Значение, определяющее блокируемый ресурс. Формат значения зависит от типа ресурса, определенного в столбце Type :

Type Значение: Resource значение
RID: идентификатор в формате fileid:pagenumber:rid, где fileid определяет файл, содержащий страницу, идентифицирует страницу, pagenumber содержащую строку, и rid определяет определенную строку на странице. fileid соответствует столбцу file_id в представлении sys.database_files каталога.
KEY: шестнадцатеричное число, используемое внутри ядро СУБД.
PAG: число в формате fileid:pagenumber, где fileid определяет файл, содержащий страницу, идентифицирует pagenumber страницу.
EXT: число, определяющее первую страницу в экстенте. Число находится в формате fileid:pagenumber.
TAB: нет сведений, так как таблица уже определена в столбце ObjId .
DB: нет сведений, так как база данных уже определена в столбце dbid .
FIL: идентификатор файла, который соответствует file_id столбцу в представлении sys.database_files каталога.
APP: идентификатор, уникальный для заблокированного ресурса приложения. В формате DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.
MD: зависит от типа ресурса. Дополнительные сведения см. в описании столбца resource_description в sys.dm_tran_locks.
HBT: не указана информация. Вместо этого используйте динамическое sys.dm_tran_locks представление управления.
AU: не указана информация. Вместо этого используйте динамическое sys.dm_tran_locks представление управления.
Mode nvarchar(8) Запрашиваемый режим блокировки. Возможны следующие варианты:

NULL = доступ к ресурсу не предоставляется. Играет роль заполнителя.
Sch-S = стабильность схемы. Гарантирует, что элемент схемы, например таблица или индекс, не удаляется, а сеанс содержит блокировку стабильности схемы для элемента схемы.
Sch-M = изменение схемы. Должен поддерживаться любым сеансом связи, во время которого предполагается изменить схему данного ресурса. Заверяет, что другие сеансы не имеют ссылок на обозначенный объект.
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. 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).

Все распределенные транзакции, не связанные с сеансом, являются потерянными транзакциями. Ядро СУБД назначает все потерянные распределенные транзакции значение -2SPID, что упрощает обнаружение блокирующих распределенных транзакций. Дополнительные сведения см. в разделе "Использование помеченных транзакций для последовательного восстановления связанных баз данных".

Разрешения

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

Примеры

А. Вывод списка всех блокировок

В следующем примере отображаются сведения обо всех блокировках, которые в настоящее время хранятся в экземпляре ядро СУБД.

USE master;
GO
EXEC sp_lock;
GO

B. Вывод списка блокировки из процесса с одним сервером

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

USE master;
GO
EXEC sp_lock 53;
GO