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 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31480688/viewspace-2653932/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TABLESPACE】Oracle 表空間結構說明Oracle
- 使用說明
- FreeSql 使用說明SQL
- postman 使用說明Postman
- QLExpress使用說明Express
- WebApiClientCore使用說明WebAPIclient
- Jupiter 使用說明
- certbot 使用說明
- cmake使用說明
- ApplicationContextAware使用說明APPContext
- oradebug的使用說明
- axios使用說明書iOS
- wc 命令使用說明
- oracle orapwd使用說明Oracle
- JPA EntityManager使用說明
- markdown使用小說明
- C# BitmapData使用說明C#
- jarsigner 簡單使用說明JAR
- OpenGrok簡單使用說明
- cityAreaSelect.js使用說明JS
- 微前端說明以及使用前端
- JavaScript の querySelector 使用說明JavaScript
- Docker 使用者操作使用說明Docker
- DataTables表格外掛使用說明
- mysql支援原生json使用說明MySqlJSON
- Kibana安裝及使用說明
- GoldenGate HANDLECOLLISIONS引數使用說明Go
- DataLakeAnalytics中OSSLOCATION的使用說明
- 關於 Jupyter 的使用說明
- scapy函式 IP() 使用說明函式
- 舉例說明如何使用WebSQL?WebSQL
- 說明
- [Android開源框架]RxHttp使用說明Android框架HTTP
- Windows linux子系統 使用說明WindowsLinux
- PHP 有限狀態機使用說明PHP
- mydumper和myloader引數使用說明
- RedisTemplate常用集合使用說明-opsForZSet(六)Redis
- RedisTemplate常用集合使用說明-boundSetOps(九)Redis