• MySQL Innodb Engine --独立表空间参数(innodb_file_per_table)


    MySQL中参数innodb_file_per_table决定将表存放于ibdata*的共享表空间还是独立的.ibd文件的独立表空间。

    ==================================
    共享表空间方式:
    所有数据和索引都存放在共享表空间中,默认存放在MySQL的data目录下。

    优点:
    可以为共享表空间配置多个数据文件,多个数据文件可以存放到不同磁盘上,将单表数据分布到多个磁盘上。

    缺点:
    如果删除的数据不再数据文件的尾部,则该部分数据所使用的空间只能被重用,而不能被回收。


    ==================================
    独立表空间
    为每个表创建独立的数据文件(frm后缀的表描述文件和ibd数据文件),如果表使用分区则为每个分区创建文件。

    优点:
    1、每个表有独立的表空间来存放其数据和索引。
    2、可以快速实现表在不同数据库间的移动。
    3、对表进行大量删除操作后,能针对该表进行空间回收。
    4、对于TRUNCATE操作能更快完成
    5、能在创建表时指定该表的绝对路径(CREATE TABLE ... DATA DIRECTORY = absolute_path_to_directory)
    6、能对单表进行跨实例或跨服务器迁移或恢复(ALTER TABLE ... DISCARD TABLESPACE + ALTER TABLE ... IMPORT TABLESPACE )

    缺点:
    1、无法充分利用多块存储来提升IO性能。
    2、使用更多的文件描述符
    3、每个表有自己的未使用空间,如管理不当,容易造成空间浪费。
    4、MySQL必须为每个打开的表保留文件句柄,当打开大量表时可能存在性能问题。


    ==================================
    将表从共享表空间迁移到独立表空间:

    SET GLOBAL innodb_file_per_table=1;
    ALTER TABLE table_name ENGINE=InnoDB;

     innodb_file_per_table 参数在MySQL 5.5版本之前修改完需要重启服务才生效,而在MySQL 5.6版本后在线动态修改生效。

    ==================================

    查看共享或独立表空间脚本

    ==================================
    ## Innodb存储引擎表可以使用参数来设置表使用共享表空间还是独立表空间
    show variables like 'innodb_file_per_table';
    
    ==================================
    ##查看使用共享表空间1
    SELECT TABLE_SCHEMA
        ,TABLE_NAME
        ,TABLE_TYPE
        ,N'共享表空间' AS TABLE_SPACE
        ,ENGINE
        ,VERSION
        ,TABLE_ROWS
        ,AVG_ROW_LENGTH
        ,CREATE_TIME
        ,UPDATE_TIME
    FROM INFORMATION_SCHEMA.TABLES  T
    LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    WHERE I.NAME IS NULL  AND T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB';
    
    
    ==================================
    ##查看使用独立表空间2
    SELECT TABLE_SCHEMA
        ,TABLE_NAME
        ,TABLE_TYPE
        ,N'独立表空间' AS TABLE_SPACE
        ,ENGINE
        ,VERSION
        ,TABLE_ROWS
        ,AVG_ROW_LENGTH
        ,CREATE_TIME
        ,UPDATE_TIME
    FROM INFORMATION_SCHEMA.TABLES  T
    INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    WHERE T.TABLE_SCHEMA='MyDB'  AND T.ENGINE='InnoDB';
    
    
    
    ==================================
    ##查看使用独立表空间2
    SELECT * FROM  INFORMATION_SCHEMA.INNODB_SYS_TABLES
    WHERE SPACE_TYPE='Single';
     
     
    SELECT TABLE_SCHEMA
        ,TABLE_NAME
        ,TABLE_TYPE
        ,N'独立表空间' AS TABLE_SPACE
        ,ENGINE
        ,VERSION
        ,TABLE_ROWS
        ,AVG_ROW_LENGTH
        ,CREATE_TIME
        ,UPDATE_TIME
    FROM INFORMATION_SCHEMA.TABLES  T
    INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    WHERE T.TABLE_SCHEMA='YourDatabase'  AND T.ENGINE='InnoDB';
  • 相关阅读:
    自定义sql server 聚合涵数
    EF CodeFirst学习笔记004--足够聪明
    EF CodeFirst学习笔记003--如何创建表
    EF CodeFirst学习笔记002--更新数据库表
    EF CodeFirst学习笔记001--主键约定
    SQL Server 2008中SQL增强之一:Values新用途 001
    SQLServer 学习笔记 序
    设计模式之单例模式
    如何控制数据库表中的某个字段的权限
    利用ResultFilter实现asp.net mvc3 页面静态化
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10480381.html
Copyright © 2020-2023  润新知