语言
<< 返回文章列表

GaussDB T 现网性能问题案例(性能调优大全)

2020年3月13日
华为
259


墨天轮原文链接:https://www.modb.pro/db/22516


案例1:upper(name)导致name索引不生效

select 1 from sysobjects where upper(name) = upper('sp_ClearBtsDataForTP_A4')

每次0.7秒,15分钟执行了20次,去掉upper后,执行时间为0.02秒。

select 1 from sysobjects where name = upper('sp_ClearBtsDataForTP_A4');```

案例2:创建高效的索引

– 待优化SQL

SELECT o.CMENEID, o.Type, o.PhyNEID, o.FDN, o.Name, o.Version, o.DspVersion, o.NeVersion,
o.NeFamilyVersion, o.CompVersion, o.ItfVersion, o.TypeDspName, o.OMIP, o.OMIP2, o.DBArea,
o.Classify, o.SynchStatus, o.LastSyncTime, o.Status, o.SiteTransType, o.SiteId, o.SiteType,
o.MBTSName, o.MBTSDID FROM Sys_NEInfo_Site o WHERE (o.PlanID = 0) AND (o.FDN =
'LTE_shenzhen_04404');

– 优化方案
业务在planid和fdn字段上增加组合索引,提高索引效率。

create index IDX_1_SYS_NEINFO_SITE on Sys_NEInfo_Site(PLANID,FDN);

– 优化分析
待优化的sql where条件在PlanID和FDN字段上 Sys_NEInfo_Site表存在两个索引:

▪ 主键索引:PLANID, CMENEID;
▪ 组合索引:PLANID, PHYNEID。

执行计划会走主键唯一索引扫描_PK_SYS_2_712。说明:PLANID的区分度非常低。
image.png

案例3:interval分区方案解决业务大痛点

无线OSS业务经常需要创建和删除Plan区,每个Plan区有8G左右,用户会经常操作Plan区数据,不同Plan区数据基本不需要关联访问。每个Plan区对应几万张表,这些表的数据占整个DB的80%以上。

– 痛点1:随着Plan区增加,查询和插入效率会逐渐下降。由于Plan区数据是混在一起的,当Plan区数据不断增加后,查询某个Plan区的性能必然逐渐下降,无论是索引扫描还是全表扫描都没有只有一个Plan区效果好。由于性能下降过大,业务在原来的方案中,不得不采用一个DBserver上部署多个SybaseDB的方案;在操作某个Plan区数据时,经常先把要查询的数据放到临时表中,然后再做后面的操作,增加了业务的复杂度。

– 痛点2:Plan区的删除非常慢,在大数据量下无法完成操作。
老方案中,删除Plan区只能采用delete,而要delete掉8G的数据非常慢,最快也要10分钟,在大数据量和业务高峰期,这个操作就会非常慢。平时测试时也需要频繁的创建和删除Plan区,效率非常低。并且delete方式不会立刻回收空间,使用Oracle时还要做Shrink操作才能真正回收空间,而Shrink操作是非常耗时的。

对无线CME业务做如下改造:

– 对所有带planid的表按照planid分区,每个分区只存放一个plan区数据。
– 采用interval分区,insert数据时如果分区不存在数据库会自动创建分区。
– 删除plan区使用drop分区的方式,可以实时清理数据,同时立即回收空间。
– 由于每个分区只有一个plan区数据,并且索引是local索引,所有索引中的planid列都是无意义的,可以去掉,节省磁盘占用。

收益:
– 提升查询效率
– 提升删除效率,空间立即回收
– 提升insert效率,创建P区效率会大幅提升
– 减少索引字段,减少磁盘占用,提升索引效率

案例4:去掉不完整的提示

GaussDB T一旦加了hint,优化器就是RBO,所以如果hint没有加全,可能导致执
行计划错误。

在mAOS发现多个这类问题,去掉提示后使用CBO优化器,SQL性能大幅提升。

如果多表连接,不要只指定use_hash,而不指定连接顺序和访问路径,还有注意不要使用错误的提示写法,例如:leading(a b c)。

案例5:统计不对导致性能问题

在无线CME和mAOS出现多例统计信息不对导致的SQL性能问题,包括:

– 临时表数据变化很快,统计信息没有及时更新。
– 统计信息收集太慢或者统计信息任务出现问题导致表没有收集。
– 统计信息任务并发收集,IO开销很大,对业务影响较大。


相关阅读:

1. GaussDB T 性能调优——硬件环境
https://www.modb.pro/db/22263


2. GaussDB T 性能调优——SQL问题分析之常见问题和案例分析
https://www.modb.pro/db/22261


3. GaussDB T 性能调优——SQL问题分析之CBO trace 日志 
https://www.modb.pro/db/22258