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).
Все распределенные транзакции, не связанные с сеансом, являются потерянными транзакциями. Ядро СУБД назначает все потерянные распределенные транзакции значение -2
SPID, что упрощает обнаружение блокирующих распределенных транзакций. Дополнительные сведения см. в разделе "Использование помеченных транзакций для последовательного восстановления связанных баз данных".
Разрешения
Требуется разрешение VIEW SERVER STATE
.
Примеры
А. Вывод списка всех блокировок
В следующем примере отображаются сведения обо всех блокировках, которые в настоящее время хранятся в экземпляре ядро СУБД.
USE master;
GO
EXEC sp_lock;
GO
B. Вывод списка блокировки из процесса с одним сервером
В следующем примере отображаются сведения о процессе с идентификатором 53
, включая его блокировки.
USE master;
GO
EXEC sp_lock 53;
GO