汕头seo网站推广,网站正在建设中空白模板,加盟招商推广网站,手写签名设计免费版在线目录
一、物理存储结构
二、表空间
1.数据表空间介绍
2.数据表空间迁移
3.共享表空间
4.临时表空间
5.undo表空间
三、InnoDB内存结构
1.innodb_buffer_pool
2.innodb_log_buffer
四、InnoDB 8.0结构图例
五、InnoDB重要参数
1.redo log刷新磁盘策略
2.刷盘方式控制buffer pool和redo buffer数据和日志刷写到磁盘的方式 一、物理存储结构 table.frm存储数据字典信息列定义table.ibd表空间数据文件存数据行和索引有段-区-页的概念ibdata1 5.7版本--系统表空间文件存储 data dictionary存所有表的数据字典结构属性状态参数... double write自动故障恢复应用到的数据 change buffer存储辅助索引的变更 undo存储日志的回滚信息日志 ibtmp临时表存储SQL存储过程中的中间数据groupby、having、join、union 用户数据 5.6版本--除了以上内容还会放临时表 8.0版本--ibdata中只放change buffer其他的都被拆解成其他文件了 ib_logfileNredo log 用于重做日志存储事务的前滚日志、内存数据页的变化ibtmp1 临时表存储SQL存储过程中的中间数据groupby、having、join、union ib_buffer_pool内存预热文件用于在内存中存放热数据 二、表空间
1.数据表空间介绍 在数据库引擎层加入的逻辑存储结构来实现灵活的存储空间扩容 在5.6版本后默认采取独立表空间的模式每张表都是独立的表空间t1.ibd 共享表空间ibdata1保留下来只保存系统相关的数据 查询当前表空间select innodb_file_per_table; 2.数据表空间迁移 1停止相关业务 lock tables city read 2在目标库创建同样的表 3将目标库新表的ibd删除 alter table city discard tablespace; 4迁移ibd至目标库新表 cp /data/3306/data/world/city.ibd /data/3357/data/world 5修改权限 chown -R mysql.mysql city.ibd 6导入表空间 alter table city import tablespace; 7解锁业务 unlock tables;
3.共享表空间 1查询参数selectinnodb_data_file_path 2设置共享表空间 第一步修改配置文件vim /etc/my.cnf 初始化之前设置 innodb_data_file_pathibdata1:1024M;ibdata2:1024M;ibdata3:1024M:autoextend; 初始化之后设置 innodb_data_file_pathibdata1:(当前文件)M;ibdata2:1024M;ibdata3:1024M:autoextend; 第二步重启数据库
4.临时表空间 设置 innodb_temp_data_file_pathibtmp1:12M;ibtmp2:120M:autoextend:max:500M
5.undo表空间
如何查看 select innodb_undo_tablespaces; 一般在初始化的时候设置为3-5个 select innodb_max_undo_log_size; undo日志的大小默认1G 重启后可设置 select innodb_undo_log_truncateon 开启undo自动回收的机制 select innodb_purge_rseg_truncate_frequency 触发自动回收的条件单位是检测次数
如何设置 innodb_undo_tablespaces3 innodb_max_undo_log_size128M innodb_undo_log_truncateon innodb_purge_rseg_truncate_frequency 32次 三、InnoDB内存结构
1.innodb_buffer_pool select innodb_buffer_pool_size innodb最大的内存区域建议设置在物理内存的70%以下 作用缓冲数据页索引页数据字典AHI自适应hash索引change bufferDW
2.innodb_log_buffer select innodb_log_buffer_size 用来存储内存数据页的变化数据修改完成之后会将日志写入到磁盘日志文件中ib_logfileN 四、InnoDB 8.0结构图例 五、InnoDB重要参数
1.redo log刷新磁盘策略 innodb_flush_log_at_trx_commit0/1/2
0 每秒刷新redo buffer到os cache然后fsync到磁盘 资源消耗大 1 每次commit时刷新redo buffer到os cache立即fsync到磁盘 默认值在事务提交时立即刷新redo buffer到日志文件中能够真正保证持久性 2 每次commit时刷新redo buffer到os cache每秒钟fsync到磁盘 如果是边缘业务或者离线业务可以使用有一定风险
2.刷盘方式控制buffer pool和redo buffer数据和日志刷写到磁盘的方式 innodb_flush_method
fsync默认值刷新数据页和redo buffer到磁盘都是先刷到os cache然后再fsync到磁盘O_DIRECT 刷写数据页时跳过os cache直接刷写到磁盘 刷写日志时先刷到os cache然后再fsync到磁盘 建议使用高IO能力的存储配合O_DIRECT因为会对性能有影响