• 共享表空间 VS 独立表空间


    概念:共享表空间 独立表空间

    【共享表空间】

      又称为system tablespace系统表空间,a small set of data files (the ibdata files) 。

    一、共享表空间ibdata1

    1、数据字典(data dictionary):记录数据库相关信息

    2、doublewrite write buffer:解决部分写失败(页断裂)

    3、insert buffer:内存insert buffer数据,周期写入共享表空间,防止意外宕机

    4、回滚段(rollback segments)

    5、undo空间:undo页

    二、关于ibdata1的增长考虑

      影响共享表空间增长的对象:insert buffer、undo空间

    1、什么时候undo暴涨:

      1、大事务为主,例如修改了40万行才提交

      2、长事务导致的undo持续增加

    2、insert buffer空间很大

      1、索引建立过多

      2、很多索引不怎么使用

      3、索引和主键顺序严重不一致:主键的建立选择有问题

    所以===

      ibdata1使用时要注意:在初始化ibdata1时,最好是设置大一些,避免由于高并发突然暴增,影响性能。

    三、对ibdata的的设置最佳实践

    注意:初始化设置,后期设置就没有意义。

    1、空间大小

      innodb表是按表空间进行存放的,共享表空间ibdata1默认初始化大小是12M。

    mysql> show variables like 'innodb_data_file_path';
    +-----------------------+------------------------+
    | Variable_name         | Value                  |
    +-----------------------+------------------------+
    | innodb_data_file_path | ibdata1:12M:autoextend |
    +-----------------------+------------------------+
    1 row in set, 1 warning (0.47 sec)

      初始化:innodb_data_file_path=ibdata1:10G:ibdata2:10G:autoextend

    2、undo分离

      undo最容易导致ibdata1暴涨,所以需要将undo分离出去,只能在初始化的时候做,初始化之后就没有办法实现undo分离。

    处理:

      在初始化实例之前,只需要设置 innodb_undo_tablespaces 参数,默认是等于0即指单独存放的undo表空间个数为0,也就是undo为分离;建议将该参数设置大于等于3,即可将undo log设置到单独的undo表空间中。

     

    【独立表空间】

    一、innodb_file_per_table=1

      MySQL 5.6.6之前的版本,InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就会让管理感觉很难受,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。

      在之后的版本,为了优化上述问题,独立表空间innodb_file_per_table参数默认开启:

    mysql> show variables like 'innodb_file_per_table';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |
    +-----------------------+-------+
    1 row in set, 1 warning (0.05 sec)

      可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。

    二、独立表空间的性能优越

    1、优点:

      1、每个表都有自已独立的表空间。

      2、每个表的数据和索引都会存在自已的表空间中。

      3、可以实现单表在不同的数据库中移动。

      4、空间可以回收

      5、对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

    2、缺点:

      单表增加比共享空间方式更大。

    3、共享表空间在Insert操作上少有优势,其它都没独立表空间表现好。当启用独立表空间时,合理调整:innodb_open_files(指定InnoDB一次可以保持打开的.ibd文件的最大数目)。

  • 相关阅读:
    MyBatis学习教程
    【转载】Spring MVC 整合 Freemarker
    Java高效编程之四【C语言结构的替代】
    String相关的问题
    接口与抽象类的区别
    Java Garbage Collection基础详解------Java 垃圾回收机制技术详解
    数据库事物、隔离等级及数据库锁机制
    hadoop 多表join:Map side join及Reduce side join范例
    Java IO设计模式彻底分析 (转载)
    傅里叶变换的智慧[转]
  • 原文地址:https://www.cnblogs.com/geaozhang/p/8478976.html
Copyright © 2020-2023  润新知