运行环境:
有一套用pb9.0开发的业务系统。客户端数量在180个左右,有10个站点,每个站点有1-20台电脑使用该系统,系统数据库总数据量为1200万条记录。但每个表的数据都没有超过60万条;中心服务器配为IBM企业级服务器,2*4核2.6CPU,8G内存,Raid5磁盘阵列,SAS磁盘阵列柜,数据库是sqlserver2000,操作系统是WinServer2003;系统中心交换机为24端口准三层交换机,没有做VLAN,所有站的计算机都在同一段ip地址范围。但是交换机的每个端口都做了端口屏蔽的功能(每个站点都可以访问服务器,但是站和站之间不能相互访问)
故障现象:
各站点在使用业务系统处理业务时,系统突然会变得非常慢,数据查询和业务办理都很慢很慢甚至出现假死机。(该业务系统在多个地区运行都没有发现该问题,排除了病毒,系统变慢时在同一网络中运行的OA系统却没有影响)不是所有的机器都出现这个情况,大概每天都会一到两次,每次持续时间为5分钟-1小时不等.而且是随机出现,今天出现在这台电脑上,明天又出现在那台电脑上。出现系统变慢的时候,ping服务器网络通讯是正常的。重启服务器系统又正常了。通过观察sqlserver2000,发现数据库出现拥塞,有时候系统可以自己恢复,有时候要重新启动服务器才可以。数据库出现拥塞的时候,奇怪的是只有某些站点的计算机上的业务系统会变慢,并不是全网操作这套系统的机器都变慢。后来通过优化业务系统原代码和重新安装winServer2003和sqlserver2000(经分析发现阻塞来源为程序中的一条语句:select getdate() from gettimes ;gettimes为自己设计的一个表,里面只有一行数据。搞不清楚这么一条语句怎么引起阻塞,什么都没有提交啊;或者是不是还有其他原因???水品有限想不到其他原因),状况好了一些。但是现象还是会出现。发生频率大概是1到2天出现1次。请教各位朋友怎么找出故障啊?谢谢!
有一套用pb9.0开发的业务系统。客户端数量在180个左右,有10个站点,每个站点有1-20台电脑使用该系统,系统数据库总数据量为1200万条记录。但每个表的数据都没有超过60万条;中心服务器配为IBM企业级服务器,2*4核2.6CPU,8G内存,Raid5磁盘阵列,SAS磁盘阵列柜,数据库是sqlserver2000,操作系统是WinServer2003;系统中心交换机为24端口准三层交换机,没有做VLAN,所有站的计算机都在同一段ip地址范围。但是交换机的每个端口都做了端口屏蔽的功能(每个站点都可以访问服务器,但是站和站之间不能相互访问)
故障现象:
各站点在使用业务系统处理业务时,系统突然会变得非常慢,数据查询和业务办理都很慢很慢甚至出现假死机。(该业务系统在多个地区运行都没有发现该问题,排除了病毒,系统变慢时在同一网络中运行的OA系统却没有影响)不是所有的机器都出现这个情况,大概每天都会一到两次,每次持续时间为5分钟-1小时不等.而且是随机出现,今天出现在这台电脑上,明天又出现在那台电脑上。出现系统变慢的时候,ping服务器网络通讯是正常的。重启服务器系统又正常了。通过观察sqlserver2000,发现数据库出现拥塞,有时候系统可以自己恢复,有时候要重新启动服务器才可以。数据库出现拥塞的时候,奇怪的是只有某些站点的计算机上的业务系统会变慢,并不是全网操作这套系统的机器都变慢。后来通过优化业务系统原代码和重新安装winServer2003和sqlserver2000(经分析发现阻塞来源为程序中的一条语句:select getdate() from gettimes ;gettimes为自己设计的一个表,里面只有一行数据。搞不清楚这么一条语句怎么引起阻塞,什么都没有提交啊;或者是不是还有其他原因???水品有限想不到其他原因),状况好了一些。但是现象还是会出现。发生频率大概是1到2天出现1次。请教各位朋友怎么找出故障啊?谢谢!
搞清楚引起阻塞的spid锁定了哪些资源,然后再排查相关的语句。
才能找到问题所在.
看对应的spid.
http://topic.csdn.net/u/20080714/23/3ef42c96-f92d-4d79-9ccb-9e0de62f55f0.html
希望对你有帮助
CREATE PROCEDURE sp_getxhz @xhbm tinyint,@xhz int output
AS
begin tran
set @xhz=0
if not exists(select * from xhb where xhbm=@xhbm)
begin
set @xhz=0
insert into xhb values(@xhbm,0)
if @@error!=0
begin
rollback tran
return 25
end
end
select @xhz=xhz+1 from xhb where xhbm=@xhbm
update xhb set xhz=xhz+1 where xhbm=@xhbm
if @@error!=0
begin
rollback tran
return 25
end
commit tran
return 0
GO
-------------------------------------------- pb程序里面调用的代码为:
ll_sfid=getxhz(100)
if ll_sfid <0 then
rollback;
messagebox("提示","得到收费序号失败。")
return
end if
AS
begin tranSET @xhz=1
UPDATE xhb SET @xhz=xhz=xhz+1 FROM xhb WHERE xhbm=@xhbm
IF @@ROWCOUNT=0
INSERT INTO xhb VALUES (@xhbm,@xhz)
IF @@ERROR!=0
BEGIN
ROLLBACK TRAN
RETURN 25
END
COMMIT TRAN