2017-12-14 2 views
1

우리는 Cloud 데이터베이스 솔루션에 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

나는 .. 그들이 먼저 무엇을하고 있는지 알고 밖으로 세션을 죽이는하지 않는 것이 좋습니다

그래서 1 단계는

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

위의 DMV가의 상태를 제공합니다 .. 자신의 현재 상태를 이해하는 것 모든 세션 및 차단 된 경우 차단 된 경우 차단 세션을 확인하고 차단 세션 spid를 입력하여 차단 된 세션을 확인할 수 있습니다.

dbcc inputbuffer(blocking session 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 절에 보관하려는 다른 세션을 추가하십시오.

관련 문제