又称为system tablespace系统表空间,a small set of data files (the ibdata files) 。数据库
1、共享表空间ibdata1并发
一、数据字典(data dictionary):记录数据库相关信息高并发
二、doublewrite write buffer:解决部分写失败(页断裂)性能
三、insert buffer:内存insert buffer数据,周期写入共享表空间,防止意外宕机优化
四、回滚段(rollback segments)spa
五、undo空间:undo页code
2、关于ibdata1的增加考虑对象
影响共享表空间增加的对象:insert buffer、undo空间
一、何时undo暴涨:
一、大事务为主,例如修改了40万行才提交
二、长事务致使的undo持续增长
二、insert buffer空间很大
一、索引创建过多
二、不少索引不怎么使用
三、索引和主键顺序严重不一致:主键的创建选择有问题
因此===
ibdata1使用时要注意:在初始化ibdata1时,最好是设置大一些,避免因为高并发忽然暴增,影响性能。
3、对ibdata的的设置最佳实践
注意:初始化设置,后期设置就没有意义。
一、空间大小
innodb表是按表空间进行存放的,共享表空间ibdata1默认初始化大小是12M。
mysql> show variables like 'innodb_data_file_path'; +-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set, 1 warning (0.47 sec)
初始化:innodb_data_file_path=ibdata1:10G:ibdata2:10G:autoextend
二、undo分离
undo最容易致使ibdata1暴涨,因此须要将undo分离出去,只能在初始化的时候作,初始化以后就没有办法实现undo分离。
处理:
在初始化实例以前,只须要设置 innodb_undo_tablespaces 参数,默认是等于0即指单独存放的undo表空间个数为0,也就是undo为分离;建议将该参数设置大于等于3,便可将undo log设置到单独的undo表空间中。
1、innodb_file_per_table=1
MySQL 5.6.6以前的版本,InnoDB 默认会将全部的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就会让管理感受很难受,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。一般只能将数据使用mysqldump 导出,而后再导入解决这个问题。
在以后的版本,为了优化上述问题,独立表空间innodb_file_per_table参数默认开启:
mysql> show variables like 'innodb_file_per_table'; +-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set, 1 warning (0.05 sec)
能够修改InnoDB为独立表空间模式,每一个数据库的每一个表都会生成一个数据空间。
2、独立表空间的性能优越
一、优势:
一、每一个表都有自已独立的表空间。
二、每一个表的数据和索引都会存在自已的表空间中。
三、能够实现单表在不一样的数据库中移动。
四、空间能够回收
五、对于使用独立表空间的表,无论怎么删除,表空间的碎片不会太严重的影响性能,并且还有机会处理。
二、缺点:
单表增长比共享空间方式更大。
三、共享表空间在Insert操做上少有优点,其它都没独立表空间表现好。当启用独立表空间时,合理调整:innodb_open_files(指定InnoDB一次能够保持打开的.ibd文件的最大数目)。