存储引擎
作者:互联网
show engines;
建表时指定InnoDB作为存储引擎,要指定主键,主键也是索引,InnoDB存储引擎按主键建立B+树索引
使用memory引擎时,数据存放在服务端的内存中,重启服务端数据就丢失了
表的引擎是innodb,创建表时,会创建两个文件,frm文件存表结构,ibd文件存数据和索引
SELECT @@default_storage_engine;
第三方的存储引擎:
RocksDB MyRocks TokuDB
压缩比 较高,数据的插入性能高.其他功能和InnoDB差不多.
修改表的存储引擎
alter table t111 engine=innodb;
整理碎片
alter table t111 engine=innodb;
查看非系统库的所有表的存储引擎
select table_schema,table_name ,engine from information_schema.tables where table_schema not in ('sys','mysql','information_schema','performance_schema');
8.3 批量替换zabbix库中 100多张表的存储引擎 由 innodb改为tokudb
select concat("alter table ",table_schema,".",table_name," engine=tokudb;") from information_schema.tables
where table_schema='zabbix';
- InnoDB核心参数的介绍
设置默认的存储引擎
set default_storage_engine=Innodb;
表空间模式(独立或共享表空间)
innodb_file_per_table=1 #1表示为独立表空间
共享表空间文件个数和大小
ibdata1:系统数据字典信息(统计信息),UNDO表空间等数据
ib_logfile0 ~ ib_logfile1: REDO日志文件,事务日志文件。
ibtmp1: 临时表空间磁盘位置,存储临时表
frm:存储表的列信息
ibd:表的数据行和索引
9.1.3 最终结论:
一张InnoDB表= frm+idb+ibdata1
独立表空间迁移
(1)在目标库创建和原表结构一样的空表
(2)将空表的ibd文件删除,然后执行以下语句
alter table city(空表名) discard tablespace;
(3)将原表的ibd文件拷贝到目标库,并且修改权限,将原表重命名为空表名
(4)将原表ibd文件导入
alter table city import tablespace
innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend
"双一" 标准的其中一个 ******
innodb_flush_log_at_trx_commit=1 #该参数控制redo buffer往磁盘刷写的策略,值可以为0,1,2,默认为1
redo buffer往磁盘刷写要经过文件系统的buffer
0 表示每秒往磁盘刷写一次
1 表示每执行一次commit命令,就往磁盘刷写一次,会影响性能
2 表示每执行一次commit命令,redo buffer就往文件系统的buffer刷写一次,操作系统的buffer每秒往磁盘刷写一次
Innodb_flush_method=(O_DIRECT, fsync)
fsync模式(默认模式)下,都经过os buffer
redo日志记录内存数据页的变化,与内存中数据发生变化的时点相同
O_DIRECT模式下(建议模式),buffer pool直接刷写到disk,不经过os buffer
最高安全模式
innodb_flush_log_at_trx_commit=1
Innodb_flush_method=O_DIRECT
最高性能:
innodb_flush_log_at_trx_commit=0
Innodb_flush_method=fsync
redo日志设置有关的
innodb_log_buffer_size=16777216
innodb_log_file_size=50331648
innodb_log_files_in_group = 3
脏页刷写策略
innodb_max_dirty_pages_pct=75
还有哪些机制会触发写磁盘?
CSR
redo满了
10.2.2 事务日志-- redo 重做日志
作用?
主要功能 保证 "D" , A C 也有一定得作用
(1)记录了内存数据页的变化.
(2)提供快速的持久化功能(WAL),持久化
(3)CSR过程中实现前滚的操作(磁盘数据页和redo日志LSN一致)
redo日志位置
redo的日志文件:iblogfile0 iblogfile1
redo buffer
redo的buffer:数据页的变化信息+数据页当时的LSN号
10.2.3 undo
回滚日志.
作用: 在 ACID特性中,主要保证A的特性,同时对CI也有一定功效
(1)记录了数据修改之前的状态
(2)rollback 将内存的数据修改恢复到修改之前
(3)在CSR中实现未提交数据的回滚操作
标签:存储,buffer,引擎,innodb,table,日志,redo,刷写 来源: https://www.cnblogs.com/landson/p/15893545.html