作家
登录

简单SQL也很慢?数据库端到端性能问题的解决思路探讨

作者: 来源: 2017-08-23 10:01:41 阅读 我要评论

经由过程以上“背书”,我们大年夜概懂得了一个SQL请求的履行过程,那到底慢在哪个阶段呢?

经由过程“慢SQL特点”的第4条知道,“数据库的slow log琅绫腔有记录这类SQL”,那慢SQL产生的阶段就可以清除了。

MySQL slow log是记录SQL履行过程花费的时光,记录的时光大年夜“SQL解析”到“存储引擎”返回数据全部过程,所以可以清除该SQL是慢在第二层和第三层,那么只能是把时光花费在第一层了?和线程相干?

结不雅: 很可能慢在MySQL线程治理上。

没有惹人Thread-Pool前,MySQL应用的是one thread per connection,一旦connection增长到必定程度,MySQL的机能将急剧降低甚至被压跨。惹人Thread-Pool后将会解决上述问题,同时会削减MySQL内部的线程数(节俭内存)及频繁创建线程的开销(节俭CPU)。

思路3: 是创建线程慢?thread cache不敷用,须要频繁的创建线程?

办法:查看当时数据库的状况值

简单SQL也很慢?数据库端到端机能问题的解决思路商量

可以看到,当时余暇的thread很多,监控图也没有颤抖,所以并没有频繁地创建线程。 慢SQL产生的时光点,余暇的thread很多,并没有进行大年夜量的线程创建。

那问题到底涌如今和线程相干的哪个环节呢? 先把所有和thread相干的参数列出来。

  • thread_cache_size
  • thread_concurrency
  • thread_handling
  • thread_pool_high_prio_mode
  • thread_pool_high_prio_tickets
  • thread_pool_idle_timeout
  • thread_pool_max_threads
  • thread_pool_oversubscribe
  • thread_pool_size
  • thread_pool_stall_limit
  • thread_stack
  • thread_statistics

一眼看以前,大年夜部分是和Thread-Pool相干。同时意识到这些问题是跟着进级到MySQL 5.6产生的,5.6惹人了 Thread-Pool 功能。


结不雅: 看来MySQL5.6的 Thread-Pool 有很大年夜嫌疑了。

思路4: 封闭MySQL 5.6的 Thread-Pool ,确认一下问题

办法: 调剂MySQL参数 thread_handling = pool-of-threads---- → thread_handling = >简单SQL也很慢?数据库端到端机能问题的解决思路商量

慢SQL数量:3788

简单SQL也很慢?数据库端到端机能问题的解决思路商量

封闭 Thread-Pool 功能后(2016年9月13日当天数据)。

99line占比:已经看不到跨越100ms的sql了,都在10ms以内。

简单SQL也很慢?数据库端到端机能问题的解决思路商量

慢SQL数量:818

简单SQL也很慢?数据库端到端机能问题的解决思路商量

那么封闭 Thread-Pool ? 谜底很显然,不克不及! Thread-Pool 是MySQL5.6重要的功能,可以或许包管MySQL数据库高并发下的机能稳定。

办法:深刻懂得 Thread-Pool 的工作道理,查找可能产生慢SQL的参数。

结不雅: 找到了相干参数(thread_pool_stall_limit),并且效不雅明显,慢SQL数量大年夜最初的3788削减到63,几乎全部祛除掉落。

以xxx-service这个service为例,调剂后的效不雅,2016年9月20日当天的数据:

99line占比:

简单SQL也很慢?数据库端到端机能问题的解决思路商量

慢SQL数量:63

简单SQL也很慢?数据库端到端机能问题的解决思路商量

ok,效不雅有了,总结一下。

问题分析

1、基来源基本理

简单SQL也很慢?数据库端到端机能问题的解决思路商量

2、Thread-Pool 是若何工作的?

起首可以看到,MySQL重要有三个组件:连接/线程处理、MySQL Server层、存储引擎层。

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)