APP下载

浅析SAP系统的性能优化

2017-04-05刘皓

石油化工自动化 2017年3期
关键词:进程语句内存

刘皓

(中国石化销售有限公司 天津石油分公司,天津 300100)

浅析SAP系统的性能优化

刘皓

(中国石化销售有限公司 天津石油分公司,天津 300100)

企业资源计划软件SAP系统虽然可大幅提高工作效率,但随着系统长期运行,数据量增加,SAP系统性能将呈下降态势。通过优化语句的编写,可减少I/O操作、内存占用和CPU的负载应用;根据客户当前应用的服务器数量,对SAP系统进程参数、数据库参数进行调整,实现工作进程数量的优化。提出了加强日常监控,排除隐患的措施以及改善硬件网络环境等合理化建议。

企业资源计划 优化 数据库 参数

企业资源计划(ERP)宗旨是将企业的物料、设备、资金、人力、信息等资源通过信息系统进行科学合理的组织、管理和控制,以求收益、效率最佳化。企业管理解决方案(SAP)作为世界领先的ERP软件在各行业得到广泛应用,实现了物流、资金流、信息流的“三流合一”,同时随着多个系统与SAP系统的集成,又大幅提高了数据采集速度和准确度,为经营决策赢得了时间,提高了效率。但随着系统的长期运行,数据量的不断增加以及系统设备运行带来的老化问题,使该系统性能呈下降态势。系统反应慢将影响销售开单、生产运营和报表出具等正常的业务开展,如果情况进一步恶化,系统会出现超时、延时严重甚至停止服务的问题。

增加或者更换高配置设备往往是解决该系统性能问题行之有效的方法,但是该方法不但成本高,而且造成系统资源的大量浪费。因此,提高系统资源使用率成为了经济高效的系统优化方案。

笔者从事多年SAP系统开发及系统管理工作,摸索和积累了一些提高系统资源使用率的经验和方法。从实际工作出发,从以下4个方面对系统进行优化。

1 程序和数据库索引优化

1.1 程序优化

在SAP系统上线后的一段时间内,由于系统数据量较小,ABAP程序的运行效率问题容易被忽视。但随着数据量的不断增大,如果取数方法不得当,将严重影响程序的运行效率。优化ABAP程序主要是优化数据取数的方法,可以减少I/O操作、内存占用和CPU的负载。以下推荐几种做法:

1) 可以使用视图来代替基本表的查询以提高查询效率。如果一定要使用基本表查询,要尽可能多地使用表的索引作为“Where”分句的条件选项,尽可能让程序只读取一定范围内的记录。比如,在条件选择界面,限定时间、公司代码、工厂、成本中心等条件,减少被选择的数据量;并且还可以使用二分法查询,提高查询内表数据速度,但注意要在使用之前应对内表进行排序。

2) 通过以下示例说明语句优化。

a) 使用“select... for all entries”的语句,不使用“loop... select single... endloop”的语句。前一种方式为数据—内表,后一种方式为数据—工作区—内表,很明显前一种方式减少了一个过程,效率得到提高。

b) 尽量使用“loop... where... endloop.”语句,不使用“loop... if... endif. endloop.”语句,可有效减少循环数据的数量,降低程序运行时间。

c) 尽量使用“select a b c into table itab”这样的语句。这个操作会将所有符合条件的数据一次性地读进内表,这比在“select a b c into itab... endselect”的循环中添加数据到内表要快很多,同时比使用“select *into corresponding fields of table itab”这种字段自动匹配的查询方法节省更多的时间和内存空间。

3) 在1条“select”语句中尽量减少多个数据表关联取数。虽然1条“select”语句中多个数据表关联取数看起来简洁,但是会造成系统索引使用上的混乱,使应用效果适得其反;特别是对选择条件多,但是这些条件数据都不完整的情况下,效率低的问题尤为明显。从实际工作中的效果看,“inner join”的数据表关联最好不要超过3个。对于一定要应用多表关联的情况,可以将数据量不是过于庞大的数据表根据选择条件放入内表中,使用“for all entries”的方式进行关联,虽然会消耗一部分系统内存,但在一定程度上会提高系统索引的使用率。

