在三层中,查询占用服务器很高的CPU,怎样优化? 我用的是:DELPHI6.0+ACCESS,每次在客户端一位用户进行查询时候(记录上万),都会占用服务器CPU很高的资源,多个用户同时进行查询服务器就不能胜任了.我是用的filter在客户端进行的过滤!怎样优化? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1,不需要的数据应该在服务器端过滤掉;2,记录上万时应该优化SQL,并且分包; 你这不是三层,应该在server端提供一个方法,client调用方法,只返回client需要的数据 设置ClientDataSet的Filtered=false,PacketRecords=每次下载的数量例如50;这样就可以很快的查询,需要的时候通过GetNextPacket来取得下一个数据包。 嗯。看看SQL算法优化。我感觉有时候,在第一步时,就把不用的数据先过滤掉,是最好的了 Delphi + Access的优化简直是太难了:原因:(1)Access属于文件数据库,从根本上就限制了Access的并发操作。(2)Access是微软为桌面型用户准备的,没有多少可以提高效率的方法。建议解决方法:(1)找一下MSDN之类的资料,看能不能找到Access的存储和I/O方式,看是否能够避免费时的操作(2)根据Access的优化要求,重新创建和整理索引。 你这不是三层,应该在server端提供一个方法,client调用方法,只返回client需要的数据 楼上几位说的都有道理, 要反回给客户端的数据最好是用户真正想要得到的资料,一万笔以上的资料对客户来讲没有多大的意义.Server 一端最后是无状态的 Client 一端的SQL语句的限定条件一定要能够达到只返回真正有意义的资料返回到ClientApp Sorry! Server 一端最后是无状态的 => Server 一端最好是无状态的 另外对ACCESS的性能不清楚, 如果是InterBase 会不会好一些! 建议换sql server 或者ORacle 你如果用Access,还不如不要用三层的. 用MYSQL吧。效率奇高,而且很快。又免费 (1)设计应该避免一次从数据库选取过多记录,可通过SQL条件过滤(2)如果确实需要取这么多数据,就应该分批多次选取。(3)还有,如果不是必须的字段,尽量不要取。 如何避免服务器端CPU占用过高,应当认识服务器端在向客户端发送数据的过程和机理,一般来讲,应用服务器从数据服务器获取数据后打包并压缩,再发送给客户端,而其中获取数据后打包和压缩占用了服务器端大量的CPU和内存,所以应用服务器开发应当考虑:1.利用SQL语句在数据库服务器上尽量过滤不需要的数据;2.在应用服务器上企业服务对象间交换数据时尽量使用Clone,而不是DATA=DATA;3.数据分包发往客户端;建议看看李维的《三层开发系统篇》 菜鸟问题:如何用TIdTCPServer和TIdTCPClient现实数据单向传送? 如何获得局域网中所有SQL服务器的名字(包括2000和2005的) DataSet数据集赋值效率问题? 一个错误代码is not a valid integer value?什么意思`? 求n个字符中k个字符的任意组合。 请教:这个问题如何下手? 关于窗体实时监测,更改按钮图标 wmstream.dll 微软提供的这个dll是干什么的?? 怎样自动取得服务器的ip地址? 困惑我的消息处理!!!! 向各位请教·! ComboBox1.AddItem()的第二个参数意义
2,记录上万时应该优化SQL,并且分包;
这样就可以很快的查询,需要的时候通过GetNextPacket来取得下一个数据包。
原因:
(1)Access属于文件数据库,从根本上就限制了Access的并发操作。
(2)Access是微软为桌面型用户准备的,没有多少可以提高效率的方法。建议解决方法:
(1)找一下MSDN之类的资料,看能不能找到Access的存储和I/O方式,看是否能够避免费时的操作
(2)根据Access的优化要求,重新创建和整理索引。
Client 一端的SQL语句的限定条件一定要能够达到只返回真正有意义的资料返回到ClientApp
Server 一端最后是无状态的 => Server 一端最好是无状态的
(2)如果确实需要取这么多数据,就应该分批多次选取。
(3)还有,如果不是必须的字段,尽量不要取。
1.利用SQL语句在数据库服务器上尽量过滤不需要的数据;
2.在应用服务器上企业服务对象间交换数据时尽量使用Clone,而不是DATA=DATA;
3.数据分包发往客户端;
建议看看李维的《三层开发系统篇》