sp_lock (Transact-SQL)
Изменения: 14 апреля 2006 г.
Сообщает сведения о блокировках.
Важно! |
---|
Данный подраздел о системных хранимых процедурах включен в Microsoft SQL Server 2005 только из соображений обратной совместимости. Для получения сведений о блокировках в компоненте SQL Server 2005 Database Engine используется динамическое административное представление sys.dm_tran_locks. Дополнительные сведения см. в разделе sys.dm_tran_locks. |
Важно! |
---|
Данная процедура изменилась по сравнению с более ранними версиями SQL Server. Дополнительные сведения см. в разделе Критические изменения в функциях компонента SQL Server 2005 Database Engine. |
Соглашения о синтаксисе в 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 2005; AU = Блокировка на единицу размещения (allocation unit). Эти сведения неполные в SQL Server 2005. |
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. 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
См. также
Справочник
sys.dm_tran_locks
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks
Представление sys.dm_os_threads
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия
Журнал
14 апреля 2006 г.
Термин
Определение
Измененное содержимое:
- Пример перемещен в представление sys.dm_os_tasks.
- Ссылки на SPID заменены на идентификатор сеанса.