ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

存储引擎

2022-02-14 17:49:54  阅读:206  来源: 互联网

标签:存储 buffer 引擎 innodb table 日志 redo 刷写


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有