范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

CPU占用又爆了?MySQL到底在干什么

  | 作者 王文安,腾讯CSIG数据库专项的数据库工程师,主要负责腾讯云数据库 MySQL 的相关的工作,热爱技术,欢迎留言进行交流。文章首发于腾讯云+社区的腾讯云数据库专家服务专栏。
  在日常工作中,发现 MySQL 的状态不太对劲的时候,一般都会看看监控指标,很多时候会看到熟悉的一幕:CPU 使用率又爆了。本文将给大家介绍 MySQL 和 CPU 之间的关系,对此有一定的了解之后可以更准确的判断出问题的原因,也能够提前发现一些引发 CPU 问题的隐患。怎么看懂CPU使用率
  以 Linux 的 top 命令为例,效果如下:
  Top 命令
  在 %CPU 这一列就展示了 CPU 的使用情况,百分比指代的是总体上占用的时间百分比:
  %us:表示用户进程的 CPU 使用时间(没有通过 nice 调度)
  %sy:表示系统进程的 CPU 使用时间,主要是内核使用。
  %ni:表示用户进程中,通过 CPU 调度(nice)过的使用时间。
  %id:空闲的 CPU 时间
  %wa:CPU 运行时在等待 IO 的时间
  %hi:CPU 处理硬中断花费的时间
  %si:CPU 处理软中断花费的时间%st:被虚拟机偷走的 CPU 时间
  通常情况下,我们讨论的 CPU 使用率过高,指的是 %us 这个指标,监控里面的 CPU 使用率通常也是这个值(也有用其他的方法计算出来的,不过简单起见,不考虑其他的情况 )。其他几个指标过高也代表出 MySQL 的状态异常,简单起见,这里主要还是指 %us 过高的场景。
  MySQL和线程
  MySQL 是单进程多线程的结构,意味着独占的 MySQL 服务器里面,只能用 top 命令看到一行数据。
  TOP 命令效果
  这里能看到的是 MySQL 的进程 ID,如果要看到线程的情况,需要用top -H
  TOP 命令效果
  在这里能看到的是 MySQL 各个线程的 ID,可以看到 MySQL 在启动之后,会创建非常多的内部线程来工作。
  这些内部线程包括 MySQL 自己用来刷脏,读写数据等操作的系统线程,也包括处理用户 SQL 的线程,姑且叫做用户线程吧。用户线程有一个特殊的地方:程序端发送到 MySQL 端的 SQL,只会由一个用户线程来执行(one-thread-per-connection),所以 MySQL 在处理复杂查询的时候,会出现"一核有难,多核围观"的尴尬现象。
  参考 %us 的定义,对于 Linux 系统来说,MySQL 进程和它启动的所有线程都不算内核进程,因此 MySQL 的系统线程和用户线程在繁忙的时候,都会体现在 CPU 使用率的 %us 指标上。
  什么时候CPU会100%
  MySQL 干什么的时候,CPU 会 100%?从前文的分析来看,MySQL 主要是两类线程占用 CPU:系统线程和用户线程。因此 MySQL 独占的服务器上,只需要留意一下这两类线程的情况,就能 Cover 住绝大部分的问题场景。
  系统线程
  在实际的环境中,系统线程遇到问题的情况会比较少,一般来说,多个系统线程很少会同时跑满,只要服务器的可用核心数大于等于 4 的话,一般也不会遇到 CPU 100%,当然有一些 bug 可能会有影响,比如这个:
  MySQL BUG
  虽然情况比较少,但是在面对问题的常规排查过程中,系统线程的问题也是需要关注的。
  用户线程
  提到用户线程繁忙,很多时候肯定会第一时间凭经验想到慢查询。确实 90% 以上的时候都是"慢查询"引起的,不过作为方法论,还是要根据分析再去得出结论的~
  参考 us% 的定义,是指用户线程占用 CPU 的时间多少,这代表着用户线程占用了大量的时间。
  一方面是在进行长时间的计算,例如:order by,group by,临时表,join 等。这一类问题可能是查询效率不高,导致单个 SQL 语句长时间占用 CPU 时间,也有可能是单纯的数据量比较多,导致计算量巨大。另一方面是单纯的 QPS 压力高,所以 CPU 的时间被用满了,比如 4 核的服务器用来支撑 20k 到 30k 的点查询,每个 SQL 占用的 CPU 时间并不多,但是因为整体的 QPS 很高,所以 CPU 的时间被占满了。问题的定位
  分析完之后,就要开始实战了,这里根据前文的分析给出一些经典的 CPU 100% 场景,并给出简要的定位方法作为参考。
  PS:系统线程的 bug 的场景 skip,以后有机会再作为详细的案例来分析。
  慢查询
  在 CPU 100% 这个问题已经发生之后,真实的慢查询和因为 CPU 100% 导致被影响的普通查询会混在一起,难以直观的看 processlist 或者 slowlog 来发现元凶,这时候就需要一些比较明确的特征来进行甄别。
  从前文的简单分析可以看出来,查询效率不高的慢查询通常有以下几种情况:
  全表扫描:Handler_read_rnd_next 这个值会大幅度突增,且这一类查询在 slowlog 中 row_examined 的值也会非常高。
  索引效率不高,索引选错了:Handler_read_next 这个值会大幅度的突增,不过要注意这种情况也有可能是业务量突增引起的,需要结合 QPS/TPS 一起看。这一类查询在 slowlog 中找起来会比较麻烦,row_examined 的值一般在故障前后会有比较明显的不同,或者是不合理的偏高。
  比如数据倾斜的场景,一个小范围的 range 查询在某个特定的范围内 row_examined 非常高,而其他的范围时 row_examined 比较低,那么就可能是这个索引效率不高。
  排序比较多:order by,group by 这一类查询通常不太好从 Handler 的指标直接判断,如果没有索引或者索引不好,导致排序操作没有消除的话,那么在 processlist 和 slowlog 通常能看到这一类查询语句出现的比较多。
  当然,不想详细的分析 MySQL 指标或者是情况比较紧急的话,可以直接在 slowlog 里面用 rows_sent 和 row_examined 做个简单的除法,比如 row_examined/rows_sent > 1000 的都可以拿出来作为"嫌疑人"处理。这类问题一般在索引方面做好优化就能解决。
  PS:1000 只是个经验值,具体要根据实际业务情况来定。
  计算量大
  这一类问题通常是因为数据量比较大,即使索引没什么问题,执行计划也 OK,也会导致 CPU 100%,而且结合 MySQL one-thread-per-connection 的特性,并不需要太多的并发就能把 CPU 使用率跑满。这一类查询其实是是比较好查的,因为执行时间一般会比较久,在 processlist 里面就会非常显眼,反而是 slowlog 里面可能找不到,因为没有执行完的语句是不会记录的。
  这一类问题一般来说有三种比较常规的解决方案:
  读写分离,把这一类查询放到平时业务不怎么用的只读从库去。
  在程序段拆分 SQL,把单个大查询拆分成多个小查询。
  使用 HBASE,Spark 等 OLAP 的方案来支持。
  高 QPS
  这一类问题单纯的就是硬件资源的瓶颈,不论是 row_examined/rows_sent 的比值,还是 SQL 的索引、执行计划,或者是 SQL 的计算量都不会有什么明显问题,只是 QPS 指标会比较高,而且 processlist 里面可能什么内容都看不到,例如:
  processlist
  总结
  实际上 CPU 100% 的问题其实不仅仅是单纯的 %us,还会有 %io,%sys 等,这些会涉及到 MySQL 与 Linux 相关联的一部分内容,展开来就会比较多了。本文仅从 %us 出发尝试梳理一下排查&定位的思路和方法,在分析 %io,%sys 等方面的问题时,也可以用类似的思路,从这些指标的意义开始,结合 MySQL 的一些特性或者特点,逐步理清楚表象背后的原因。

