《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。
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文件增长。(此种情况再高并发压测情形下更容易出现)
答:
1、检查备份。不管是逻辑备份、物理备份,还有binlog也要备份。备份文件可恢复,才是好备份。
2、做好安全措施。授权合理不要过大,在外不要连陌生的网络办公。危险操作,尽量等节后执行。
3、健康巡检。节前巡检包括:数据库桩体、硬盘空间、日志信息、物理硬件、系统负载是否预警等。
「知数堂」祝大家节日快乐,DB不宕机跑得欢。
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、表中包含多个索引, 命中的索引不是最优的索引。