スクリプトを使用してtxtファイルをftpサイトにダンプするために使用されるxp_cmdshell
を呼び出すSQLjobがあります。
時々それは失敗し、ジョブは実行可能な状態でハングアップします。通常、セッションを強制終了すると、クリアされます。
ただし、リンボ状態でハングアップする2つのセッションがあります。
sp_WHO2 53 -- running from 7/8/2018
SP_WHO2 98 -- running from 6/16/2018
ジョブステータスにはRunnable
と表示されますが、コマンドはKILLED/ROLLBACK
です。
Kill 53 with status only
出力
SPID 53: transaction rollback in progress. Estimated rollback completion: 0%. Estimated time remaining: 0 seconds.
KILL 98 with status only
出力
SPID 98: transaction rollback in progress. Estimated rollback completion: 0%. Estimated time remaining: 0 seconds.
これらのセッションをクリアするにはどうすればよいですか?
SQL Serverでパフォーマンスの問題が発生し、これらのセッションが発生しました。私はいくつかの調査を行い、それがログファイルを増やし、パフォーマンスの問題を引き起こすと信じるように私に指摘しました。現在の問題がこれらのセッションが原因であるかどうかはわかりませんが、それらはアクティブで負荷の高いクエリです。だからここから始めようかと思った。私はここの開発者であり、SQL SERVER 2014ではアクティビティモニターが廃止されていることを認識していますが、アクティビティモニターを確認しました。以下は画像です。
どうすればそれを解決できるのか提案できますか?
私はブレントオザーによってそのようなシナリオについてのブログを読みました
- ロールバック:セッションを強制終了するとどうなりますか? 。
根本的な原因を修正することを検討しながら、難しい方法を学びました。
AK
xp_cmdshell
で生成されたWindowsプロセスを強制終了しようとする可能性があります。そのプロセスはおそらく実行中であり、SQL Serverからspidを強制終了しても処理されないためです。あなたがそれを説明する方法は、ftpプログラムがまだ実行されていると思います。
これは、kill
コマンドは、プロセス外で開始されたプログラムを強制終了しないためです。
次のようなシナリオをシミュレートできます。
SQLクエリウィンドウでプロセスを開始します。
xp_cmdshell 'notepad.exe'
そして、そのspidをkillした後、sp_who2であなたと同じ出力を取得します
54 RUNNABLE Administrator hostname . master KILLED/ROLLBACK 0 0 07/24 14:23:02 Microsoft SQL Server Management Studio - Query 54 0
しかし、まだ実行中のnotepad.exeプロセスがあります。
C:\Users\Administrator>tasklist | find "notepad"
notepad.exe 4676 Services 0 3 788 K
Notepad.exeプロセスを強制終了すると、SQL Server spidも消えてしまいます。
プロセスを強制終了するために必要なプロセスを確認する場合は、エクスプローラーでsqlserver.exeの子プロセスとして次のように表示する必要があります(管理者としてprocexp.exeを起動する必要がある場合があります)。