欢迎光临
我们一直在努力

mysql5.7 General tablespace使用说明

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 add   datafile 'tbs01.ibd' file_block_size=8192 engine=innodb; 

Query OK, 0 rows affected (0.02 sec)

mysql> create tablespace tbs02 add   datafile '/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>
select  
space,name,FLAG,FILE_FORMAT,PAGE_SIZE,SPACE_TYPE,FILE_SIZE,ALLOCATED_SIZE
  from 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 page   size 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 tt   tablespace=innodb_file_per_table;

Query OK, 0 rows affected (0.06 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

mysql> alter table tt01   tablespace=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 test02   tablespace=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 drop   TABLESPACE 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


赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。