其他分享
首页 > 其他分享> > 存储引擎

存储引擎

作者:互联网

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';

  1. 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