秒杀活动前,MySQL应该调整哪些方面?

文摘   职场   2024-10-18 07:07   广东  

作者简介

小6,世界五百强产品出身,现任深圳某互联网公司IT负责人,<极客时间>课程讲师。

搭建IT团队让我有了丰富的面试经验,简历筛选超1000份,面试超200人,也让我意识到面试是有技巧的,关注小6,带你实战互联网求职面试!


我们今天分享道MySQL方向的面试题,有些实际工作中也会遇到,秒杀活动前,MySQL应该调整哪些方面?
这个是马听老师在「DBA驿站」星球分享的一个题目,是出自他的课程学员的提问,有他自己的回答,也有一些星球大佬们的补充,我们汇总看看。

01
马听老师的回答

马听老师给了三个方案:

1)方案一

首先就是建议研发把秒杀功能放到Redis上,比如把参与活动的所有用户id写到Redis某个列表里,然后选出最前面的100个,这100个就算是秒杀成功的。

第二步,再延迟去扣库存。


2)方案二

实在需要去MySQL里操作:

可以在客户端进行并发控制,不能让40w的QPS全打到MySQL上,因为MySQL会有死锁检测机制。

另外就是提前优化相关功能的SQL,看索引设计是否合适。

max_connections是可以适当调大一点,binlog_sync可以设到100。

还有一个可以优化的方法,就是把热点行分散到多行,比如某个商品,库存1000,原来在MySQL里是1行记录,库存1000,可以改成100行记录,每行记录库存10。


3)方案三

就是数据库层面排队,这个需要有内核开发能力,阿里就做过类似的改动,在数据库层上对单行记录做到并发排队。

当然,不管采用什么方案,都需要提前模拟业务场景的压测,看哪些地方需要优化的,比如笔者待过的一家公司,就遇到过上线之后,网络带宽不够的场景(虽然当时带宽已经相对上一次同类型活动,扩容了三倍)。


02
星球大佬们的补充

我们再看看星球大佬们的补充:

@冰美式:

db硬件资源高的话,调大innodb_thread_concurrency 有利于并发。

@马听 回复 @冰美式:

是的,这个参数表示InnoDB允许的最大线程数,一般建议设置为CPU核数的两倍。

@InnerCodeD 回复 @冰美式:

这个参数很坑人, 限制并发线程,QPS包含SELECT. 类似队列! 

导致CPU和内存都使用不高,反而大量SLOW SQL出现!

要开启这个参数,需要做好读写分离.把大量SELECT转移到别的库上。

@Tonyhacks:

这种场景下程序的连接池该如何配置?

@马听 回复 @Tonyhacks:

最小空闲连接数,可以调高一点,可以方便快速响应突发的请求。最大连接数稍微调高点,但是需要确保不超过MySQL的处理能力。比如10台应用机器,每台最大连接数设置的100,那高峰可能到数据库的连接数就是1000了 连接超时时间可以适当缩短,避免无效的连接过多的占用资源。

@北在南方:

业务端  缓存,限流, 排队 数据库侧  如果开源数据库,可以关闭死锁检测, 调整 innodb  并发数 相关参数,但是还是会有 threads   飙高的情况发生 如果用云数据库,腾讯,阿里云都有 热点行更新的特性, 结合内核优化 ,性能比开源 MySQL  性能好很多。

@马听 回复 @北在南方:

这个可以,云上RDS 这个特性,确实很多人不知道。

可以看到,星球里不仅仅是老师分享,其他很多大佬都有自己的见解,也会有更好的处理方案。

我们的【DBA驿站】星球,目前已超过250人270篇主题,在原先DBA面试的基础上,又增加了【DBA实战】专栏,后续还会开更多适合DBA学习的内容!

感兴趣的小伙伴可以领券加入,券后只要几十块钱!平均每天2毛钱!

星球详细介绍可以看看这篇文章:

运营一年!227人!268篇主题!DBA交流、学习、面试,看这里就够了!


DBA数据库,关注马听老师,一起学习!


1.回复“字节”,获取字节跳动终面(HRBP)10道精选面试题及分析

2.回复“小米”,获取小米(HRBP)10道精选面试题及分析

3.回复“HR”,获取精选20道精选HR面试题及分析

4.回复“DBA简历”,获取DBA简历模板

5.回复“产品经理”,获取20道精选产品经理面试题及分析

6.回复“数据库”,获取10道精选数据库面试题及分析

7.回复“星球”,获取【DBA驿站】知识星球最新优惠券

8.回复“简历修改”,获取简历修改方式

9.扫码加群(产品经理、DBA、AI)

小6互联网求职面试
主编小6,互联网公司IT负责人,极客时间课程讲师。
 最新文章