SQLID 2005 спящего SPID блокирует другой SPID - PullRequest
2 голосов
/ 29 апреля 2010

Я нахожу множество спящих процессов в моей базе данных SQL Server и похоже, что один из этих спид-идентификаторов блокирует другой процесс, и этот процесс тоже приостанавливается ...

Может кто-нибудь, пожалуйста, объясните это ...

1.) Как спящий процесс может блокировать другой процесс? 2.) Я вижу много спящего процесса ... это нормально?

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 апреля 2010

Блокировки удерживаются в течение различных периодов времени, но наиболее распространенные блокирующие блокировки, блокировки X, сохраняются в течение транзакции. Поскольку время жизни транзакции совершенно не связано с временем жизни пакета, абсолютно нормально иметь спид SPID для собственных блокировок, это просто означает, что клиент запустил транзакцию и выполнил некоторые обновления. Как только клиент решит продолжить и выдаст команду серверу для подтверждения или отката транзакции, блокировка исчезнет.

Другая частая блокировка - это блокировка сеанса базы данных, которая является общей блокировкой, поддерживаемой соединением, использующим базу данных. Простое действие по поддержанию соединения будет удерживать блокировку, но обычно это только конфликт с операциями, которые пытаются получить блокировку X для базы данных, такими как ALTER DATABASE DDL.

Существуют и более эзотерические случаи, например, блокировки двухфазной фиксации после восстановления, но, вероятно, это не ваши проблемы. То, что вы видите, скорее всего, является одним из тривиальных случаев, когда пользователь запускает что-то из SSMS и забывает зафиксировать, или приложение, которое содержит длинные транзакции, возможно, даже пропускает их.

2 голосов
/ 29 апреля 2010

1.) Как спящий процесс может блокировать другой процесс?

Спящий процесс ждет работы. Дважды проверьте, действительно ли блокируется спящий процесс, потому что это действительно маловероятно.

2.) Я вижу много процессов сна ... это нормально?

Многие процессы сна совершенно нормальны. Например, пул соединений с одного веб-сервера обычно поддерживает 10 открытых процессов. Это отлично для производительности.

Вот список состояний процесса :

Status      Meaning
---------------------------------------------------------------------------------
Background  The SPID is running a background task, such as deadlock detection.
Sleeping    The SPID is not currently executing. This usually indicates that the 
            SPID is awaiting a command from the application.
Running     The SPID is currently running on a scheduler.
Runnable    The SPID is in the runnable queue of a scheduler and waiting to get 
            scheduler time.
Sos_scheduler_yield The SPID was running, but it has voluntarily yielded its 
            time slice on the scheduler to allow another SPID to acquire 
            scheduler time.
Suspended   The SPID is waiting for an event, such as a lock or a latch.
Rollback    The SPID is in rollback of a transaction.
Defwakeup   Indicates that the SPID is waiting for a resource that is in the 
            process of being freed. The waitresource field should indicate the 
            resource in question.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...