Keywords:Mysql,性能优化,slow query,连接占满,Qone

前一段有客户反馈Qone系统的性能问题,并发用户不多,也就是20个左右,但是Qone服务器就down掉了,连登陆页面都无法访问。

按理说20多个用户不至于性能差到如此地步,我有幸负责查找这次的性能问题原因,希望可以找到真正的原因。

通过查找大量资料,包括tomcat调优、mysql调优、jvm监控等方式,最终发现,最大的性能瓶颈在数据库访问效率上。

先看下调优之前的情况:

测试环境为:60用户并发访问Qone,Qone程序最大开启150连接,初始连接80,mysql数据库最大开启240连接,数据库使用Qone的默认数据库,没有进行任何优化。
从下图可以看出,数据库的大部分连接被长时间占用,并且处于sending data状态,从图上看有的连接已经占用了48秒,并且还在继续被占用,迟迟无法释放。

优化前的数据库性能

经过一段时间,被占用的连接无法释放,程序申请新的连接,数据库连接数很快上升到117个。

最终由于所有连接都无法释放,数据库性能急剧下降,Qone程序配置的150个连接都被占满(图中157个连接,有7个为通过非Qone方式访问数据库的连接),Qone程序已经无法通过浏览器访问,首页无法打开,数据库已经基本无法访问。

下面是loadrunner的截图,从结果看,执行基本全部失败,成功的只有62次,平均响应时间tasklist15.287s(由于后期都是失败,这个数据只统计成功的平均值,需要综合看),taskreport100.216s。


 未优化前性能情况

对于程序快速占满数据库连接的情况,是很严重的异常,通过分析和大量实验,最终确定是由于单个连接占用时间过长导致数据库性能急剧下降。

调优后的情况:

基于以上结果,从降低单个连接的占用时间入手。Qone的数据库访问,在程序上修改起来比较麻烦,因此我们只关注slow query,通过对数据库增加索引的方式来提升slow query的效率。如何开启mysql的slowq query log自己搜索一下吧。

如何优化slow query的文章很多,这里主要是使用mysql自带的explain对sql语句进行分析,然后通过在相应字段上增加索引以提升查询性能。

下面通过检测Mysql数据库的slow query,仅在loadrunner测试用例执行的sql语句涉及的表上进行优化,在bsemployee表的userlogin_id列上加了normal索引,在taskDayReport表的userId,taskId,submitDate均增加normal索引。
调优之后,同样的数据量,60的并发用户访问Qone程序,数据库连接,qone程序连接设置与调优前一样,通过浏览器访问Qone程序,可以打开各页面,响应速度基本可以接受,后台连接占用时间较短,且很多连接还处于sleep未占用状态。


 调优之后的连接占用情况

从截图可用看出,大部分连接执行时间基本都在0s,部分连接执行2s,大部分连接还处于sleep可用状态,数据库连接池中的初始连接还未被占满。
从loadrunner执行结果看,60的用户全部登陆成功,所有请求全部成功执行,失败请求为0。Tasklist平均响应时间24.265s,taskreport平均响应时间10.156。

从测试结果看,这次调优基本上已经可以达到目的,用户后来也反馈没有再出现此性能问题,但Qone性能调优还有很多事情要做,如程序中数据库操作的sql或hql语句优化,数据库结构及索引优化等。

总结:从测试情况看,降低每一个数据库连接的占用时间是关键。否则就算并发量很小,但连接被占用时间很长,也会使数据库性能急剧下降。

【原】Qone Mysql性能优化-实战篇相关推荐

  1. MySQL 性能优化实战

    鉴于公司项目及业务发展,技术人员从几人到如今几十人,后端团队技术人员日益剧增,可是随着项目人员的增长,大多研发人员及相关人员经常需要到测试环境使用 MySQL 数据库,比如移动端.测试.产品,然而他们 ...

  2. MySQL性能优化实战

    一.MySQL优化原则: where子句哪些操作将导致MySQL引擎放弃索引而进行全表扫描? 对字段进行where num is null判断.[给num设置默认值0] 使用!=或<>. ...

  3. 一次MySQL性能优化实战(转)

    首先是由于公司秉承快速开发原则,频繁上线,导致每次忽视了性能问题!日积月累,所以导致系统越来越慢,所以如果你的系统查询语句本来就优化的很好了可能参考意义不大! 提取慢查询日志文件,应该在你的DataD ...

  4. mysql isam cache_Mysql性能优化基础篇

    mysql性能优化练习相关优化选项 启用慢查询日志 查看各种系统变量.状态变量 一.性能优化 1.查看服务运行的参数mysql> show variables\G; mysql> show ...

  5. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  6. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID:Ubuntu D ...

  7. 开发人员MySQL调优-实战篇2-让SQL使用索引详解

    2019独角兽企业重金招聘Python工程师标准>>> 建议先看看开发人员MySQL调优-实战篇0 让执行的SQL使用索引 虽然DBA给我们建了很多索引,但没有经验的开发人员往往只看 ...

  8. MySQL高性能优化实战总结!

    1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多 ...

  9. Android主线程耗时动画卡顿,Android性能优化实战之界面卡顿

    原标题:Android性能优化实战之界面卡顿 作者:红橙Darren https://www.jianshu.com/p/18bb507d6e62 今天是个奇怪的日子,有三位同学找我,都是关于界面卡顿 ...

最新文章

  1. 依图科技CEO朱珑:“智能密度”对AI发展意味着什么?
  2. 49.什么是拼接技术?
  3. 11.3 人工合成数据-机器学习笔记-斯坦福吴恩达教授
  4. [一维粒子模拟 version3.6]renormalization
  5. (转载)Qt中使用cout输出的方法
  6. Hemberg-lab单细胞转录组数据分析(六)
  7. 第四讲 数学公理化方法(上)
  8. java jni librtmp_编译Android平台libRTMP库
  9. 海报设计素材|中国风的插画设计,国画浓抹中国色彩
  10. TensorFlow神经网络(四)手写数字识别
  11. 网页中JS实现(调用)打印预览功能
  12. 中国冷凝管行业市场供需与战略研究报告
  13. QToolBox学习笔记
  14. android dagger2 单例,Dagger2进阶-单例
  15. 计算机软件退税公式,软件产品增值税即征即退税额的计算方法 会计看过来!...
  16. 计算机无法添加本地策略组,解决win10找不到本地组策略和本地用户的方法
  17. 产品读书.心理学《梦的解析》
  18. ES6 对象的解构赋值
  19. x64dbg修改后保存到exe
  20. [Android]之一:Android系统下载管理DownloadManager

热门文章

  1. 又想起《光阴的故事》
  2. 当可达鸭女孩拍毕业照:别让熬夜肝论文的黑眼圈留在青春的痕迹里(附毕业照拍摄攻略)
  3. 技术管理的核心内容 — 提高团队技能
  4. 医院临床护士站、医生站流程图(检验相关)
  5. Java并发编程书籍推荐,丹丹学妹哭着对我说:学长(1)
  6. Flutter Json对象和数组解析成实体类
  7. 【工业互联网】产业互联网
  8. qs排名中国大学计算机,【2019大学排名】国内高校在QS学科排名前50中的表现
  9. 金融机构移动办公安全管控难?要如何解决?
  10. 自监督对比学习系列论文(二):有引导对比学习--SCCL,SwAV,PCL,SupervisedCon