共享临时表空间与tmpdir对比
innodb_temp_data_file_path用于存储非压缩InnoDB临时表(non-compressed
InnoDB temporary tables)、关系对象(related
objects)、回滚段(rollback
segment)等数据。
tmpdir存储的是压缩InnoDB
temporary tables的临时独立表空间。
tmpdir下的东西和共享临时表空间最大的共同点以及特性就是,实例关闭之后,将会被删除。
innodb_undo_tablespaces
下面对这3个参数做一下解释:
(1)innodb_undo_directory,指定单独存放undo表空间的目录,默认为.(即datadir),可以设置相对路径或者绝对路径。该参数实例初始化之后虽然不可直接改动,但是可以通过先停库,修改配置文件,然后移动undo表空间文件的方式去修改该参数;
(2)innodb_undo_tablespaces,指定单独存放的undo表空间个数,例如如果设置为3,则undo表空间为undo001、undo002、undo003,每个文件初始大小默认为10M。该参数我们推荐设置为大于等于3,原因下文将解释。该参数实例初始化之后不可改动;
(3)innodb_undo_logs,指定回滚段的个数(早期版本该参数名字是innodb_rollback_segments),默认128个。每个回滚段可同时支持1024个在线事务。这些回滚段会平均分布到各个undo表空间中。该变量可以动态调整,但是物理上的回滚段不会减少,只是会控制用到的回滚段的个数。
因为在MySQL
5.7中,第一个undo
log永远在系统表空间中,另外32个undo
log分配给了临时表空间。
用于设定创建的undo表空间的个数,在mysql_install_db时初始化后,就再也不能被改动了;默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,例如假定设置该值为4,那么就会创建命名为undo001~undo004的undo
tablespace文件,每个文件的默认大小为10M。修改该值会导致Innodb无法完成初始化,数据库无法启动,但是另两个参数可以修改;
早期版本的命名为innodb_rollback_segments,该变量可以动态调整,但是物理上的回滚段不会减少,只是会控制用到的回滚段的个数;
MySQL5.7.5之后undo表空间可以truncate了。需要配置至少2个undo表空间innodb_undo_spaces=2,undo表空间被删除时临时设置为offline状态,至少有另外一个undo表空间服务才可以让server工作。如果配置成1个undo表空间的话,即使开启truncate也没用,本undo表空间文件会一直增大,甚至撑爆磁盘。
Mysql5.7.5之后版本,set
global
innodb_undo_log_truncate=on开启truncate功能,innodb_max_undo_log_size为undo表空间文件的阈值,默认1G,超过改值,会自动进行truncate。如果不开启truncate则导致undo表空间文件不断增大。
Innodb buffer pool
# The buffer pool has a default size of 128MB (134217728
bytes)
mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|134217728 |
+---------------------------+
# The chunk size is also 128MB (134217728 bytes)
mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|134217728 |
+---------------------------------+
# There is a single buffer pool instance
mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
|1 |
set global tmp_table_size = 256M;
set global