写点什么

MYSQL 大法之慢 SQL--COMMIT

作者:小书童
  • 2022-11-02
    北京
  • 本文字数:669 字

    阅读完需:约 2 分钟

MYSQL大法之慢SQL--COMMIT

在慢查询日志中出现 commit,就是因为事务提交(commit)的时间过长。


原因有:

二进制日志轮换(Rotate)时,在二进制日志轮换完成之前,无法提交其他任何事务。这个会引起事务提交出现短暂的停顿/卡顿。尤其当二进制日志过大或者 IO 性能差的时候,这个停顿可能更长。导致 commit 的时间超过参数 long_query_time 的值。从而 commit 语句出现在慢查询日志。


事务过大,导致事务提交的时候,需要等候的时间过长,尤其是发生二进制日志轮换时。

对于联接的列含有索引的情况,外部表的每条记录不再需要扫描整张内部表,只需扫描内部表上的索引即可得到联接的判断结果;而一般 B+树的高度为 3-4 层,在有索引的情况下,Simple Nested-Loops Join 算法的执行速度是比较快的。优化器在一般情况下总是选择将联接列含有索引的表作为内部表,如果两张表 R 和 P 联接的列上都有索引,并且索引的高度相同,那么优化器会选择将记录数量最少的表作为内部表,这是因为内部表的扫描次数总是索引的高度,与记录的数量无关。


基于内存的数据库是最快的,因为数据库不需要对磁盘进行操作,磁盘的速度要远慢于内存的速度,因此基于磁盘的数据库一般都有缓冲池,即一块内存区域,其作用是将从磁盘上读取的指定大小数据——称为页(或块),放入缓冲池,当再次读取时,数据库首先判断该页是否在缓冲池中,如果在则直接读取缓冲池中的页,如果不在则读取磁盘上的页。对于写操作,数据库将页读入缓冲池,然后在缓冲池中对页进行修改,修改完成的页一般被异步地写入磁盘上。由此可见,缓冲池的大小决定了数据库的性能。除了同步、异步的写磁盘操作外,所有其它操作都可以在内存中完成。

发布于: 刚刚阅读数: 4
用户头像

小书童

关注

北京市海淀区四季青镇京泉鑫苑东里快递驿站 2022-10-25 加入

郭老师:16601072087 北京市海淀区四季青镇京泉鑫苑东里快递驿站

评论

发布
暂无评论
MYSQL大法之慢SQL--COMMIT_11月月更_小书童_InfoQ写作社区