日期:2014-05-19  浏览次数:20649 次

程序性能问题,高手请进,谢谢
我们经理用VB(5/6)编写了一个比较大(60多万行代码)的行业软件,公司各个部门都用它来处理数据和业务,比如下单、提单、跑月结、跑报表等。
                  现在遇到了一个非常棘手的问题:
                  多人使用的时候(执行各种操作),有时速度会一下子骤降下来,本来以前2秒钟能读到的数据有时要等好几分钟,最严重时等过十几分钟,但通过查询分析器登录到SQLServer执行相关操作时却很快。
                  我们被这个问题困扰了很久,一直找不到原因,也不知具体问题出在哪里!!!
                  由于该软件编写得比较早(始于VB5),用的是RDO连接SQL2000服务器,大部分的数据库操作都是通过调用存储过程实现。
                  由于我写程序的时间比较短,对VB、RDO、SQLSERVER都不是很了解,
                  热切希望得到各位高手,特别是熟悉vb\rdo\MS   SQLSERVER的高手的帮助和指点!
谢谢!

------解决方案--------------------
你这个问题有点像死锁不过vb好像是没有多线程的功能,感觉数据库出问题的可能性比较大。
------解决方案--------------------
可以改版了,你们那系统
------解决方案--------------------
是不是 使用太久 数据库 单表 数据过大
sql 2000中 最好一个表不要超过千万行, 单个数据库大小 5g下 为宜...
------解决方案--------------------
避免多人同时操作数据库.
多考虑数据缓存
------解决方案--------------------
多人使用的时候(执行各种操作),有时速度会一下子骤降下来,本来以前2秒钟能读到的数据有时要等好几分钟,最严重时等过十几分钟,但通过查询分析器登录到SQLServer执行相关操作时却很快。
====>
应该是网络堵塞的结果,如果是竞锁,用查询分析器也应该很慢
解决的方法是找到经常使用的模块中传输大数据量的地方
然后分块传送,一次只传指定的条数

------解决方案--------------------
应该是死锁问题!改善下读取数据权限方式
------解决方案--------------------
我觉得这主要是数据库性能的问题
SQL2000中有同时处理多用户的功能
多用户同时调用应该不会出现这样的问题
如上面所说
可能是你数据库的设计及容量存在问题
------解决方案--------------------
不知道检查sql server中的进程信息、锁信息能得到什么吗?
感觉很有可能在慢速网络连接情况下会出现问题
------解决方案--------------------
查询分析器登录到SQLServer执行相关操作时却很快

=======================

是在速度变慢的时候执行的么?如果是,那么要检查是否网络有问题

另外大部分业务逻辑都是通过存储过程实现,多个用户同时操作的话,速度慢下来是很正常的,特别是服务端执行大数据量查询还有密集运算的时候
------解决方案--------------------
认真检查操作的对象,不同的操作创建不同对数据库操作的实例,很多人有时喜欢开发对象数据库操作的单例,在封装数据库操作对象时要么创建新的实例,要么在初始化创建对象池。
------解决方案--------------------
用跟踪器看看
------解决方案--------------------
可能使用了大量的事务,SQLServer处理事务的时侯会把数据库锁住的,所有对于某些需要人机对话的部分不能使用事务。
------解决方案--------------------
还是先把日志代码补上,然后根据日志找到到底在那些调用上耗时较大,解决问题的根本是发现到底是什么地方出了问题,是数据库锁还是其他?在没找到问题之前,所有的解决方案都建立在假定基础上,没什么意义.
------解决方案--------------------
根据你的描述可知,系统一直在运行,并不断升级.那么导致问题出现可能有两个原因:
1.系统升级导致问题的出现.
对最近修改过的代码进行测试,查找问题所在.
2.系统长时间运行后出现系统瓶颈.
主要是业务量的增加,数据量的增加和用户数的增加可能导致瓶颈的出现.建议进行全面的性能测试,查找系统瓶颈.建议组织几个熟悉系统的技术人员在实际系统中进行测试.
------解决方案--------------------
如果不是网络速度,服务器硬件瓶颈的话就一定是数据库设计得不好,没有使用事务和灵活使用锁
------解决方案--------------------
估計是數據庫的 ,用Profiler跟蹤分析一下。
------解决方案--------------------
sql server确实支持多连接,问题是,服务器的处理能力是有限的,如果一下子同时来了多个请求,形成一个峰值,那么速度肯定会慢下来,单个请求的处理时间一定会变长

用系统监视器监视一下sql相关的性能计数器,特别是lock,Memory,Transaction,connection等