问题表现:
用户反馈系统打开待办列表、流程发送最近几天都变慢了;某些功能设置保存会很慢或点击没反应。
进入运维平台发现主节点数据库连接池异常高150---200;其他节点不会那么高。
定位问题:
所有数据库节点执行查询:
select * from V$SESSIONS where state='ACTIVE'
长SQL获取:
SELECT SF_GET_SESSION_SQL (SESS_ID) FROM V$SESSIONS WHERE SQL_TEXT LIKE '%148%';
为优化统一待办推送到第三方系统,建模做的数据池;
每次往建模表里存入数据都会校验权限,所以产生了大量的权限查询sql;
初步处理:禁用统一待办推送接口。
备注:期间还做了其他尝试:重启服务、停用计划任务、计划任务频率改大等
对比测试:
1.复制其中一条语句:
select sourceId from modeDataShare_147_set where sourceId = 145436 and rightid = 522 and sharetype in(80, 90, 81, 84, 85, 1000, 1, 2, 3, 4, 5, 6, 7)
2.主节点执行测试:1.47s;
3.备节点执行测试:初次执行247s,第二次执行4s,之后执行1—5s;
4.修改语句where条件执行测试:sourceId = 145436 and rightid = 522 同时出现 1—3s,只添加一个条件 0.2—0.4s;
5.第二天复测247s未能复现(禁用了接口);
6.根据达梦工程师指引拼接条件测试:查询用时0.16s
优化处理:
方案:创建联合索引;
语法:create index 索引名 on 表名(sourceid,rightid);
命名:idx_表名_联合索引名字
创建:CREATE INDEX IDX_MODEDS_SOURCEIDRIGHTID ON MODEDATASHARE_147_SET(SOURCEID,RIGHTID)
备注:创建前建议咨询总部DBA命名规则/建议,避免冲突或不合理。
处理效果:
优化前:1.5s左右;
优化后:0.03s左右;
执行快了50倍;
重新开启待办推送,观察数据库连接池,基本为个位数;