1.项目简介..........................................................................................................................................22.应用系统的优化..............................................................................................................................32.1.优化概述................................................................................................................................................................32.2.优化方案................................................................................................................................................................32.2.1.未使用已有索引............................................................................................................................................32.2.2.缺少必要索引..............................................................................................................................................212.2.3.其它..............................................................................................................................................................362.2.4.临时表优化..................................................................................................................................................492.3.应用系统架构设计..............................................................................................................................................492.3.1.业务拆分......................................................................................................................................................502.3.2.历史数据下线..............................................................................................................................................513.其它建议........................................................................................................................................513.1.数据库实例性能数据采集作业..........................................................................................................................5121.项目简介陕西公司营销业务系统随着业务量与数据量的增大,系统压力越来越大,系统可靠性与高效性降低,影响了对业务支持的质量。为此,南瑞公司和陕西公司及该软件的开发公司东软公司一起合作,对营销业务系统通过先进、标准、可控的技术、工具和方法,监控系统的运行状况,评估系统现状,定位系统运行瓶颈,制定具体的优化实施及操作方案,并对优化实施结果进行评估。实现优化系统性能、提升系统运行质量、挖掘系统潜力、创建系统建设良性循环模式的目的,并有助于提高维护人员的技术水平。本项目分为四个阶段:第一阶段为优化小组在西安市对陕西公司营销业务系统进行现场调研和性能分析,形成性能分析报告,并提出初步优化建议。第二阶段,优化小组和开发厂家在国网公司相关部门的领导下,在西安市是成立联合测试小组,对主要问题的优化方案进行验证。第三阶段,优化小组在西安市实施现场优化实施工作,并在实施完成后进行性能评估。第四阶段,开发厂商完成应用优化的代码调整工作,发布新的版本。32.应用系统的优化由于本次优化工作中发现的应用优化问题,部分可以通过调整索引的方式得到解决,而部分必须由开发厂商修改应用代码。因此本方案对目前发现的一些主要的应用问题进行了分析,并给出了解决方案。在优化实施过程中,部分修改代码的工作需要开发厂商东软公司完成。2.1.优化概述应用程序的优化调整贯穿整个调优项目的始终,本章就部分重点应用的调整进行总结,SQL语句的优化对于提高系统性能十分重要。高开销的SQL占用了大量的系统资源,对这些SQL进行优化,可以有效的提高系统的性能。需要进行调整的SQL语句主要可以分为以下几类:缺乏合适索引的SQL:规范索引设计,添加或调整索引,避免对大表的全表扫描。语法明显不合理的SQL:主要是随意地在字段上增加了转换函数,如TRIM和UPPER等,造成了全表扫描。还有就是在取单条记录时,习惯性地使用MAX等分组函数,而不是使用更高效的rownum=1。这些可以通过改写SQL调整。执行计划不稳定的SQL:找到最佳执行计划,调整表联接顺序或通过HINT固定执行计划。使用更有效的物理结构,比如有些大表如果采用分区表效果可能更好。其它,比如有些SQL语句或存储过程改写后效率可能更好。具体内容见下节。2.2.优化方案2.2.1.未使用已有索引1.Sql-1所属函数或存储过程名称:4编号:XA_20131024_00001模块名称:电费收缴及营销账务问题描述:1.存在问题的SQLSELECT/*+FIRST_ROWS*/*FROM(SELECTt.*,ROWNUMASRN2FROM(SELECTa_pay_flow.CHARGE_IDASCHARGE_ID,a_pay_flow.ORG_NOASORG_NO,a_pay_flow.TYPE_CODEASTYPE_CODE,a_pay_flow.RCV_AMTASRCV_AMT,a_pay_flow.THIS_CHGASTHIS_CHG,a_pay_flow.LAST_CHGASLAST_CHG,a_pay_flow.CHARGE_EMP_NOASCHARGE_EMP_NO,a_pay_flow.PAY_MODEASPAY_MODE,a_pay_flow.SETTLE_MODEASSETTLE_MODE,a_pay_flow.SETTLE_NOTE_NOASSETTLE_NOTE_NO,a_pay_flow.SETTLE_BANK_CODEASSETTLE_BANK_CODE,a_pay_flow.ACCT_NOASACCT_NO,a_pay_flow.ACCT_NAMEASACCT_NAME,(SELECTREAL_NAMEFROMsa_userWHEREsa_user.USER_ID=a_pay_flow.CHARGE_EMP_NOANDrownum=1)ASREAL_NAME,a_cashchk_flow.CASHCHK_NOASCASHCHK_NO,a_pay_flow.CHARGE_DATEASCHARGE_DATE,a_cashchk_flow.ACCT_STATUS_CODEASACCT_STATUS_CODE,a_cashchk_flow.ARRIVE_DATEASARRIVE_DATE,a_pay_flow.CHARGE_REMARKASCHARGE_REMARK,a_pay_flow.CONS_NOASCONS_NO,(SELECTORG_NAMEFROMsa_orgWHEREsa_org.org_no=a_pay_flow.org_noANDrownum=1)ASCONS_ORG_NAME,a_cashchk_flow.DISPOSE_DATEASDISPOSE_DATEFROMa_pay_flow,a_cashchk_flowWHERE(((((a_cashchk_flow.CASHCHK_ID=a_pay_flow.CASHCHK_ID)AND(a_pay_flow.CHARGE_DATE=:1ANDa_pay_flow.CHARGE_DATE=:2))AND(A_PAY_FLOW.ORG_NOLIKE:3ANDa_cashchk_flow.org_noLIKE:4))AND(A_PAY_FLOW.RCV_ORG_NOLIKE:5))AND(A_PAY_FLOW.PART_CHG_YM=:6))5AND(A_PAY_FLOW.PART_CHG_YM=:7)ORDERBYa_pay_flow.CHARGE_DATEDESC,a_pay_flow.TYPE_CODEASC,a_pay_flow.RCV_AMTASC)tWHEREROWNUM=:8)WHERERN2:9(生产环境真实执行计划)2.导致效率低下的原因:索引EPM_SN.AC_PAYINTO_AC_FLOW_FK的优化程序统计信息已失效。从执行计划可以看到a_pay_flow.charge_date字段进行了隐式类型转换从而导致该字段上的索引无法使用,隐式类型转换会导致过多cpu的消耗,我们从执行计划的id=15可以看到cpu的消耗是420k建议方案:考虑收集此索引的优化程序统计信息。executedbms_stats.gather_index_stats(ownname='EPM_SN',indname='AC_PAYINTO_AC_FLOW_FK',estimate_percent=DBMS_STATS.AUTO_SAMPLE_SIZE);修改程序,把传入变量的类型修改成与字段类型一致,避免隐式的数据类型转换,避免消耗大量cpu资源原执行效果:从原执行计划看到此sqlCBO估算的cpu的消耗为420K,每次执行逻辑读:130905,每次执行时间:22s测试效果:6(生产环境真实执行计划)对该sql的变量传入相应的数据类型的值之后,再执行查看其执行计划,看到CBO估算的cpu的消耗降低到了4,每次执行时间:2.95s。由此可看cpu和执行时间都大大缩短测试日期:2013年10月24生产库实际效果:每次执行时间:2.95s生产库确认日期:2013年10月242