大家好,我是坤哥
今天给大家分享一个我司去年的一个生产案例,相信大家看完会有一些收获
去年双十一当天我司发现了一条慢 SQL 导致的故障
![](https://i-blog.csdnimg.cn/blog_migrate/76a5fe646c1c3f6509804a265c20c1c8.jpeg)
如图示,故障现象如下:
1、11月11日18:00:07开始有大量慢sql以及活跃连接数告警
2、打开 pt-query-digest 进行统计,发现大量一张名为 seller_address_brand 表的慢 SQL,其他表的慢 SQL 一条都没有,平均执行时间 1S 左右
![](https://i-blog.csdnimg.cn/blog_migrate/d406eb1ec7daee0f1155ff053848ded4.png)
3、排名第一的慢 sql 如下:
SELECT id,uid,brand,gmt_create
FROM `seller_address_brand`
where
( uid = 57175 and brand = 10109 )
4、这张表的情况:一共 63300 条数据,数据大小 3.6 M,该 uid 共 1487 条数据,刚好是该表中 uid 对应 brand 数量最多的。
5、脱敏后的表结构如下
CREATE TABLE `seller_address_brand` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(10) unsigned NOT NULL,
`brand` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
看表结构不知你是否发现了问题,就不卖关子了,主要原因是逻辑读大量上涨,那么为啥逻辑读会大量上涨呢
由于该表很小,只建立了 uid 单列索引,所以查完 uid 后还要回表去过滤 brand=10109 的数据,当并发到达一定量时会导致逻辑读很高,会引发 Latch(一种内存锁) 的争用,从而导致了原本很快的 SQL 也变成了慢 SQL
如何解决呢?增加 uid+brand 这样的组合索引即可,执行时间会降低至 1.5ms
所以你看虽然你加了索引,但如果用法不当,不理解逻辑读,回表这些概念还是有可能出问题的,我们还是需要全面系统地掌握 MySQL,将其内部深挖得明明白白才能理解和解决类似以下的现象
count(*) 慢该如何解决?
对于千万级的大表,MySQL 要怎么优化?
SQL 使用 Join 好,还是多次 Select 好?
1000 多万条数据,建了索引还是慢,该怎么办?
仔细想想,我当初在用 MySQL 的过程中,遇到的问题也是五花八门,从开发技巧到管理维护,从性能问题到安全问题。第一个感受就是,MySQL 本身是个设计优良的系统,其中有很多巧妙的设计思路,比如 WAL 机制、索引的实现、缓存的处理方式等等,掌握好这些,能解决日常工作中的很多问题。
那会儿,也没少在网上找资料,虽说有所收获,但内容大多脱离真实的软件开发,看的时候各种明白,上手实操就原形毕露了。后来刷微博,看到诸霸转发了数据库大佬——丁奇的专栏《MySQL 实战 45 讲》。
当年学下来,让我对 MySQL 的理解上了一个新的高度。毫不夸张的说,这是我看过的最好的 MySQL 教程,口碑一级棒,已经超过 75000 人订阅了。
但凡你对数据库有点了解,就应该听过丁奇的名字。他先后在百度、阿里、腾讯任职,从事 MySQL 相关工作 10 多年了。在阿里跟褚霸共事,参与了阿里云关系型数据库服务内核的开发,负责开源分支 AliSQL,现任腾讯云数据库负责人,可以说是数据库领域名副其实的大佬了。
专栏正在搞限时秒杀活动,推荐你入手。
扫码免费试读????
秒杀 + 口令「mysql1024」
到手仅 ¥119,立省 ¥80 !
用丁奇自己的话说,专栏他最满意的部分,不仅是讲清楚了原理,每一篇文章都带上了实践案例。在专栏中,他梳理了 MySQL 的主线知识,比如事务、索引、锁等;并基于这条主线上,带你缕清概念、机制、原理、案例分析**以及本质,让你真正能掌握 MySQL 核心技术与底层原理。
一共 45 讲,全部更新完毕,信息量超大,结合了丁奇自己的理解和实战心法,还深入探讨了 36 个 MySQL 常见痛点问题,再配合手绘的 100+ 详解图,真正梳理出一条完整系统的 MySQL 学习路径。看完后,你也一定可以少走“弯路”,洞悉本质。
说倾囊相授,有过之而无不及。
只要能认真跟着学,一定能搞懂 MySQL 中那些经典、巧妙的设计,并且把这些设计思路应用到自己的工作中,可以说是长期的影响到了我。
这是极客最早的专栏之一,但真正有价值的内容,是经得起时间检验的。我也曾多次重读,每次都有新收获,从内容到评论留言,都是高精。就像有位读者说的,这是个“值得被所有开发同学看到的专栏”。
![](https://i-blog.csdnimg.cn/blog_migrate/ca19286c03c189cfd8f6de283adb6986.jpeg)
而且文章中没有理解透彻的问题,都会在评论区找到丁奇给的答案。可以说帮到不少人,截了些评价供你参考,从留言字数,就能看出来,相当走心了。
![](https://i-blog.csdnimg.cn/blog_migrate/22bf69f7a0887fc382df899147f257bf.jpeg)
说了这么多,看看目录吧。
![](https://i-blog.csdnimg.cn/blog_migrate/eb646c267178958619cd122e4584cf8b.jpeg)
想当年,我们哪有这种待遇,几十块就能获得技术大牛的经验总结。想都不敢想,只能自己摸爬滚打,踩坑试错。
所以,真正的好内容,值得被更多人知道。而且一个系统的课,胜过 100 篇干货文章,超 7.5W 人在学,又是数据库大佬亲授,绝对错不了。
再提醒一下:
秒杀 + 口令「mysql1024」
到手 ¥119,即将恢复原价至 ¥199
几乎半价了,只能帮你到这了!
![](https://i-blog.csdnimg.cn/blog_migrate/eaa397d9eefce40be4ecbb07f1d250b0.jpeg)
扫码免费试读
一顿饭钱,拿下丁奇十几年技术心法,值了。
???? 点击「阅读原文」,最低价¥119 入手,需要的朋友,自己把握。