• ADADADADAD

    mysql5.7 General tablespace使用说明[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:13:04

    作者:文/会员上传

    简介:

    General tablespaceGeneral tablespace是一种共享的innodb表空间,有点类似ibdata1。可以在一个表空间数据文件下存储多张表,即使这些表来自不同的schame。General tablespace

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    General tablespace

    General tablespace是一种共享的innodb表空间,有点类似ibdata1。可以在一个表空间数据文件下存储多张表,即使这些表来自不同的schame。

    General tablespace的优点

    类似系统表空间,可以存储多个schema下的多张表。

    与file_per_table tablespace相比,General tablespace有潜在的内存的优点。这种方式存储表空间的元数据到内存中,可以减小内存消耗。

    General tablespace可以将数据文件存在其它盘上。这样做的好处是,比如说我需要将几张热点表放到更快的存储盘上,就可以在更快的存储盘上创建general tablespace,将热点表放过去。

    General支持所有的行格式,以及相关特性。

    数据表可以在general tablespace和per_file_table tablespace 之间来回移动。类似Oracle数据库的move table。

    创建general tablespace的语法

    CREATE TABLESPACE tablespace_name

    ADD DATAFILE 'file_name'

    [FILE_BLOCK_SIZE = value]

    [ENGINE [=] engine_name]

    注意为了避免data directory冲突,表空间建立在data directory子目录下是不被支持的。因为datadir子目录会被mysql认为是database。但是general tablespace可以建立在datadir下。General tablespace建立在非datadir目录下后,data directory 下会产生一个.isl文件,里面是详细路径。

    例如在datadir下面建一个general tablespace,page_size是8k,默认引擎innodb:

    mysql> create tablespace tbs01 adddatafile 'tbs01.ibd' file_block_size=8192 engine=innodb;

    Query OK, 0 rows affected (0.02 sec)

    mysql> create tablespace tbs02 adddatafile '/u01/mysql/3306/general_tbs/tbs02.ibd' engine=innodb;

    Query OK, 0 rows affected (0.01 sec)

    Isl其实是路径:

    [root@oradb-2062 data]# more tbs02.isl

    /u01/mysql/3306/general_tbs/tbs02.ibd

    Information_schema下的INNODB_SYS_TABLESPACES表有这些表空间的元数据信息:

    mysql> selectspace,name,FLAG,FILE_FORMAT,PAGE_SIZE,SPACE_TYPE,FILE_SIZE,ALLOCATED_SIZEfrom INNODB_SYS_TABLESPACES where name like 'tbs%'\G

    *************************** 1. row***************************

    space: 61

    name: tbs01

    FLAG: 2089

    FILE_FORMAT: Barracuda

    PAGE_SIZE: 16384

    SPACE_TYPE: General

    FILE_SIZE: 65536

    ALLOCATED_SIZE: 16384

    *************************** 2. row***************************

    space: 63

    name: tbs02

    FLAG: 2048

    FILE_FORMAT: Any

    PAGE_SIZE: 16384

    SPACE_TYPE: General

    FILE_SIZE: 65536

    ALLOCATED_SIZE: 32768

    2 rows in set (0.00 sec)

    General表空间的使用

    Tbs01建表空间时指定FILE_BLOCK_SIZE=8k

    Tbs02建表空间时没有指定FILE_BLOCK_SIZE

    FILE_BLOCK_SIZE只有在存储压缩表的时候才能在建表空间的时候使用。否则建非压缩表会报错。也就是说压缩表和非压缩表无法在同一个表空间中。

    mysql> create table tt(a int)tablespace=tbs01;

    ERROR 1478 (HY000): InnoDB: Tablespace`tbs01` uses block size 8192 and cannot contain a table with physical pagesize 16384

    建压缩表是可以的。

    mysql> create table tt(a int) tablespace=tbs01 ROW_FORMAT=COMPRESSED;

    Query OK, 0 rows affected (0.02 sec)

    同样地,也不能在tbs02中建压缩表

    mysql> create table tt01(a int)tablespace=tbs02 ROW_FORMAT=COMPRESSED;

    ERROR 1478 (HY000): InnoDB: Tablespace`tbs02` cannot contain a COMPRESSED table

    mysql> create table tt01(a int)tablespace=tbs02;

    Query OK, 0 rows affected (0.01 sec)

    将表空间中到的表移动到file_per_table tablespace。

    mysql> alter table tttablespace=innodb_file_per_table;

    Query OK, 0 rows affected (0.06 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> alter table tt01tablespace=innodb_file_per_table;

    Query OK, 0 rows affected (0.04 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    将一张250万的表从file_per_table tablespace移动到general tablespace

    mysql> alter table test02tablespace=tbs02;

    Query OK, 0 rows affected (9.41 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    花了9秒多,说明这种移动大表还是很花时间的。

    附,将表移动到系统表空间

    ALTER TABLE test01 TABLESPACE innodb_system;

    删除表空间,注意表空间中有表的时候不能删除成功。

    mysql> drop tablespace tbs02;

    ERROR 1529 (HY000): Failed to dropTABLESPACE tbs02

    General tablespace的限制

    General tablespace不支持临时表。

    与系统表空间类似,truncate或drop table只是标记空间为可用,但是不会还给操作系统。

    MySQL 5.7.24版本及之后的版本,不在支持将分区放到general tablespace中去了。

    ALTER TABLE ... DISCARD TABLESPACE and ALTER TABLE ...IMPORT TABLESPACE不支持general tablespace。

    mysql5.7 General tablespace使用说明.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载