202509|技术日志

0901

SQL索引失效的情况

面试的时候经常会考察SQL的索引,而SQL索引失效的情况就是在业务场景中使用SQL索引时经常会遇到的问题

常见的索引失效,也就是我们通常说的查询未命中索引,这样的情况有:

  1. 复合索引是遵循最左匹配原则,如果索引列顺序错了,会导致索引无法命中
  2. MySQL 分析本次查询最终查询出来的数据有900条,整张表有1000条数据,查询索引的成本比全表扫描来得高,因此会直接扫描全表不会命中索引

分析查询是否命中索引

可以使用 MySQL 自带的 EXPLAIN 关键字

工厂方法模式

已整理成单独文章笔记

0902

CPU占用过高排查

top显示进程CPU利用率,找到最高的那个进程,定位PID

之后通过 jstack 命令导出这个进程的堆栈信息以便定位是哪一段代码

1
2
#将指定PID的堆栈信息导出到当前目录下的 stack.log 文件中
jstack <PID> > stack.log

同时我们查看这个进程中哪些线程占用过高,获得他们的线程ID

1
top -Hp <PID>

有了线程ID,就可以去 stack.log 中查找,但是堆栈日志文件中是十六进制,因此需要先转换一下

1
printf "%x\n" <线程ID>
1
2
#查看堆栈日志中30行这个线程相关方法
grep -A 30 'nid=0x<十六进制线程ID>' stack.log

这样就可以定位具体是哪里出了问题


202509|技术日志
http://example.com/2025/09/01/202509-技术日志/
作者
Noctis64
发布于
2025年9月1日
许可协议