4) 可以使用批量修改方式修改内表数据,尽量不使用逐行修改方式。同时1个内表的数据要写入另1个内表时,也应使用批量增加方式,尽量不使用逐行增加方式。

5) 可以使用“sort”对数据排序而不使用“order by”。“order by”命令是在数据库服务器上执行的,而“sort”语句是在应用服务器上执行的。同时可以使用一些聚合函数、“group by... having”,来进行计算和分组统计,也可以改善查询的效率。在程序中应尽量使用诸如“SUM(SQL语句)”或者“COLLECT(ABAP语句)”,此举可以有效地降低CPU的负载。

1.2 数据库的索引优化

一般而言,若服务器配置较高,存储速度较快,一般较小的表不必创建索引,另外对一些非业务应用或查询很少的业务大表也不必创建索引。并不是创建越多的索引系统速度越快,反而创建较多索引会给数据库的性能造成负面的影响,一般建议每个数据表的索引数量不超过7个。创建索引时应该注意以下几个方面的内容:

1) 索引的字段应在程序的SQL语句的“Where”子句中出现,且尽可能多地出现在不同程序中,以便该索引能被多个程序复用。

2) 字段要有较多的区别值,即该字段在表中存在多种不同的值,不宜超过10种。而且字段要有较好的数据分布,即表记录中该字段在不同值的分布比较均匀,不应在某值下密集分布,分布比例最好不超过30%。

3) 将具备较好的区别值和数据分布情况的字段放在组合索引的前列,做到索引字段顺序按区别值和数据分布质量的优劣顺序从前向后排列。

4) 通过控制索引字段数量以控制索引的二元高度。

需要注意的是,创建索引时会导致系统锁表,即不能在创建索引的同时进行和表相关的业务操作,因而应该选择业务不繁忙的时候进行索引创建,并对大的索引创建应充分预估所需时间;同时新建的索引如果没有计算优化器统计信息,系统将不会使用该索引。因此,应在创建索引时使用“Compute statistics”选项进行索引的优化器统计信息计算,或在索引创建完成后另外计算索引的优化器统计信息。

2 SAP系统参数及设置优化

2.1 SAP系统内存参数调整

关注SAP系统的内存使用情况,对于Nametab(NTAB),Program,Export/Import,Tables等内存缓冲区的Swaps值,如果存在每天增长量超过1万次的情况应该关注,Swaps值特别异常时可根据情况修改相关参数后重启SAP以改善Swaps值。建议每次调整值为原值的10%,逐步跟进调整。

SAP扩展内存是SAP内存管理系统的核心,em/initial_size_MB和em/max_size_MB决定了扩展内存的初始值大小和最大值;em/blocksize_KB决定了扩展内存的单位,开辟的扩展内存最大是8 192个该单位。64位操作系统建议1个单位为4 096 KB,表示最大能使用的扩展内存为32 GB,超过配额将使用Swaps开销;em/address_space_MB为每个用户进程的上下文所能使用的最大扩展内存,默认的缺省值为4 GB;em/global_area_MB除AIX和Windows系统外应该为255;ztta/rol_extension表示每个用户使用的扩展内存,建议最大配额为2 GB。

这里特别指出,由于用户使用SAP内存时,首先由进程开辟Roll area,通过共享内存的Roll Buffer进行Roll in和Roll out,当Roll Buffer超出配额时,将会请求操作系统的Roll file来开销;故Roll memory初始分配不能分配过大,建议分配仅1Byte,如果配额不够,由ztta/roll_area决定Roll area的大小。

2.2 SAP系统进程参数调整

SAP系统进程的类型有: 对话进程、后台进程、打印进程、更新进程、队列进程。

1) 可根据客户当前的应用服务器的数量,进行工作进程数量的调优。

2) 在满足现有业务需求的条件下,在服务器硬件资源没有更新、升级的情况下,工作进程的总数要控制在最小值,此举将节约现有的硬件资源。

