|
lizhifang649 发表于 2013-6-4 00:51 ![]()
现在做维护,主要优化前期上线时开发的报表。 发现性能慢。第一先优化SQL语句(for all entries in占大多数 ...
本质上还是一样的,写成函数和直接到数据库去读取数据,只要你是放在loop中执行的话,都是I/O次数太多。直接写成函数和由sap的open sql帮助解释下,这个翻译过程所耗用时间几乎可以无视不计。
对于机械硬盘来说,磁盘启动、寻道、停车,无论你每次取数多少,这些所费时间是都是必不可少的。如果你I/O次数太多,不定的磁盘启动、停止。所以性能不可避免的就慢下来了。
就打个比方,你雇一个人帮你搬书,这个司机是按照每趟收费的,司机不关心每趟搬多少东西,只要他的车可以装的下,每趟100元,你愿意:
1. 让这个司机每次搬书5本,搬运2000趟,
2. 还是搬1趟,一次搬10000本。
进行性能调优:
1. 首先看I/O次数如何降低;(尽量从每个数据表取数,你只能取一次)
2. 提升每次I/O的效率;(每个SQL的执行效率,是否超过10万的数据,在查询条件中却没有用到任何主键和索引,也是不可接受的)
3. 提升CPU的效率,尽量把可以使用read table 结合binary search的来替换loop。避免两次loop循环。
4. 减少内存空间的占用(从数据表选择的字段不不要的不要选,选择数据行,尽量精确,在保证IO次数低的条件下,尤其是是报表程序,选择数据库表的那些查询条件的组合,先查什么表,后查询什么表,对于内存的占用可以差别轻易超过1000倍,对于一些条件可以强制让用户必须等)。
5. 其他的辅助手段。比如另建汇总表的表。
以上优化的重要性,按照1、2、3、4、5的次序来。
|
|