天天看点

记某XXB系统一次性能优化

虽然干了很多SQl优化。 也写博客记录了很多, 但是貌似没有记录过系统整体优化的, 这次简单记录下吧。

XXB系统作为核心的应用系统,具有涉及业务领域多,并发访问量大,累计数据量大等特点。而且随着市场的变化,尤其是在大数据环境下,数据增量明显提高。而用户对性能的要求也进一步提高,给系统性能优化带来新的挑战。

分析

在业务人员的大力度支持下,全面了解系统的业务特点,性能瓶颈。发现业务高峰期CPU负载压力过高,一般业务高峰期50%左右,在“结算”“稽查”等业务合算过程中,CPU使用率超过 90%。也通过调查发现IO的吞吐量不高,才6M/S. IOPS也很小。进一步确定到系统压力在逻辑读上面。比如我们选取某一典型时间段CPU使用率以及逻辑读数据曲线图 .

记某XXB系统一次性能优化

业务高峰期AWR报告

记某XXB系统一次性能优化

TOP等待事件中“db file sequential read”最高, 该等待事件一般是和索引扫描(除了index fase full sacn),和索引回表造成的。 这种现象表示需要优化TOP SQL。

TOPSQl分析:(这里只列出典型的三个)

SQL 执行频率 执行成本
5b3a7przhx4sc 5万次/半小时 2万逻辑读/次
55495fd93c886 4.4万次/半小时 2.8万逻辑读/次
d0sd7kxr6ga47 8千次/半小时 4.7万逻辑读/次

对象分析:

和业务组大力度的交流中发现有些索引碎片非常严重,如下

索引 索引字段 索引体积 碎片程度
IDX_STU_O_ID STUD_ORDER_ID 964M 大约90%的碎片
INX_EXT_V_PARAM_ID PARAM_ID 1376M 大约90%的碎片
PK_ZMKM_ORDER_EXT_VAL EXT_VAL_ID 2744M 大约90%的碎片
INX_EXT_VAL EXT_VAL 68M 大约60%的碎片

实施

分别整理系统分析文档,以及优化建议文档,和业务组展开深入讨论交流后决定实施优化。需要在业务低谷时间实施优化,实施过程中需要保障系统稳定的同时也要保证优化的平滑进行。

优化后:

业务高峰期整体表现:

记某XXB系统一次性能优化
记某XXB系统一次性能优化
优化前 优化后
CPU使用率 50%左右,偶尔90%+ 12%左右,偶尔20%+
逻辑读 150万逻辑读/S,偶尔250万逻辑读/S 50万逻辑读/S,偶尔70+万逻辑读/S
索引 索引字段 索引体积 重建后体积
IDX_STU_O_ID STUD_ORDER_ID 964M 20M
INX_EXT_V_PARAM_ID PARAM_ID 1376M 104M
PK_ZMKM_ORDER_EXT_VAL EXT_VAL_ID 2744M 168M
INX_EXT_VAL EXT_VAL 68M 8M

TOPSQl分析:

SQL 执行频率 优化前 优化后
5b3a7przhx4sc 5万次/半小时 2万逻辑读/次   3千逻辑读/次,性能提升6倍
55495fd93c886 4.4万次/半小时 2.8万逻辑读/次 7千逻辑读/次,性能提升3倍
d0sd7kxr6ga47 8千次/半小时 4.7万逻辑读/次  3200逻辑读/次,性能提升10倍