SQL为什么执行慢

1、数据库在刷新 脏页

当我们要往数据库插入一条数据、或者要更新一条数据的时候,

我们知道数据库会在内存中把对应字段的数据更 新了

但是更新之后,

这些更新的字段并不会马上同步持久化到磁盘中去,

而是把这些更新的记录写入到 redo log 日记中去,

等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到磁盘中去

不过,redo log 里的容量是有限的,

如果数据库一直很忙,更新又很频繁,

这个时候 redo log 很快就会被写 满了,

这个时候就没办法等到空闲的时候再把数据同步到磁盘的,只能暂停其他操作,

全身心来把数据同步到磁 盘中去的,

而这个时候,就会导致我们平时正常的SQL语句突然执行的很慢,

所以说,数据库在在同步数据到磁 盘的时候,就有可能导致我们的SQL语句执行的很慢了。

2、拿不到锁我能怎么办

我们要执行的这条语句,

刚好这条语句涉及到的表,别人在用,并且加锁了,我们拿不 到锁,只能慢慢等待别人释放锁了。

或者,表没有加锁,但要使用到的某个一行被加锁了,这个时候,我也没办 法啊。

如果要判断是否真的在等待锁,

我们可以用 show processlist 这个命令来查看当前的状态哦

3、索引失效

111-sql慢4条
当 redo log 写满时就会进行刷脏页,此时写操作也会终止,那么 SQL 执行自然就会变慢。
遇到所要修改的数据行或表加了锁时,需要等待锁释放后才能进行后续操作,SQL 执行也会变慢。
读操作慢很常见的一个原因是未命中索引从而导致全表扫描,可以通过 explain 方式对 SQL 语句进行分析。
另一种原因是在读操作时,要读入的数据页不在内存中,需要通过淘汰脏页才能申请新的数据页从而导致执行变慢。

posted @ 2021-12-14 12:25  姚狗蛋  阅读(41)  评论(0编辑  收藏  举报