关于数据库中的 进程 和 锁 的问题

TIRO1327 2003-06-04 11:10:17
问题描述:
这是关于OA中公文流转的一个数据库。
数据库及前台程序是来自于别人的系统。

在前台完成一个公文流转以后查看数据库的系统表 sysprocesses 中就会出现 500-1000个进程是关于该数据库的而且绝大部分的status是sleeping
在syslocks表中有500-1000个锁是属于该数据库的它们的rsc_type决大多数是3 (资源类型为文件类型)

分离该数据库或是重新启动数据库服务后以上的表中无上述的情况.

求解:


...全文
47 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TIRO1327 2003-06-04
  • 打赏
  • 举报
回复
TO: wgy2008(北极光)
谢谢!
我试试看
wgy2008 2003-06-04
  • 打赏
  • 举报
回复
自动杀死死进程
CREATE PROCEDURE SP_AUTOKILLID AS
declare
@li_lockcnt integer,
@li_spid integer,
@ls_cmd char(50),
@ls_sql char(30)
select @li_lockcnt = count(*) from master..syslocks where type =258
if @li_lockcnt<1
return
else
begin

select @li_spid = spid from master..syslocks where type = 258
if @li_spid is null
return
else
begin
select @ls_cmd = cmd from master..sysprocesses where spid = @li_spid
if @ls_cmd = 'AWAITING COMMAND'
begin
select @ls_sql = 'KILL '+ltrim(str(@li_spid))
exec(@ls_sql)
end
end
end




GO
TIRO1327 2003-06-04
  • 打赏
  • 举报
回复
我们这个系统的用户人数在10000人,上述的办法可能治标不治本。

我现在想找到产生上述情况的方法
pengdali 2003-06-04
  • 打赏
  • 举报
回复
做个作业晚上执行:

create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status < >-1
begin
exec('kill '+rtrim(@spid))
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end

--用法
use master
exec killspid '数据库名'

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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