MySQL不建议delete删除数据的原因是什么?(一)

开课吧开课吧锤锤2021-03-05 11:36

点赞
有用
分享分享

    Java编程语言是一种简单、面向对象、分布式、解释型、健壮安全、与系统无关、可移植、高性能、多线程和动态的语言。如今Java已经广泛应用于各个领域的编程开发。

    InnoDB存储架构

Java

    从这张图可以看到,InnoDB存储结构主要包括两部分:逻辑存储结构和物理存储结构。

    逻辑上是由表空间tablespace—>段segment或者inode—>区Extent——>数据页Page构成,Innodb逻辑管理单位是segment,空间分配的最小单位是extent,每个segment都会从表空间FREE_PAGE中分配32个page,当这32个page不够用时,会按照以下原则进行扩展:如果当前小于1个extent,则扩展到1个extent;当表空间小于32MB时,每次扩展一个extent;表空间大于32MB,每次扩展4个extent。

    物理上主要由系统用户数据文件,日志文件组成,数据文件主要存储MySQL字典数据和用户数据,日志文件记录的是datapage的变更记录,用于MySQLCrash时的恢复。

    Innodb表空间

    InnoDB存储包括三类表空间:系统表空间,用户表空间,Undo表空间。

    **系统表空间:**主要存储MySQL内部的数据字典数据,如information_schema下的数据。

    **用户表空间:**当开启innodb_file_per_table=1时,数据表从系统表空间独立出来存储在以table_name.ibd命令的数据文件中,结构信息存储在table_name.frm文件中。

    **Undo表空间:**存储Undo信息,如快照一致读和flashback都是利用undo信息。

    从MySQL8.0开始允许用户自定义表空间,具体语法如下:

    CREATETABLESPACEtablespace_name

    ADDDATAFILE'file_name'#数据文件名

    USELOGFILEGROUPlogfile_group#自定义日志文件组,一般每组2个logfile。

    [EXTENT_SIZE[=]extent_size]#区大小

    [INITIAL_SIZE[=]initial_size]#初始化大小

    [AUTOEXTEND_SIZE[=]autoextend_size]#自动扩宽尺寸

    [MAX_SIZE[=]max_size]#单个文件最大size,最大是32G。

    [NODEGROUP[=]nodegroup_id]#节点组

    [WAIT]

    [COMMENT[=]comment_text]

    ENGINE[=]engine_name

    这样的好处是可以做到数据的冷热分离,分别用HDD和SSD来存储,既能实现数据的高效访问,又能节约成本,比如可以添加两块500G硬盘,经过创建卷组vg,划分逻辑卷lv,创建数据目录并mount相应的lv,假设划分的两个目录分别是/hot_data和/cold_data。

    这样就可以将核心的业务表如用户表,订单表存储在高性能SSD盘上,一些日志,流水表存储在普通的HDD上,主要的操作步骤如下:

    #创建热数据表空间

    createtablespacetbs_data_hotadddatafile'/hot_data/tbs_data_hot01.dbf'max_size20G;

    #创建核心业务表存储在热数据表空间

    createtablebooking(idbigintnotnullprimarykeyauto_increment,……)tablespacetbs_data_hot;

    #创建冷数据表空间

    createtablespacetbs_data_coldadddatafile'/hot_data/tbs_data_cold01.dbf'max_size20G;

    #创建日志,流水,备份类的表存储在冷数据表空间

    createtablepayment_log(idbigintnotnullprimarykeyauto_increment,……)tablespacetbs_data_cold;

    #可以移动表到另一个表空间

    altertablepayment_logtablespacetbs_data_hot;

    以上内容由开课吧老师敖丙提供,更多Java教程尽在开课吧广场Java教程频道。

有用
分享