O Ourland Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-19 #1 有一个表中有100万条数据,提取数据速度非常慢,甚至当机! 我试过设置ADO由服务器保存指针,也设置了分多批发送到客户端,但始终无法提高数据提取速度,请高人指点!
J Johnny_du Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-19 #2 既然是三层,那么业务逻辑应该都在DB就近的应用层服务器上处理了,到客户端的仅仅是处理结果而已,怎么还会有数量惊人的数据到达客户端呢?采用三层结构如果应用层和DB间的网络状况不好有可能成为性能瓶颈。解决方法,可以采用将中间层服务器和DB服务器就近安排原则(尽量减小物理距离)并安装高性能的网络(如光纤千兆以太网);若是业务逻辑层数据量和事务量太大可以考虑在邻近DB服务器安排多台业务逻辑层服务器,并进行负载均衡处理。
既然是三层,那么业务逻辑应该都在DB就近的应用层服务器上处理了,到客户端的仅仅是处理结果而已,怎么还会有数量惊人的数据到达客户端呢?采用三层结构如果应用层和DB间的网络状况不好有可能成为性能瓶颈。解决方法,可以采用将中间层服务器和DB服务器就近安排原则(尽量减小物理距离)并安装高性能的网络(如光纤千兆以太网);若是业务逻辑层数据量和事务量太大可以考虑在邻近DB服务器安排多台业务逻辑层服务器,并进行负载均衡处理。
A aerobull Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-19 #3 网络带宽很重要。 数据应该是压缩后传输了吧。 你可以看看在提取数据时,服务器上内存与cpu的占用。 带宽与服务器资源够用的话,用多线程提取数据试试。
O Ourland Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-19 #4 我是在同一台机来测试的,现在还未到网络传输的问题!
J Johnny_du Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-19 #5 不会是数据库服务器、中间层服务器和客户端都在同一台机器上吧?要是这样效率肯定是个问题,因为前两个服务器所占用的资源肯定很多,所以肯定会造成客户端(其实还是在同一台机器上)反应迟钝的,除非你的机器配置非常出色... 建议你用2台服务器+1台PC机的方式进行标准测试;或者用1台服务器(运行DB服务器和业务逻辑服务器)+1台PC机的方式进行测试。这样才能够感受到系统真正的运行效率,也就是实际部署后系统的真实运行情况。
不会是数据库服务器、中间层服务器和客户端都在同一台机器上吧?要是这样效率肯定是个问题,因为前两个服务器所占用的资源肯定很多,所以肯定会造成客户端(其实还是在同一台机器上)反应迟钝的,除非你的机器配置非常出色... 建议你用2台服务器+1台PC机的方式进行标准测试;或者用1台服务器(运行DB服务器和业务逻辑服务器)+1台PC机的方式进行测试。这样才能够感受到系统真正的运行效率,也就是实际部署后系统的真实运行情况。
A aabbcc250 Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-19 #6 排除机器硬件的原因之外,那就应该是数据库的设计和优化的问题了。表结构是否合理、是不是用了不必要的索引、读取数据时隐式地启动了事务,等等,原因很多了。各种数据库各有自己的一套测试、优化方法和策略,只能靠你自己了。 还有,为什么不采取存储过程的方式直接在服务端进行处理,非要把100万数据送到客户端进行处理?这样效率很低,而且系统实施后网络负载也很大啊!
排除机器硬件的原因之外,那就应该是数据库的设计和优化的问题了。表结构是否合理、是不是用了不必要的索引、读取数据时隐式地启动了事务,等等,原因很多了。各种数据库各有自己的一套测试、优化方法和策略,只能靠你自己了。 还有,为什么不采取存储过程的方式直接在服务端进行处理,非要把100万数据送到客户端进行处理?这样效率很低,而且系统实施后网络负载也很大啊!
O Ourland Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-20 #7 确实,我在同一台机建立客户服务器模型来处理的时候,CPU和内存的使用都非常大! 我并不是一定要提取100万条到客户端,现在主要是一个大型的项目,客户要求我要拿出一个提取这么多数据的时候怎么解决效率问题的方案,提取的效率越快就越有竞争力!
确实,我在同一台机建立客户服务器模型来处理的时候,CPU和内存的使用都非常大! 我并不是一定要提取100万条到客户端,现在主要是一个大型的项目,客户要求我要拿出一个提取这么多数据的时候怎么解决效率问题的方案,提取的效率越快就越有竞争力!
J JeLiY Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-20 #8 我想是你理解错误呢,还是客户有病,我想不会有哪家公司会在很短的时间内处理这么多的数据。
A aabbcc250 Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-20 #9 那就使用多线程技术啦。客户端程序同时开多个线程,按照表的KEY字段,分段同时提取数据到客户端的数据集中。
F flysand Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-20 #10 这么多数据,当然只能分段提取, 处理100W条数据,对现在的PC来说,小菜一碟,除非你的没建好索引!
L LanderLiu Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-20 #11 首先肯定需要合理的索引 其次100万条不可能频繁提取,如你发现程序里需要频繁提取的话就要改进你的程序了.
D delphigbg Unregistered / Unconfirmed GUEST, unregistred user! 2006-10-24 #13 应该分批处理,就是在查询分析器中你读一百万条记录,也要一段时间.