中小学又迎来新规定,学生的快乐就要消失了,家长却拍手叫好对于中小学生而言,童年的快乐是最重要的,童年的回忆总是让人满脸笑容,总是久久不能忘怀。每天在学校里的嬉笑打闹,在课堂上偷吃小食品,生怕被老师发现的惊心动魄,你不怀念嘛?对于学生而言全红婵署名曝光,字迹工整美观,爸爸鼓励先苦后甜,继续向前冲对于全红婵现在可谓家喻户晓,成为全民真正的宠儿,堪比顶流巨星。以3次跳水为满分,成功摘得金牌,成为全国人民的骄傲,更是打破寒门再难出贵子的言论。人红之后总是会遭受嫉妒,总会有一些无辽宁这所大学招生爆冷,分数降到161分,想捡漏的别错过辽宁省是一个风姿多彩的城市,位于我国的东北地区,有工业摇篮之称。辽宁并不像河南,河北是高考大省,但辽宁的考生也不逊色,今年辽宁实行新高考模式312,大部分考生取得了不错的成绩。高考殡仪馆下半年将开始招人,职位广泛月薪过万,你心动了吗学生时代的我们总会遇见很多选择,从小学的私立学校和公立学校,等到中考后上职高和高中,等到高考的时候,学生面临的选择就更多了,学生不光要选择学校和专业,更需要选择学校的城市。人生中会外交部女神张璐升职,因一句神仙翻译走红,这才是年轻人该追的星如今是是网络时代,更流量时代,追星几乎成了学生的灵魂支柱,大部分学生都喜欢颜值高,人又善良的明星,尤其是能够彰显中国人霸气,掺杂有爱国主义情怀的star。能够极具才华与智慧稀的人不中小学教师将弹性上下班,课后延时服务迎来新问题,家长不知所措关于课后延时服务的事情如今已是沸沸扬扬,其实这本质上是一件好事情,课后延迟2个小时,能方便家长接送学生,同样也不会亏待教师,部分地区教师也会有相应的补助。这样消息刚一出,家长们纷纷教育部公布紧急通知,中小学秋季开学有变化,家长终于能放心了最近全国各地的疫情反反复复,甚至有的地方已经成为危险地区,疫情再次袭来让很多人的内心越发紧张。如今马上就是8月中旬,距离学生开学的时间越来越近,相信很多家长也为学生的新学期担心。从同为一所大学,为啥既有一本又有二本呢,两者之间有多大差距全国高校众多总共有3000多所,高校分为985高校,211高校,普通高校以及专科高校。高校录取一般分为提前批次,一批次录取,二批次录取和三批次录取。但像军校或者艺术类的高校基本上是鼓励三胎政策出炉,三育一体化将全面实行,年轻人终于能养得起了不知道从什么时间,年轻人愿意再要孩子了,目前国内老龄化严重,出生率直线下降。导致想要退休的人不能按时退休,而年轻人不能如愿上岗,该死的恶性循环,让年轻人分的生活压力沉重,不愿意生育本科一批次录取已开始,为何查询不到录取结果,真的是落榜了吗如今高考已经结束一段时间,大部分省份已经进入本科批次录取环节,也就是说报考本科批次的学生,即将能知道录取结果,目前四川,广西,江苏,广东等等地区逐渐展开录取工作,相信学生们很快就会眉山一教师退休感言走红,引无数网友点赞,被教书耽误的段子手教师在人们的心中是庄严肃静的,教师是辛勤的园丁,教师为了将我们教育得更出色,经常是呕心沥血,没有教师就是没有今天的文化传承,对于教师的奉献我们不能否认。教师也会有退休的时间,通常男
丁真意外走红,没上过学的甜野男孩,面对成名的诱惑他选择了丁真火到国外啦,连日本电视台都开始播报这位藏族男孩!最近,因为偶然被拍下纯真笑容而走红的藏族小伙丁真,受到了许多人的关注,连合育君这个平时不怎么喜欢凑热闹的人,现在都时刻盯着热搜榜外卖小哥高考623分意外走红读书无用,是我听过最大的谎言最近,各省高考成绩录取分数线陆续出炉。一时间,高考成绩相关话题刷屏各大平台,比如男生高考608分当生日礼物送自己男生高考689分和父亲激动相拥孩子高考分数不理想独自拉二胡男生超一本中国红京牌车现身日本街头,网友骄傲了近日京牌车现身东京街头登上微博热搜第一位咋回事儿?起因是日本网友在社交平台发帖晒出在东京街头拍到的中央广播电视总台4K8K超高清转播车漂洋过海的转播车还申请了日本临时牌照日本网友网她是画手,也是魔法师,让普通的木头变成童话里的故事有的人喜欢车水马龙高楼林立的繁华都市有的人则喜欢山清水秀鸟语花香的淳朴乡村而最幸运最幸福的莫过于能够过上自己所想要的生活了来自波兰的艺术家安娜(AnnaKucharska)她就非常中国志愿者在东京我们为奥运会上的中国健儿们送祝福志愿者是一届奥运中不可或缺的存在他们的笑容和真诚是许多参赛选手难忘的奥运记忆之一2020年东京奥运会将有许多中国籍志愿者活跃在各大比赛场馆其中一些人分享了他们的故事以及他们对中国选国际奥林匹克数学唯一满分,上海男生摘得第62届国际奥数金牌2021年第62届国际数学奥林匹克(IMO)成绩出炉,中国队再次登上IMO顶峰,获得第22次世界第一!恭喜6位中国少年斩获六金!其中,上海华东师范大学第二附属中学的王一川(籍贯为武四川一位妈妈和儿子制定一条约,条约内容暑假不要喊妈暑假开启,神兽出笼长达两个月的假期才过了一周很多妈妈就已经大呼吃!不!消!因为家中的画风是这样的各位妈妈还好吗?家里孩子消停吗?成都宝妈张鹿(化名)就因为被7岁儿子无时无刻地呼叫没应不应该让孩子学习画画,孩子学习画画会不会影响学业?今天我们就来讨论一下,孩子学画画,究竟会不会影响文化课的学习呢?首先,我要给出肯定的答案学习绘画,并不会耽误孩子的学习成绩。能飞行能折叠的汽车马蕴承辅导教师张中杰一学画画的好处绘画暑假到了,妈妈的育儿手段,代表着你扮演着什么角色?教育孩子,需要父母管理好自己的情绪,更需要养护好孩子的情绪。暑假到了,大多数孩子在家,都不想学习,也不想做家务,每天只想看电视玩手机,怎么教育孩子,又成了一大难题。父母和孩子,24太凡尔赛了!邓亚萍其他国家拿铜牌,比我们拿金牌还兴奋近日,在一档节目中,大满贯邓亚萍谈到运动员夺金时刻,邓亚萍称其他国家拿铜牌比我们拿金牌还兴奋!真的是实实在在的凡尔赛了一把!网友评论来欣赏邓老师的大型凡尔赛现场吧!与邓老师的大型凡普通人的艺术梦,收废品18年,蜗居创作1000幅画作最近这几天,有这样一位画家引起了大家的关注他蜗居在15平方米的出租屋内白天出门收废品,晚上坚持画油画拾荒者和画家两种身份的强烈反差让他迅速在网上走红很多网友都说,他的人生经历简直就