2012-07-02 4 views
0

Иногда я запускаю запрос, и он просто зависает. Я просматриваю процессы в Activity Monitor (SQL Server 2008 R2), и он показывает это, и только, что транзакция открыта, и она шьет весь сервер.Выполнение транзакции запроса, но никогда не завершается

Это не имеет смысла, даже если это был длинный запрос, он должен в какой-то момент времени предположить.

я след на нем, и это показывает, что это:

enter image description here

Любые предложения?

+3

Можете ли вы показать нам запрос, который вы запускаете? –

+0

Возможно, это была явно запущенная транзакция, которая обнаружила ошибку и никогда не выполнялась и не возвращалась назад. –

+0

Если ваш запрос имеет BEGIN TRANSACTION, эта транзакция остается открытой задолго после завершения запроса - фактически, пока вы не совершаете, откатываете или не получаете/откатываете назад для вас. Нам нужна дополнительная информация, чтобы помочь вам определить проблему. –

ответ

1
BEGIN TRANSACTION 
INSERT INTO ... VALUES ... 
GO 

Забывший Фред открыл сделку и отправился на обед. Нет никакого таймаута, так как нет активного запроса. В конце концов, пользователь должен явно совершить или откат. Администратор может принудительно прекратить оскорбительную сессию, используя KILL. Такая сессия/транзакция может оставаться открытой для лет, если оставить ее на своих устройствах (при условии, что вы не закончите журнал и вы не перезапустите сервер).

Сложные сценарии могут возникать даже тогда, когда пользователь сделал, выдав COMMIT, если задействованы распределенные транзакции, см. How It Works: Orphan DTC Transaction (Session/SPID = -2).

+0

, так что у вас есть начало, но нет откат здесь. – PositiveGuy

+0

, когда я пытаюсь убить процесс, который я получаю Монитор активности не может выполнять запросы к серверу CORP-SQL08DV, 40001. Монитор активности для этого экземпляра будет помещен в состояние паузы. Используйте контекстное меню на панели обзора, чтобы возобновить мониторинг активности. – PositiveGuy

+0

есть оставшийся процесс, мы не можем прекратить движение против базы данных tempdb, что-то о SET @is_policy_automation_enabled = (SELECT CONVERT (бит, current_value). Этот запрос работает вечно и, кажется, все шло. FROM msdb.dbo.syspolicy_configuration WHERE name = 'Enabled') – PositiveGuy

Смежные вопросы