关于面试 MySQL 的疑问

356 天前
 gps32251070

最近的一次面试,面试官提到了一个 MySQL 场景,如下


表 t 只有两个字段,主键 id 和 varchar 类型的 name ,现在有一条 SQL:select id,name from t limit 2; 这条语句执行过程中很慢,问大概的原因。


思考了一下,感觉不是锁问题,所以答了下大概是服务器负载大,查询的 SQL 很多都是不重复的,导致数据页缓存命中有问题之类的,面试官不是很满意这个答案,后面快结束我又问了下这个问题,面试官回答大概意思是负载导致的锁的问题。

我的疑问是,这个 sql 语句不是走的快照读吗?又没有加 lock in share mode ,其他语句的锁怎么会影响到它的执行呢?还有一个可能是加了 MDL 写锁,但是 MDL 写锁在修改表结构的情况下才会发生,生产环境基本不会出现。有没有懂的老哥帮忙解答下?

3119 次点击
所在节点    程序员
58 条回复
xuanbg
356 天前
@gps32251070 limit 2 是顺序读 2 条没错,可顺序怎么来的?不得排序先? 20 万数据没索引你排序一个试试看慢不慢就完了。
xuanbg
356 天前
20 万里取 2 条的意思是先读 20 万,然后取 2 条啊,不是直接取 2 条!
JasonLaw
356 天前
@xuanbg #18 虽然 type 是 ALL ,但是不代表它要扫描所有行。没有 offset 的时候,它只会找出前两行。

JasonLaw
356 天前
@xuanbg #22 它只需要找出前两行就行了。如果觉得你是对的,麻烦给一下证据。

wushigejiajia01
356 天前
关注一下
taogen
356 天前
@xuanbg explain 中 type=ALL 的意思是全表扫描直到查到符合条件的数据。这里 limit 2 ,且没有 order ,扫到第二条数据的时候就满足要求,然后就返回了。我用 OP 的语句查了我生产数据库中一个 1.2G 的表,瞬间就返回了。
zengguibo
356 天前
最大的可能是锁表了,可以使用 show processlist 看一下
fredcc
356 天前
面试官没提到是什么表引擎吗
tutudou
356 天前
数据多了,也会导致慢呀,嘴在他身上,他喜欢说什么就什么好了。
taogen
356 天前
面试官可能是这个意思:一条看似不可能慢的查询 SQL ,在什么情况下会变慢?
chaleaochexist
356 天前
如果数据库服务器的负载较高,例如同时有其他大量查询或者写操作,那么查询的执行时间可能会延长。这可能是因为数据库服务器资源不足,导致查询需要等待资源的可用性。
chaleaochexist
356 天前
@chaleaochexist #31 GPT 说的.
koloonps
356 天前
mark 下,我之前就遇到过 join 查询结果直接超时,换一台服务器就好的情况
xiangyuecn
356 天前
什么负载不负载的,加钱皆可解决🐶 所以,原因是钱给少了
ccde8259
356 天前
意味着执行计划不会有问题的情况下,下层结构会带来哪些可能的问题。
如果是 InnoDB 的话,首先是 Buffer Pool 本身访问就是需要 Mutex 的,有没有可能是等锁导致的慢呢?
进一步的,如果 Buffer Pool 没有命中就需要从磁盘拖数据,磁盘 IO 导致的慢呢?
从磁盘拖回来的数据如果是有问题的,比如刷出来了个 Crash 完以后 LSN 高于 Checkpoint 的脏页,从 Redo-Log 恢复数据导致的慢呢?
xiaofan2
356 天前
1. 什么执行引擎?
sadfQED2
356 天前
@JasonLaw 还真有可能慢,而且是我们线上真实遇到过的问题。我们最终查到的原因是因为我们机房交换机有问题,mysql 和业务服务器通讯过程中出现了丢包,丢包引起一系列问题,最终导致查询很慢。

面试官问这种目测他们也是遇到这种问题了吧,让他们排查网络问题
xiaofan2
356 天前
@xiaofan2 继续没说完 2. 什么隔离级别 这些前提什么都没有 感觉问题无从下手啊
sadfQED2
356 天前
面试官说了是负载问题,但是没说是什么负载啊,网络 io 打满,传输慢成狗,那无论什么查询都超慢是有可能的。

而且他也没说是 mysql 自己的问题,网络 io 打满,或者磁盘 io 打满,都有可能
yianing
356 天前
MySQL 快照读不加锁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/944619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX