高分求助一个数据库链接超时的原因

jackymi 2007-10-23 09:23:35
机器配置:HP DL580 满配 (双核2.8*8 32G内存)
机器环境:win2003 企业版+sp1+Sqlserver2005+.net 1.1

近段时间程序总是莫名其妙的出现间歇性的链接超时,过最多十分钟左右就好啦,利用SQL Server Profiler以及SqlServer自带的活动监视器里面也没有发现有任何异常的死锁现象,在性能查看里面检测数据库链接数(15以下)和内存使用率(700M左右)都非常少,实在是找不出来毛病所在,但是重启库就会好,所以可以认定是数据库的毛病,兄弟们有没有好的办法能找出原因。
...全文
206 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackymi 2007-11-01
  • 打赏
  • 举报
回复
z5wjz 你的分析非常正确

日志文件是按百分比增长的,如果文件过大,在进行第二次增长的时候会瞬时分配大容量的磁盘空间,造成cpu以及io的处理处于满负载状态,造成数据库短时间内无法使用。

中国风 2007-10-26
  • 打赏
  • 举报
回复
通过syslockinfo\sysprocesses可以查出那个进程那个表的锁类型
z5wjz 2007-10-26
  • 打赏
  • 举报
回复
SQLSERVER不会显示历史的锁定的日志情况,一旦链接超时了,你也没办法监控到,这是比较难的

你检查一下你的数据文件及日志文件的大小以及使用情况

如果文件很大,而且自动增长比例设置不合理的话,很可能会间歇性的进行文件增长,增长的时候可能会使操作无法进行.

不一定对,你先看看,也可以将得到的信息贴出来.
jackymi 2007-10-25
  • 打赏
  • 举报
回复
up
jackymi 2007-10-24
  • 打赏
  • 举报
回复
up
jackymi 2007-10-23
  • 打赏
  • 举报
回复
up
jackymi 2007-10-23
  • 打赏
  • 举报
回复
up
jackymi 2007-10-23
  • 打赏
  • 举报
回复
up
jackymi 2007-10-23
  • 打赏
  • 举报
回复
up
jackymi 2007-10-23
  • 打赏
  • 举报
回复
兄弟们 觉得分不够 我可以开新帖
freeliu 2007-10-23
  • 打赏
  • 举报
回复
关注一下。
jackymi 2007-10-23
  • 打赏
  • 举报
回复
dawugui兄 怎么跟踪到在处理哪些内容,或者是在程序某些地方出现事务锁定?

SQL Server Profiler以及SqlServer自带的活动监视器我都用过啦 但是还是找不到问题所在
jackymi 2007-10-23
  • 打赏
  • 举报
回复
楼上的兄弟,我在服务里面重启啦sqlserver的相关服务 超时现象就会消失,没必要重启计算机
dawugui 2007-10-23
  • 打赏
  • 举报
回复
极有可能是服务器或数据库正在处理某些内容,来不及响应.
dawugui 2007-10-23
  • 打赏
  • 举报
回复
但是重启库就会好?

一般来说得重启计算机才行.

jackymi 2007-10-23
  • 打赏
  • 举报
回复
备注:在程序里面TimeOut值已经设置为最大,不过现象依旧
jackymi 2007-10-23
  • 打赏
  • 举报
回复
up
jackymi 2007-10-23
  • 打赏
  • 举报
回复
唉 看来只有自己追啦

刚刚查到邹老大的一个处理方法 贴出来出现问题的时候看看

use master
go

--查看锁信息
create table #t(req_spid int,obj_name sysname)

declare @s nvarchar(4000)
,@rid int,@dbname sysname,@id int,@objname sysname

declare tb cursor for
select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
from master..syslockinfo where rsc_type in(4,5)
open tb
fetch next from tb into @rid,@dbname,@id
while @@fetch_status=0
begin
set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
insert into #t values(@rid,@objname)
fetch next from tb into @rid,@dbname,@id
end
close tb
deallocate tb

select 进程id=a.req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then '表'
when 6 then '页'
when 7 then '键'
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,对象id=rsc_objid
,对象名=b.obj_name
,rsc_indid
from master..syslockinfo a left join #t b on a.req_spid=b.req_spid

go
drop table #t
jackymi 2007-10-23
  • 打赏
  • 举报
回复
问题依旧 数据库已经是最新的sp2
kk19840210 2007-10-23
  • 打赏
  • 举报
回复
SQL2005 打上补丁看下
加载更多回复(2)

22,209

社区成员

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

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