sybase杀掉“僵死”链接

来源:互联网 发布:淘宝最好卖的东西 编辑:程序博客网 时间:2024/06/05 20:41
sybase是一个收费的数据库。如果是测试版,会限制链接数。比较奇葩的是,它释放死掉的链接很慢(不知道是不是设置问题),一个小组的人开发的时候,很快链接就满了,sybase很久都不会主动回收。浪费大量的时间在等待数据库链接资源上。我们能够根据系统进程表sysprocesses中的status(recv sleep,sleeping)字段看出那些断掉了但是没被回收的链接,定时杀掉这些链接即可。杀掉链接的存储过程:
create PROCEDURE dbo.sp_killsleepprocAS BEGIN  DECLARE @SPID INT   declare @a int  declare @cspid     char(20)  DECLARE CUR_SPID CURSOR FOR  select p.spid from sysprocesses p,syslogins u   where u.suid = p.suid and u.name in ('user1','user2')   and p.status in ('recv sleep','sleeping')  FOR READ ONLY  OPEN CUR_SPID    FETCH CUR_SPID INTO @SPID    IF @@SQLSTATUS=2 --返回结果集为空    IF @@SQLSTATUS=1 --游标执行出错    BEGIN        RAISERROR 20000 --返回自定义错误号        --RAISERROR 20000,'错误信息' --返回自定义错误号        ROLLBACK        RETURN 10    END    WHILE @@SQLSTATUS=0 --结果集返回正常结果    BEGIN        /**//*Exception*/        FETCH CUR_SPID INTO @SPID        BEGIN        select @cspid=convert(char(20),@spid)        select "kill "+@cspid        exec("kill "+@cspid)        END          ENDEND

执行存储过程的sql:

exec dbo.sp_killsleepprocgo

定时调度设置(使用isql执行sql脚本):

*/5 * * * *  isql64 -Usa -Padmin -S172.255.254.7:5000 -i /redhat/monitor/killsleepproc.sql 2>&1 >> /redhat/monitor/killsleepproc.log
0 0
原创粉丝点击