Подтвердить что ты не робот

Как немедленно убить/остановить длинный SQL-запрос?

Я использую SQL Server 2008 и его студию управления. Я выполнил запрос, который дает много строк. Я попытался отменить его с помощью красной кнопки отмены, но он не остановился в течение последних 10 минут. Обычно он останавливается в течение 3 минут.

В чем причина и как я могу немедленно ее остановить?

4b9b3361

Ответ 1

В чем причина

Отмена запроса выполняется немедленно, при условии, что ваше внимание может дойти до сервера и обработать его. Запрос должен находиться в состоянии отмены, что почти всегда верно, за исключением случаев, когда вы выполняете определенные операции, такие как вызов веб-службы из SQLCLR. Если ваше внимание не может попасть на сервер, обычно происходит из-за перегрузки scheduler.

Но если ваш запрос является частью транзакции, которая должна откат, тогда откат не может быть прерван. Если это займет 10 минут, ему нужно 10 минут, и вы ничего не можете с этим поделать. Даже перезапуск сервера не поможет, только сделает запуск более продолжительным, так как восстановление должно завершиться откатом.

Чтобы ответить на конкретную причину вашего дела, вам нужно исследовать себя.

Ответ 2

sp_who2 'active'

Проверьте значения в CPUTime и DiskIO. Обратите внимание на SPID процесса, имеющего большое значение относительно.

kill {SPID value}

Ответ 3

Сначала выполните следующую команду:

sp_who2

После этого выполните следующую команду с SPID, которую вы получили из команды:

KILL {SPID value}

Ответ 4

Это глупый ответ, но он работает надежно, по крайней мере, в моем случае: В студии управления, когда "Отменить выполнение запроса" не останавливает запрос, я просто нажимаю, чтобы закрыть текущий SQL-документ. он спрашивает меня, хочу ли я отменить запрос, я говорю "да", и вот, через несколько секунд он прекратит выполнение. После этого он спрашивает меня, хочу ли я сохранить документ перед закрытием. На этом этапе я могу нажать "Отмена", чтобы открыть документ и продолжить работу. Не знаю, что происходит за кулисами, но, похоже, это работает.

Ответ 5

Вы можете использовать сочетание клавиш ALT + Break, чтобы остановить выполнение запроса. Однако это может не сработать во всех случаях.

Ответ 6

Если вы отмените и увидите, что запустить

 sp_who2 'active'

(Монитор активности не будет доступен на старом sql server 2000 FYI)

Найдите SPID, которого хотите убить, например, 81

Kill 81

Запустите sp_who2 'active' раз, и вы, вероятно, заметите, что он спит... откат

Чтобы получить статус запустить снова убить

Kill 81 

Тогда вы получите сообщение, как это

 SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.

Ответ 7

очевидно, на sql server 2008 r2 64bit, при длительном запросе из IIS kill spid не работает, запрос просто перезапускается снова и снова. и, похоже, повторное использование spid's. запрос вызывает, что сервер sql будет постоянно занимать 35% CPU и повесить веб-сайт. Я предполагаю, что bc/не может отвечать на другие запросы для входа в

Ответ 8

В моей части мой sql повесился, когда я попытался закрыть его, пока он бежит бесконечно. Итак, что я сделал, я открываю свой диспетчер задач и завершаю задачу sql-запроса. Это остановит мой sql и перезапустил его.

Ответ 9

Простой ответ, если красный "стоп-ящик" не работает, попробуйте нажать клавиши "Ctrl + Break" на клавиатуре.

Если вы используете SQL Server на Linux, есть приложение, которое вы можете добавить в свой systray, называемый "killall", Просто нажмите кнопку "killall", а затем нажмите на программу, которая попадает в цикл, и она завершит работу программы. Надеюсь, это поможет.

Ответ 10

Я страдаю от того же самого с давних времен. Это происходит, когда вы подключены к удаленному серверу (что может быть медленным), или у вас плохое сетевое подключение. Я сомневаюсь, что Microsoft знает, какой правильный ответ.

Но так как я пытался найти решение. Работает только один человек, работающий под руководством

  • Нажмите кнопку закрытия над вкладкой запроса, на который вы страдаете. Через некоторое время (если Microsoft не суроват на вас!!!), вы можете получить окно с запросом этого

"Запрос выполняется в настоящий момент. Вы хотите отменить запрос?

  • Нажмите "Да"

  • Через некоторое время он спросит, хотите ли вы сохранить этот запрос или нет?

  • Нажмите "Отмена"

И опубликуйте, что, возможно, вы снова студент, чтобы выполнить свой запрос.

Что он делает в фоновом режиме, это отключение окна запроса с соединением. Поэтому для повторного запуска запроса потребуется время для повторного подключения удаленного сервера. Но поверьте мне, что этот компромисс намного лучше, чем страдания, видящий этот таймер, который бежит на вечность.

PS: Это работает для меня, Kudos, если работает для вас тоже.!!!