sp_who (Transact-SQL)

Предоставляет сведения о текущих пользователях, сеансах и процессах в экземпляре компонента Microsoft SQL Server Database Engine. Данные могут быть отфильтрованы, чтобы возвращать только те процессы, которые не простаивают, принадлежат конкретному пользователю или принадлежат определенному сеансу.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]

Аргументы

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    Используется для фильтрации результирующего набора.

    Аргумент login имеет тип sysname и определяет процессы, принадлежащие конкретному имени входа.

    Аргумент session ID (SPID в SQL Server 2000 и более ранних версиях) является идентификатором сеанса, принадлежащего экземпляру SQL Server. Аргумент session ID имеет тип smallint.

    Значение ACTIVE исключает сеансы, ожидающие следующей команды от пользователя.

    Если значение не указано, эта процедура возвращает все сеансы, принадлежащие экземпляру.

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

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

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

Процедура sp_who возвращает результирующий набор со следующими данными.

Столбец

Тип данных

Описание

spid

smallint

Идентификатор сеанса.

ecid

smallint

Идентификатор контекста выполнения заданного потока, связанный с определенным идентификатором сеанса.

ECID = {0, 1, 2, 3, ...n}, где 0 всегда представляет основной или родительский поток, а {1, 2, 3, ...n} представляет подпроцессы.

status

nchar(30)

Состояние процесса. Возможны следующие значения.

dormant. SQL Server сбрасывает сеанс.

running. В сеансе выполняются один или несколько пакетов. Если включен режим MARS, в сеансе может выполняться несколько пакетов. Дополнительные сведения см. в разделе Использование режима MARS.

background. В сеансе выполняется фоновая задача, например обнаружение взаимоблокировок.

rollback. В сеансе выполняется откат транзакций.

pending. В сеансе ожидается освобождение потока исполнителя.

runnable. Задачи сеанса находятся в очереди исполнителей планировщика, ожидая времени такта.

spinloop. Задачи сеанса ожидают освобождения взаимоблокировки.

suspended. Сеанс ожидает завершения события, например операции ввода-вывода.

loginame

nchar(128)

Имя входа, связанное со специфическим процессом.

hostname

nchar(128)

Имя узла или компьютера для каждого процесса.

blk

char(5)

Идентификатор сеанса для блокирующего процесса, если такой существует. В противном случае значение этого столбца — 0.

Если транзакция, связанная с данным идентификатором сеанса, заблокирована потерянной распределенной транзакцией, этот столбец возвратит -2 для блокирующей потерянной транзакции.

dbname

nchar(128)

База данных, используемая процессом.

cmd

nchar(16)

Команда компонента Database Engine (инструкция Transact-SQL, внутренний процесс компонента Database Engine и так далее), выполняющаяся для процесса.

request_id

int

Идентификатор для запросов, запущенных в определенном сеансе.

При параллельной обработке подпроцессы создаются для определенного идентификатора сеанса. Главный поток обозначается как spid = <xxx> и ecid =0. Другие подпроцессы имеют одинаковый spid = <xxx>, но с ecid > 0.

Замечания

Блокирующий процесс (который может иметь монопольную блокировку) является процессом, удерживающим ресурсы, в которых нуждается другой процесс.

В SQL Server 2000 и более поздних версиях всем потерянным распределенным транзакциям назначается значение идентификатора сеанса, равное -2. Потерянные распределенные транзакции являются распределенными транзакциями, которые не связаны с каким либо идентификатором сеанса. Дополнительные сведения см. в разделе Использование помеченных транзакций (модель полного восстановления).

SQL Server 2000 и более поздние версии резервируют значения идентификаторов сеанса от 1 до 50 для внутреннего использования, значения идентификаторов сеанса от 51 и выше представляют пользовательские сеансы.

Разрешения

Требуется разрешение VIEW SERVER STATE на сервер для просмотра всех выполняющихся сеансов на экземпляре SQL Server. Иначе пользователь сможет увидеть только текущий сеанс.

Примеры

А. Перечень всех текущих процессов

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

USE master;
GO
EXEC sp_who;
GO

Б. Перечень процессов определенного пользователя

Следующий пример показывает, как просмотреть сведения об отдельном текущем пользователе по имени входа.

USE master;
GO
EXEC sp_who 'janetl';
GO

В. Отображение всех активных процессов

USE master;
GO
EXEC sp_who 'active';
GO

Г. Отображение определенного процесса, определяемого идентификатором сеанса

USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO