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)
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру