作者:xia | 来源:互联网 | 2023-05-18 23:14
我是一家公司的技术人员,自己用delphi开发了一套小型ERP系统。问题描述:周一大概十点开始卡,访问数据特别地慢,周二至周五是下午一点开始卡。晚上访问正常。
我是一家公司的技术人员,自己用delphi开发了一套小型ERP系统。
问题描述:
周一大概十点开始卡,访问数据特别地慢,周二至周五是下午一点开始卡。晚上访问正常。
在查询分析器执行下列语句
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
有时没有数据,有时就会有大量地表被锁住,而这些表根本就没有加事务,有时候执行一条Sql语句也会把表锁住,卡的时候在客户执行sql语句后面加上 with (nolock)也没有用。表都加了索引。
服务器配置:
普通台式机,操作系统:windows 2003
CPU:双核
内存:4G
数据库:MS SQLServer 2008
服务器上放了一个快驴中间件,(delphi的中间件),tomcat
现在公司运行ERP系统的时候速度特别地慢,我一直找不到原因,如果是服务器配制低了,我就直接跟老板申请购买专业服务器,但我怀疑是不是技术上的问题。请高手指点迷津
7 个解决方案
如果数据量小比如几十G,并发量少(几十个客户端),初步估计是设计质量问题
换台好服务器能起的作用有限
你还应该看一下锁的类似和模式
select
request_session_id,
OBJECT_NAME( resource_associated_entity_id),
request_mode,request_type
from sys.dm_tran_locks
where resource_type='OBJECT'
造成阻塞不是加不加事务的问题,比如你一个更新很慢,如果用不到合理的索引,他就要执行很长时间
此时你其他回话再做查询的话,极有可能被阻塞
我觉得你的大表的增删改查要优化一下,看看是不是能合理地用到索引
另外你说“表都加了索引。”加了索引并不等于能用到索引,关键是看你怎么操作的
像你这中情况,我怀疑是个别大表的操作引起的,
小表的话,几千条几万条数据的那种,怎么玩都没关系,
就怕是大表,哪里设计或者是操作不合理的话,可以拖慢整个系统的
还是要分析慢的地方,是因为CPU,IO,还是语句问题产生了错误。来进行定位锁的原因。
根据不同的错误继续深入来查找问题的瓶颈点。 从时间上看,lz这个问题发生在业务高峰时段,可以跟踪一下高峰时段的基本线,看看跟平时的差异。
看问题点,可以发生在IO上,如果发生在IO上,注意高发语句的索引使用问题。以及表碎片的问题。
谢谢tk各位的热心回答,换了专业服务器,一切都正常了。