Как сразу убить / остановить длинный SQL-запрос?
Я использую SQL server 2008 и его Management studio. Я выполнил запрос, который дает много строк. Я попытался отменить его с помощью красной кнопки отмены, но он не остановился в течение последних 10 минут. Он обычно останавливается в течение 3 минут.
в чем может быть причина и как мне ее немедленно остановить ?
10 ответов:
что может быть причиной
запрос отменить немедленно, при условии, что ваш внимание может подключиться к серверу и обработать. Запрос должен быть в состоянии отмены, что почти всегда верно, за исключением некоторых операций, таких как вызов веб-службы из SQLCLR. Если ваше внимание не может достичь сервера, как правило, из-за планировщик перегрузка.
но если ваш запрос является частью транзакции, которая должна откатить тогда откат не может быть прерван. Если это займет 10 минут, то он должен 10 минут и вы ничего не можете с этим поделать. Даже перезапуск сервера не поможет, только сделает запуск дольше, так как восстановление должно завершить откат.
ответ , который конкретная причина относится к вашему делу, вам нужно будет исследовать себя.
sp_who2 'active'проверяем значения функции CPUTime и DiskIO. Обратите внимание на SPID процесса, имеющего большое значение сравнительно.
kill {SPID value}
сначала выполните следующую команду:
sp_who2после этого выполните приведенную ниже команду с SPID, которую вы получили сверху команду:
KILL {SPID value}
Это своего рода глупый ответ, но это работает надежно, по крайней мере в моем случае: В среде management studio, когда "отмена выполнения запроса" не останавливает запрос, я просто нажимаю, чтобы закрыть текущий документ sql. он спрашивает меня, хочу ли я отменить запрос, я говорю "да", и вот через несколько секунд он перестает выполняться. После этого он спрашивает меня, хочу ли я сохранить документ перед закрытием. На этом этапе я могу нажать кнопку Отмена, чтобы сохранить документ открытым и продолжить работу. Понятия не имею, что происходит за кулисами, но это, кажется, работает.
вы можете использовать сочетание клавиш ALT + перерыв остановить выполнение запроса. Однако это может быть не во всех случаях успешным.
если вы отмените и посмотрите, что работать
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.
по-видимому, на sql server 2008 r2 64bit, с длительным запросом из IIS kill spid, похоже, не работает, запрос просто перезапускается снова и снова. и это, кажется, повторное использование spid В. запрос вызывает sql server, чтобы взять как 35% cpu постоянно и повесить веб-сайт. Я предполагаю, что bc/ он не может отвечать на другие запросы для входа в систему
в моей части мой sql повесил трубку, когда я попытался закрыть его во время бесконечного запуска. Итак, что я сделал, я открываю свой диспетчер задач и завершаю задачу своим sql-запросом. Это остановит мой sql и перезапустит его.
простой ответ, Если красное поле " стоп "не работает, это попробовать нажать кнопки" Ctrl + Break " на клавиатуре.
Если вы используете SQL Server на Linux, есть приложение, которое вы можете добавить в свой системный трей под названием " killall" Просто нажмите на кнопку "killall", а затем нажмите на программу, которая поймана в петлю, и она завершит программу. Надеюсь, это поможет.
Я страдаю от того же самого с давних пор. Это особенно происходит, когда вы подключены к удаленному серверу(который может быть медленным), или у вас плохое сетевое соединение. Я сомневаюсь, что Microsoft знает, что такое правильный ответ.
но так как я пытался найти решение. Только 1 непрофессионал подход работал
- Нажмите кнопку закрыть на вкладке запроса, от которого вы страдаете. Через некоторое время (если Microsoft не погорячился !!!) вы можете получить окно с просьбой об этом
" запрос в настоящее время выполняется. Вы хотите отменить запрос?"
нажмите на кнопку "Да"
через некоторое время он будет спрашивать, хотите ли вы сохранить этот запрос или нет?
нажмите на кнопку "Отмена"
и опубликуйте это, может быть, вы studio снова стабильны, чтобы выполнить ваш запрос.
что он делает в фоновом режиме отключение окна запроса с подключением. Поэтому для повторного запуска запроса потребуется время для повторного подключения удаленного сервера. Но поверьте мне, этот компромисс намного лучше, чем страдание от видения того таймера, который работает вечно.
PS: это работает для меня, спасибо, если работает для вас тоже. !!!
Comments