3) 根据业务运行的具体情况动态分配进程数量。例如在白天由于线上操作较多,可将对话进程数量加大;而在晚间后台作业增多,可以减少对话进程数量增加后台作业数量。

2.3 加强日常监控排除隐患

1) 每天做好对话、打印、更新进程及后台作业的监控工作,对处于错误状态的对话、打印进程要及时重启进程,对出错的更新条目要与业务人员联系,不能完善处理的要即时删除,并及时处理“更新未激活”故障。

2) 每天做好ABAP DUMP和系统错误日志的检查工作,系统出错时会产生短转储,可通过系统的提示进入SAP的网站查看相应的Notes。在DUMP中可以精确定位错误,有助于解决问题。另外要对系统日志进行分析,对影响系统正常使用和功能实现的问题应找出原因并及时处理。

3) 每周进行SAP层面的系统性能监控,每月记录系统性能统计信息,并且利用Solution manager管理平台每周发布的Early watch报告对系统运行状况进行针对性地分析和调整。

4) 关注系统负载均衡,如某台应用服务器负载远大于另1台,原因可能是用户直接指定了高负载服务器登录致使资源紧张。使用组登录方式,同时使用事务代码SMLG设置应用服务器的可登录数量,使系统资源均得到充分应用。另外,对于分属不同应用模块的用户,可以设置某个应用服务器只能登录某个特定模块的用户,而其他模块的用户不允许登录到该服务器上的模式。因为不同的SAP应用模块对系统资源有不同的需求,这样做可根据需要动态地调节系统资源。

3 数据库优化

Oracle数据库具有处理速度快、安全级别高、数据存储量大等特点,在大部分企业中作为SAP系统的底层数据库使用。以下将主要针对主流的Oracle数据库的优化进行分析。

3.1 数据库参数调整

内存参数的设置,直接关系到数据库(DB)的性能;其他参数也会影响DB的正常运行。

内存参数主要调整共享池、缓冲区高速缓冲区、系统全局区(SGA)和程序全局区(PGA)。缓冲区高速缓存DB_CACHE_SIZE可设置为可用内存的40%~50%;db_block_buffers可设置为可用内存的40%~50%;共享池SHARED_POOL_SIZE可设置为可用内存的10%;PGA的PGA_AGGREGATE_TARGET可设置为可用内存的15%。

上述参数设置应根据系统运行的具体情况进行相应的调整。如数据缓冲区命中率低,可根据系统资源情况增加数据缓冲。如笔者曾遇到系统原数据库命中率89%,db_block_buffers参数为5×104,经过尝试将该参数调整为8×104,数据库命中率上升为95%,系统效率得到提升。

另外还应注意OPEN_CURSORS,OPTIMIZER_MODE等几个参数的设置。

3.2 调整Redo Log文件大小

发现数据日志切换频率过高,则应调整在线Redo log文件大小,减少文件切换次数;增加回滚段组数,降低出现“快照过旧”现象的概率。Oracle推荐每20 min生成1个Redo log文件。笔者曾遇到系统出现ORA-1555的报错日志,经过分析Redo log文件大小为20 MB,每小时生成23个文件,反应到应用上就是系统反应慢,运行效率低。笔者调整了Redo log文件大小,有效地降低了系统响应时间。

3.3 表和索引存储质量的维护

1) 每周应至少执行1次SAP的自动数据库表的统计信息更新,每3个月全部自动分析1次。

2) 确保表空间利用率在90%以下,对超过300 GB的表空间要确保表空间有超过20 GB的空闲空间。

3) 原则上数据库每个表都要有索引;如发现丢失的和质量低于65%的索引应及时重建;对1 a以上未使用的索引应做删除处理;对碎片严重的索引要在线重建,保障访问量排行前20位数据表的索引存储质量在65%以上。这些表的统计信息至少半年要更新1次。

4) 对部分访问相当频繁,数据插入量很大的表,如允许删除,应及时重组该表以改善性能。

