innodb已经使用了独立undo表空间,那么ibdata1还会增长吗,为什么?

目录

  • innodb已经使用了独立undo表空间,那么ibdata1还会增长吗,为什么?
  • MySQL线上实例insert慢常见原因有哪些?
  • 虽然命中索引,但SQL效率仍然慢,可能有哪些原因?

一、innodb已经使用了独立undo表空间,那么ibdata1还会增长吗,为什么?

答:使用独立undo表空间后,ibdata1里主要存储Data dictionary、Rollback segments、Double write buffer、change buffer、Foreign key constraint system tables等数据。

下面两种情况可能还会导致ibdata1文件增长:

1、当使用共享表空间模式时(设置innodb_file_per_table=0),ibdata1还会存储用户数据,导致ibdata1文件增长。(当然了,现在应该几乎没人再这么用了)

2、在高I/O负载时,可能会来不及刷新和回收change buffer page,也会导致ibdata1文件增长。(此种情况再高并发压测情形下更容易出现)

二、MySQL线上实例insert慢常见原因有哪些?

答:

1、锁等待:SQL产生的间隙锁、自增锁、死锁、MDL锁、外键检查锁,锁等待时间

2、iops达到瓶颈:例如备份任务、高频binlog redolog等文件写入

3、semi-sync:因为网络抖动,MySQL半同步、增强半同步导致语句卡住

4、高并发:高并发场景下,导致系统资源达到瓶颈,从而SQL执行慢

5、大字段:当前表索引过多,或者写入大量的text类型数据

6、硬件故障:因为磁盘、raid卡、内存等物理硬件故障导致写入慢

7、磁盘资源耗尽:操作系统的磁盘、inode资源耗尽

8、文件系统故障:MySQL data目录的所在挂在的不可写、或者被设置为只读

9、binlog group commit等待

10、参数配置:innodb_buffer、redo_buffer过小

11、autocommit:事物非自动提交,等待程序提交。

三、虽然命中索引,但SQL效率仍然慢,可能有哪些原因?
答:

1、索引字段重复值或者空值太多。

2、查询条件范围太广返回结果数太多,全索引扫描

3、没有利用到覆盖索引,造成大量回表

4、查询字段过多,并且包含大字段

5、索引字段数据分布太随机,回表不多也会引起大量随机io

6、统计信息不准

7、表的单行数据值很大,需要较多io

8、表中包含多个索引, 命中的索引不是最优的索引。


公众号:知数堂,更多MySQL干货知识,关注公众号获取。

原文链接:https://zhishutang.com/rbE
推荐阅读:https://zhishutang.com/xdI

你可能感兴趣的:(mysql)