Azure sql database 终止Azure SQL数据库会话

Azure sql database 终止Azure SQL数据库会话,azure-sql-database,Azure Sql Database,我们正在使用Azure SQL DB作为云数据库解决方案。我们的一位开发人员昨天在尝试执行一些insert语句时遇到了一些错误。我怀疑他一次又一次地尝试,而且 我运行了下面的查询来识别打开的会话,并查看了30个单独的条目,供开发人员用于登录的用户使用。这样做值得吗?还是我应该让他们单独呆着?我是否应该评估其他内容来告诉我DB是否有“挂起”会话 SELECT c.session_id, c.net_transport, c.encrypt_option, c.auth_scheme,

我们正在使用Azure SQL DB作为云数据库解决方案。我们的一位开发人员昨天在尝试执行一些insert语句时遇到了一些错误。我怀疑他一次又一次地尝试,而且

我运行了下面的查询来识别打开的会话,并查看了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'

你可以杀了他们。打开的事务将回滚。下面的脚本可以帮助您删除除您的连接以外的所有连接

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)
声明@kill varchar(8000)='';
选择@kill=@kill+'kill'+CONVERT(varchar(5),c.session_id)+';'
从sys.dm_exec_连接作为c
以s的身份加入sys.dm_exec_会话
在c.session\u id=s.session\u id上
其中c.session_id@@SPID
--其中status='sleeping'
按c.connect\U time ASC订购
EXEC(@kill)

在WHERE子句上添加您想要保留的其他会话。

您可以终止它们。打开的事务将回滚。下面的脚本可以帮助您删除除您的连接以外的所有连接

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)
声明@kill varchar(8000)='';
选择@kill=@kill+'kill'+CONVERT(varchar(5),c.session_id)+';'
从sys.dm_exec_连接作为c
以s的身份加入sys.dm_exec_会话
在c.session\u id=s.session\u id上
其中c.session_id@@SPID
--其中status='sleeping'
按c.connect\U time ASC订购
EXEC(@kill)

在WHERE子句中添加您想要保留的其他会话。

我不建议在不知道会话首先要做什么的情况下终止会话

因此,第一步是了解他们目前的状态

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)
使用此选项,您可以尝试检查所经历的挂起状态是否是由于阻塞造成的。您可以尝试解决阻塞或尝试终止阻塞spid

如果您没有看到任何阻塞,但如果您认为这些会话已挂起,请尝试在dmv下运行以查看上次读、写状态。通过这种方式,您可以检查会话是否真的在做一些工作

 select last_read,
last_write,session_id,connect_time
 from sys.dm_exec_connections
尝试在终止会话之前检查会话的内容(使用输入缓冲区)。因为,有些可能是内部进程,如

SSISDB.internal.update_worker_agent_status;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)
使用此选项,您可以尝试检查所经历的挂起状态是否是由于阻塞造成的。您可以尝试解决阻塞或尝试终止阻塞spid

如果您没有看到任何阻塞,但如果您认为这些会话已挂起,请尝试在dmv下运行以查看上次读、写状态。通过这种方式,您可以检查会话是否真的在做一些工作

 select last_read,
last_write,session_id,connect_time
 from sys.dm_exec_connections
尝试在终止会话之前检查会话的内容(使用输入缓冲区)。因为,有些可能是内部进程,如

SSISDB.internal.update_worker_agent_status;1