sp_lock (Transact-SQL)

Применимо к:SQL Server

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

Внимание

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

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

Синтаксис

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

Аргументы

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

[ @spid2 = ] 'session ID2'Другой номер идентификатора сеанса ядро СУБД от sys.dm_exec_sessions, который может иметь блокировку одновременно с идентификатором сеанса 1 и о которой пользователь также хочет получить информацию. идентификатор сеанса 2 имеет значение NULL по умолчанию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HBT = блокировка на куче или В-дереве (HoBT). Эта информация не завершена в SQL Server.

AU = Блокировка на единицу распределения (allocation unit). Эта информация не завершена в SQL Server.
Ресурс nchar(32) Значение, определяющее блокируемый ресурс. Формат значения зависит от типа ресурса, определенного в столбце Type :

Значение типа: значение ресурса

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

КЛЮЧ: шестнадцатеричное число, используемое внутри ядро СУБД.

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

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

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

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

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

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

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

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

AU: нет предоставленных сведений. Вместо этого используйте динамическое представление управления sys.dm_tran_locks .
Режим nvarchar(8) Запрашиваемый режим блокировки. Возможны следующие варианты:

NULL = Блокировки нет. Играет роль заполнителя.

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 = Блокировка монопольного диапазона ключей и монопольных ресурсов. Блокировка диалога, используемая во время обновления ключа в диапазоне.
Состояние nvarchar(5) Состояние запроса блокировки:

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

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

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

Замечания

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

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

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

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

Разрешения

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

Примеры

А. Перечисление всех блокировок

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

USE master;  
GO  
EXEC sp_lock;  
GO  

B. Перечисление блокировок от односерверного процесса

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

USE master;  
GO  
EXEC sp_lock 53;  
GO  

См. также

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