2017-12-14 12 views
1

私たちは、クラウドデータベースソリューションにAzure SQL DBを使用しています。昨日、開発者の一人がいくつかのエラーが発生しましたが、いくつかの挿入ステートメントを実行しようとしました。私は彼が何度も何度もやり直したと思っています。Azure SQL DBセッションを終了します

開いているセッションを識別するために以下のクエリを実行し、開発者がログインするための30個の独立したエントリを表示します。または私はそれらを一人残すべきですか?私たちのDBがセッションを「ハングアップ」しているかどうかを評価する必要がある何か他にありますか?

SELECT 
c.session_id, c.net_transport, c.encrypt_option, 
c.auth_scheme, s.host_name, s.program_name, 
s.client_interface_name, s.login_name, s.nt_domain, 
s.nt_user_name, s.original_login_name, c.connect_time, 
s.login_time 
FROM sys.dm_exec_connections AS c 
JOIN sys.dm_exec_sessions AS s 
ON c.session_id = s.session_id 
WHERE 1=1 
    and login_name = 'some_user_name' 

答えて

2

私は...彼らは最初に何をしているか知ってとのセッションを殺すことはお勧めしません

ので、STEP1は

select spid,blocked,waittime,waittype,lastwaittype,txt.text 
from sys.sysprocesses sp 
cross apply 
sys.dm_exec_sql_text(sp.sql_handle) txt 

上記DMVは、の状態を示します。..彼らの現在の状態を理解することだろうすべてのセッション、あなたはそれらのいずれかがブロックされている場合、彼らがブロックされている場合は、あなたがブロックしたセッションを確認することができますし、それが

dbcc inputbuffer(blocking session spid) 
以下のようにブロックするセッションのSPIDを入力することによりブロックされている理由を知ってみてください見ることができます

あなたが発生しているハングしている状態がブロッキングによるものかどうかを調べることができます。ブロッキングを解決しようとするか、ブロッキングspidを強制終了してみてください

ブロッキングは表示されませんが、ハングは、セッションが実際にいくつかの仕事をしているかどうかをチェックすることができますこの方法をstate..by、最後の読み取りを確認するためにDMVの下に実行してみ書き、それを殺す前にセッションが何であるかをチェックしてみ(入力バッファを使用して

select last_read, 
last_write,session_id,connect_time 
from sys.dm_exec_connections 

なぜなら、内部プロセスのようなものがあるからです。

SSISDB.internal.update_worker_agent_status;1 
0

あなたはそれらを殺すことができます。オープンなトランザクションはロールバックされます。以下のスクリプトはあなた以外のすべての接続を殺すのに役立ちます。

DECLARE @kill varchar(8000) = ''; 

SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(5), c.session_id) + ';' 

FROM sys.dm_exec_connections AS c 
JOIN sys.dm_exec_sessions AS s 
    ON c.session_id = s.session_id 
WHERE c.session_id <> @@SPID 
--WHERE status = 'sleeping' 
ORDER BY c.connect_time ASC 

EXEC(@kill) 

WHERE句に保存したい他のセッションを追加します。

関連する問題