zoukankan      html  css  js  c++  java
  • 性能测试 | 记一次生产数据库sql由451s优化为0.4s的过程

    概述

    最近开发说某个接口跑的很慢,排查了下发现其中一条sql,数据量不大,但居然要跑451s,下面简单记录一下优化的过程。


    问题sql

    SELECT l.location_gid ENUMVALUE, l.location_name DISPVALUE
    FROM servprov s, location l
    WHERE s.domain_name = 'FSL2'
    AND s.servprov_gid = l.location_gid
    AND EXISTS (SELECT 1
    FROM fsl2_fee_split f
    WHERE f.servprov_gid = l.location_gid
    AND start_time > SYSDATE - 60)
    ORDER BY 1 DESC, 2
    记一次生产数据库sql由451s优化为0.4s的过程


    1、数据量

    可以看到只是其中一张表上百万数据,但也不是很大,然后还有两张小表。

    记一次生产数据库sql由451s优化为0.4s的过程


    2、索引情况

    观察大表的索引情况,发现用到了其中一个索引。

    记一次生产数据库sql由451s优化为0.4s的过程


    3、查看执行计划

    用F5看这执行计划没多大问题,也是小表去驱动大表。

    记一次生产数据库sql由451s优化为0.4s的过程


    4、去掉时间

    把这条sql去掉时间的条件发现只需要0.29s。

    记一次生产数据库sql由451s优化为0.4s的过程


    5、建立索引

    考虑去掉之前的索引,建联合索引

    create index IND_FEE_SERVPROV_GID2 on FSL2_FEE_SPLIT(SERVPROV_GID,start_time)
    tablespace INDX
    pctfree 10
    initrans 2
    maxtrans 255
    storage
    (
    initial 1M
    next 1M
    minextents 1
    maxextents unlimited
    pctincrease 0
    );
    drop index IND_FEE_SERVPROV_GID;
    记一次生产数据库sql由451s优化为0.4s的过程


    6、测试验证

    从451s到0.4s,结果正确,满足需求,先这样了。

    记一次生产数据库sql由451s优化为0.4s的过程

    执行计划保持不变。

    记一次生产数据库sql由451s优化为0.4s的过程


    后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

    记一次生产数据库sql由451s优化为0.4s的过程

  • 相关阅读:
    2018.11.21 struts2获得servletAPI方式及如何获得参数
    2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析
    2018.11.19 Struts2中Action类的书写方式
    2018.11.18 Sturts2配置详解&常量配置进阶
    2018.11.17 Struts2框架入门
    需求分析
    可行性研究
    防火墙
    homework1
    静态网页开发技术
  • 原文地址:https://www.cnblogs.com/wyf0518/p/11451011.html
Copyright © 2011-2022 走看看