5) 调整DBA计划日历作业。建议每天执行对数据库的统计信息检查作业、更新作业和检查数据库作业,每周执行检查扩展空间作业和清除日志作业。

3.4 优化性能差的程序SQL语句

通过对等待事件的监控,如执行事务代码ST03或ST04,同时也可通过Early watch报告,可以很轻松地找到性能差的SQL语句和耗时的SQL语句。针对这些SQL语句进行优化,并创建有效率的索引,具体方法见对程序和数据库索引优化部分的相关介绍。

3.5 数据库硬盘的规划设计

对数据库硬盘的规划设计进行优化,使得工作负载在硬盘上尽可能地平均分配,以避免当从硬盘中写入和读取的时候产生等待的情况。

3.6 做好锁和队列的监控

检查是否有很长时间的锁定没有释放,如有这种锁条目应联系相应用户了解情况,但在做处理时需要谨慎,只有确认为非正常退出造成的,才能进行手工删除。

4 网络状况改善

1) 客户端/服务器架构中不同层之间的网络传输速度和数据吞吐量非常重要,它们会影响整个系统的性能表现,如果网络存在瓶颈,将导致客户操作缓慢。

2) 由于SAP架构要求绝大多数的数据交换都在应用层和数据库层进行,通过优化明显耗时、占资源的SQL语句可以减少这种交换。

3) 由于网络连接可以通过局域网或者广域网实现,因而在表示层和应用层之前的数据传输要尽可能少,同时尽可能减少与其他系统之间的接口,优化接口程序,进一步减少数据传输量。

5 结束语

SAP系统长时间地运行,设备的CPU、内存、硬盘等硬件设备不间断地工作,硬件老化情况将不可避免地发生。同时随着数据量的增加以及业务种类的不断增加,硬件资源不足导致瓶颈出现,造成系统性能降低。所以必须时刻关注硬件设备运行状况,了解系统负载的极限值,并针对需求添加硬件配件,另外还要及时对超期服役的设备进行更换,这样不但可以有效降低硬件瓶颈,同时还可以规避设备老化带来的故障隐患,保障系统安全运行。

[1] 托马斯·施奈德.SAP性能优化指南[M].勾侃,译.北京: 东方出版社,2006.

[2] 希格里德·哈格曼,蓝·威尔.SAP R/3系统管理[M].黄兆森,译.北京: 东方出版社,2006.

[3] 黄佳.SAP业务数据传输指南——图灵SAP技术丛书[M].北京: 人民邮电出版社,2006.

[4] 黄骁俭,周越亭,尹捷.中小企业信息化与SAP系统实现/SAP管理实践丛书[M].北京: 机械工业出版社,2004.

[5] 金圣俊.SAP ABAP开发从入门到精通[M].张钟淑,译.北京: 机械工业出版社,2013.

[6] 唐嘉,彭功涛,方玉凤.SAP实用程序开发进阶[M].北京: 北京希望电子出版社,2012.

[7] 黄佳.SAP程序设计[M].北京: 人民邮电出版社,2005.

[8] 王宏.实战SAP程序开发——从实例学SAP ABAP编程[M].北京: 电子工业出版社,2006.

[9] 黄佳.SAP高级应用开发[M].北京: 人民邮电出版社,2008.

刘皓(1983—),男,天津人,2006年毕业于天津科技大学信息与计算科学专业,获学士学位,现就职于中国石化销售有限公司天津石油分公司,主要从事操作系统、数据库、SAP系统及虚拟化平台管理,任工程师。

TP273

B

1007-7324(2017)03-0080-04

稿件收到日期: 2017-01-14,修改稿收到日期: 2017-04-08。

猜你喜欢

进程语句内存
重点:语句衔接
债券市场对外开放的进程与展望
“春夏秋冬”的内存
改革开放进程中的国际收支统计
内存搭配DDR4、DDR3L还是DDR3?
如何搞定语句衔接题
社会进程中的新闻学探寻
基于内存的地理信息访问技术
俄罗斯现代化进程的阻碍
作文语句实录