sql server 客户端连接,有设置空闲时间的设置吗

dampce32 2019-01-16 11:28:53
环境:sql server 2014
问题:使用 sql Server Management Studio 连接数据库后,能设置空闲会话时间?连接后一段时间未操作,连接自动断开
...全文
807 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dampce32 2019-01-18
  • 打赏
  • 举报
回复
大家的思路是一样就是通过杀死进程来关闭连接。我做了个实验,分别打开客户端SSMS和Navicat


用Navicat杀死SSMS的进程

再用未关闭的SSMS查询,发现连接没有断开
吉普赛的歌 2019-01-18
  • 打赏
  • 举报
回复
不用怀疑已 kill 掉的连接,这个连接已经是无效的了。 如果你再多创建几个查询窗口, 就会发现已 kill 掉的进程号(假如是 55), 会出现在新的查询窗口标题上。此时你再来执行原来的已 kill 掉的进程号窗口的查询, 会发现已经变成其它进程号了。
唐诗三百首 2019-01-16
  • 打赏
  • 举报
回复
可以写个SQL作业, 定时检查长时间未操作的进程(session), 逐个kill掉.
薛定谔的DBA 2019-01-16
  • 打赏
  • 举报
回复
引用 4 楼 dampce32 的回复:
[quote=引用 2 楼 薛定谔的DBA 的回复:] 一般是客户端设置,服务端的连接池由客户端连接控制,服务端连接池数可以查看 sys.sysprocesses 这个表,默认8小时吧
也就是说sql Server Management Studio中有设置空闲时间的设置项吗?[/quote] 通过TCP/IP 连接,客户端会每30秒回检查一此连接是否正常,如下: SQL server 不会关闭一个正常的TCP连接,所以每次连接不需要的时候需要主动断开。因此 SSMS 的连接也会一直保持,SSMS 每次都是一次物理连接一直保持着,当然 SSMS 工具也可以设置每执行完一次立即中断,但每次执行语句都重新建立一次连接。
吉普赛的歌 2019-01-16
  • 打赏
  • 举报
回复
哦, 不好意思, 你只是想删除 ssms 客户端的进程呀。这个有意义, 也好办的。

你可以用 SQL Server 的作业创建一个定时任务, 计划4小时执行一次, 步骤中的SQL如下:
DECLARE @sql NVARCHAR(MAX)
SET @sql=''
SELECT @sql='kill '+LTRIM(spid)+';' FROM sys.sysprocesses AS s
WHERE s.spid>50 --不是系统进程
AND s.spid<>@@SPID --不是当前进程
AND s.last_batch<DATEADD(HOUR,-4,GETDATE()) --最后执行时间是4小时之前
AND s.program_name='Microsoft SQL Server Management Studio' --从客户端连接
--输出要执行的SQL
PRINT @sql
--执行动态SQL
EXEC(@sql)

吉普赛的歌 2019-01-16
  • 打赏
  • 举报
回复
不明白你这么做有啥意义? 如果空闲的连接导致了数据库的压力和无谓的消耗, SQL Server 为什么不默认清除这些空闲连接?? 在绝大多数程序中的连接串, 是有连接池选项的。因为连接的创建的消耗比较大, 所以用完的连接不会立即释放, 而是放入连接池。如果下次有请求, 只要连接池中有空闲连接, 则直接从连接池中取出来用就是了。连接池机制对经常访问数据库程序性能的提高不是一点点,有些没用连接池的程序在并发稍多的情况下很容易卡死崩溃。 用了连接池, 空闲的连接可能会用到, 而你如果采用定时杀进程的方式, 很可能将连接池中的备用连接给干掉了,得不偿失。 kill 进程只能是不得已而为之, 一般情况下, 不要随便干预数据库的自身机制。
唐诗三百首 2019-01-16
  • 打赏
  • 举报
回复
引用 3 楼 dampce32 的回复:
[quote=引用 1 楼 唐诗三百首 的回复:]
可以写个SQL作业, 定时检查长时间未操作的进程(session), 逐个kill掉.

大概涉及到的表是哪些,能列下吗[/quote]
写了个Demo, 供参考,

declare @tsql nvarchar(1000)

declare ap scroll cursor for
select distinct 'kill '+rtrim(spid)
from sys.sysprocesses
where spid>50
and status<>N'background'
and datediff(hh,last_batch,getdate())>8 --> 未执行SQL超过8小时

open ap
fetch from ap into @tsql
while(@@fetch_status<>-1)
begin
exec(@tsql)
fetch next from ap into @tsql
end

close ap
deallocate ap
dampce32 2019-01-16
  • 打赏
  • 举报
回复
引用 2 楼 薛定谔的DBA 的回复:
一般是客户端设置,服务端的连接池由客户端连接控制,服务端连接池数可以查看 sys.sysprocesses 这个表,默认8小时吧

也就是说sql Server Management Studio中有设置空闲时间的设置项吗?
dampce32 2019-01-16
  • 打赏
  • 举报
回复
引用 1 楼 唐诗三百首 的回复:
可以写个SQL作业, 定时检查长时间未操作的进程(session), 逐个kill掉.

大概涉及到的表是哪些,能列下吗
薛定谔的DBA 2019-01-16
  • 打赏
  • 举报
回复
一般是客户端设置,服务端的连接池由客户端连接控制,服务端连接池数可以查看 sys.sysprocesses 这个表,默认8小时吧
本课程根据讲师十多年在世界500强外企的生产环境中的SQL Serer数据库管理和项目实施经验倾心打造。课程系统性强,知识体系完整,覆盖90%以上的企业环境下SQL Server高可用场景,课程中不仅演示详细的操作步骤,更加突出最常见的故障和问题,让学员少走“弯路”,不只是让学员学会“操作”更能让学员“操作”的规范,满满的干货分享,一些课程资料(架构图、部署规划表格等)不仅可以帮助学员掌握技能,也可以作为学员在企业生产环境中实施SQL Server高可用的配置文档、操作手册等。课程的实验环境介绍:1)全部基于微软域环境和企业版SQL Server AOAG - 95%以上的企业环境都是在域环境中,不介绍非域环境和标准版的SQL Server高可用性组,这的配置在企业中较罕见,没有实践意义,不浪费学员时间。2)相应域环境已提前部署和配置好 - 学员导入虚拟机即可开始实验,无需从零开始搭建域环境,所有实验中SQL Server均已加域,直入主题,节省大量时间。3)最新的Windows Server故障转移集群(WS2016、WS2019)和最新版本的SQL ServerSQL2017、SQL2019) -  WS2016-SQL2017与WS2019-SQL2019是目前大多数企业SQL Server高可用的主要平台,基于微软产品生命周期现在一些企业也在讲早期的AOAG向这两个版本迁移,掌握这两种组合不仅让学员学会,更能学有所用。本课程为后续SQL Server进阶课程铺垫,是通向SQL Server DBA 专家的必经之路,讲师每周答疑两次。所有课程资料包括:课程PPT、架构图、部署规划表格、各类脚本学员均可下载。     

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