梁敬彬梁敬弘兄弟出品
往期回顾
——————————————————————————————————————
SQL优化思想——不优化或许是最好的优化⓵哈哈,其实我几乎什么都没做
SQL优化思想——不优化或许是最好的优化⓶莫急,探究SQL存在的必要性
SQL优化思想——不优化或许是最好的优化⓷莫慌,观察SQL运行的全局性
SQL优化思想——不优化或许是最好的优化⓸莫忘,分析SQL需求的合理性
——————————————————————————————————————
SQL优化思想——让SQL跑得更慢一些⓵没听错,让SQL跑得更慢一些!
SQL优化思想——让SQL跑得更慢一些⓶案例1: 引入并行,你快他慢!
SQL优化思想——让SQL跑得更慢一些⓷案例2: 增加索引,查快写慢!
SQL优化思想——让SQL跑得更慢一些⓸案例3:关闭日志,险中求快!
——————————————————————————————————————
引言
SQL优化思想已经讨论了两集,不论是“不优化是最好的优化”,还是“变慢是更好的选择”,都在强调做事要有批判性思维,三思而后行。
接下来,将探讨SQL优化本身的思路,看看如何让SQL跑得更快。毕竟,衡量SQL快慢的标准就是其运行时间的长短。
围绕“时间”这个主题,结合超市购物的生活场景,让我们步入正文,共同探寻在XXX平台优化案例中,SQL的时间都去哪儿了。
⓵时间=等待时间+工作时间
Q:L老师,听说您刚解决了困扰XXX平台许久的问题,到底是怎么做的?
L:我与他们一起分析SQL执行慢时,时间都花在哪些环节,然后有的放矢地进行优化,最终成功解决问题。
M:哦,时间花在哪些环节呢?不就是执行环节吗?还有其他环节?
L:前些日子你抱怨在超市购物时,买单的时间比购物过程花的时间还长。其实,这事便能解答你的疑问。
M:哦,是吗?
L:你在超市买单时,通常会在收银台排队,这就类似于SQL的等待时长。等到轮到你时,才能与收银员进行面对面结算,这就类似于SQL的工作时长。超市买单时间=等待时间+工作时间。当你抱怨买单慢时,需明确耗时主要是在等待上还是在工作上。
M:我购物时,收银台的结算倒是很快,时间主要耗在排队上,也就是等待时间太长了。
L:是的,数据库的SQL也是如此。SQL执行时间=等待时间+工作时间。接下来,我们就通过类比超市买单的场景,来探讨XXX平台的SQL优化案例。
概念解析补充
1. SQL执行时间的构成
文中提到的"SQL执行时间=等待时间+工作时间"是SQL优化的重要理论基础。这个简单的公式揭示了SQL执行过程中的两个关键时间组成部分:
等待时间:指SQL语句在执行过程中等待系统资源的时间。就像在超市排队等待前面的顾客结账一样,SQL也需要等待CPU、内存、I/O等资源。等待时间通常与系统并发负载、资源争用情况相关。
工作时间:指SQL语句获取到所需资源后,实际执行所消耗的时间。这相当于顾客轮到收银台后,收银员进行扫码、结算的过程。工作时间反映的是SQL本身的执行效率,与查询复杂度、数据量、执行计划等因素相关。
2. 等待事件(Wait Events)
数据库系统通常会记录SQL执行过程中的等待事件,主要等待事件类型包括:
CPU等待:等待处理器资源分配
I/O等待:包括逻辑读和物理读的等待时间
锁等待:包括行锁、表锁、锁升级等导致的等待
锁闩(Latch)等待:数据库内部数据结构访问控制导致的等待
缓冲区等待:等待缓冲区资源分配或清理
日志等待:等待日志写入或日志缓冲区分配
网络等待:分布式环境下的网络通信等待
不同数据库产品(Oracle、SQL Server、MySQL等)对等待事件的分类和命名有所不同,但基本概念是一致的。
3. 超市排队的类比解析
文中使用的超市排队场景是一个形象的类比:
超市排队等待对应SQL等待时间:
排队人数多 ≈ 数据库并发高
收银台少 ≈ 系统资源不足
特殊顾客插队 ≈ 高优先级会话抢占资源
收银员结算对应SQL工作时间:
收银员经验不足导致扫码慢 ≈ SQL执行计划不优
顾客购物车物品多 ≈ SQL处理的数据量大
收银机性能差 ≈ 数据库服务器配置低
未完待续…
SQL优化思想–时间都去哪儿了⓶减少CPU持有等待时间(增加收银台)
公众号:收获不止数据库