Как немедленно убить/остановить длинный SQL-запрос?
Я использую SQL Server 2008 и его студию управления. Я выполнил запрос, который дает много строк. Я попытался отменить его с помощью красной кнопки отмены, но он не остановился в течение последних 10 минут. Обычно он останавливается в течение 3 минут.
В чем причина и как я могу немедленно ее остановить?
Ответы
Ответ 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, если работает для вас тоже.!!!