系统表空间是MySQL Server进行相关操作的公共表空间,其主要内容包括:
相关参数
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend
innodb_file_per_table = ON
现在的MySQL版本已经可以实现自动扩展表空间,其中innodb_file_per_table默认是开启的,表示为每一张新建的表创建表空间,这样可以避免ibdata1过于庞大。
数据字典
数据字典是由各种表对象的元数据信息(表结构,索引,列信息等)组成的内部表。
Double Write Buffer
InnoDB从buffer pool中取数据并写到数据文件中前的buffer区域,其也存在于tablespace中,主要是防止mysqld进程意外崩溃,导致数据丢失,一旦崩溃则可以从Double Write Buffer中恢复。
REDO logs
用于崩溃恢复,当mysqld启动时,InnoDB会根据REDO log自动恢复由不完整事务修改的数据,哪怕没有建立任何连接,mysqld崩溃前的没有更新完整的数据都会被replay,其实现基于LSN(Log Sequence Number),数据落盘前都会先写REDO log.
UNDO表空间用于存放一个或多个UNDO log文件。UNDO通过保留活动事务(MVCC)的已修改未提交数据来保证读一致性。 从此存储区域检索未修改的数据。UNDO log也称为回滚段。默认情况下,UNDO表空间是系统表空间的一部分,当然从MySQL5.6开始也允许用户自定义一个UNDO表空间,需要注意的是:
innodb_undo_tablespace : Number of undo tablespaces, default 0 , max 95
innodb_undo_directory : Location for undo tablespace,default is data_dir with 10MB initial size.
innodb_undo_logs : Number of undo logs in a single undo tablespace, default and max value is ‘128’ [ Deprecated in 5.7.19 , innodb_rollback_segments variable will control this]
innodb_undo_log_truncate: truncate undo tablespace, Default OFF
保存和检索临时表已修改未提交的数据和相关的对象,始于MySQL5.7.2,server运行时用于回滚临时表的修改。
innodb_temp_data_file_path = ibtmp1:12M:autoextend (default)
用户定义表空间,用户可以用CREATE TABLESPACE的语法来创建自定义的表空间,并在创建表的时候指定该表所属的表空间。
优点:
innodb_file_per_table
更有存储上(Memory)的优势#DATA STORAGE datadir=/var/lib/mysql #InnoDB Configuration innodb_file_per_table=1 #InnoDB Memory innodb_buffer_pool_size = 2000M #System Tablespace configuration innodb_data_file_path= ibdata1:512M;ibdata2:512M:autoextend #Redo log and buffer configuration innodb-log-files-in-group=3 innodb_log_file_size=100M innodb_log_buffer_size=30M #InnoDB file formate innodb_file_format = Barracuda #UNDO Tablespace Configuration innodb_undo_directory = /var/lib/mysql/ innodb_undo_tablespaces = 3 innodb_undo_logs = 128 innodb_undo_log_truncate = ON innodb_rollback_segments = 128 #Temp Tablespace Configuration tmpdir = /var/lib/mysql/ innodb_temp_data_file_path = ibtmp1:20M:autoextend #tablespace 数据加密插件,在Enterprise版本中提供 #Keyring configuration early-plugin-load=keyring_file.so keyring_file_data=/var/lib/mysql-keyring/keyring
|-mysql_parse ()
|-mysql_execture_command ()
|-Sql_cmd_create_tablespace::execute ()
|-innobase_alter_tablespace ()
|-innobase_create_tablespace ()
|-dict_build_tablespace () //创建逻辑tablespace对象
|-fil_ibd_create () //创建tablespace.ibd文件
|-fsp_header_init_fields () //将tablespace id等信息写入文件头
|-Sql_cmd_create_table::execute ()
|-mysql_create_table ()
|-mysql_create_table_inner ()
|-mysql_create_table_no_lock ()
|-create_table_impl ()
|-rea_create_base_table ()
|-ha_create_table ()
|-ha_innobase::create ()
|-innobase_basic_ddl::create_impl ()
|-create_table_info_t::create_table ()
|-create_table_info_t::create_table_def ()
|-row_create_table_for_mysql ()
|-dict_build_table_def ()
|-dict_build_tablespace_for_table ()
|-fil_ibd_create ()
|-fsp_header_init_fields ()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。