看懂MySQL怎样判断InnoDB表是独立表空间还是共享表空间

本文参考原文-http://bjbsair.com/2020-03-22/tech-info/5348.html
概述
==

InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其进行设置,可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引擎类型的表就会产生一个独立表空间。那么独立表空间有哪些优劣呢?怎么去判断XX表是独立表空间还是共享表空间?


一、独立表空间优缺点

1、优点

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

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

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

4)空间可以回收(除drop table操作处,表空不能自已回收)

  • Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
  • 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
  • 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

2、缺点

单表增加过大,如超过100个G。


二、判别数据表是独立表空间还是共享表空间

1、通过ibd文件判别

如果表的存储引擎是InnoDB,而且表空间(tablespace)是共享表空间的话,那么数据库对应目录下面是没有"表名.ibd"文件的。独立表空间的表的话,则有"表名.ibd"文件。只是这个方法很笨,对于生产环境,大量的表通过这种方式判别,确实不是一个好方法。

--innodb_file_per_table=1  
show variables like 'innodb_file_per_table';  
create table Independent_tablespace(name  varchar(64));  
ls -lrt independent_tablespace.*  
--innodb_file_per_table=0  
show variables like 'innodb_file_per_table';  
create table common_tablespace(name varchar(64));  
ls -lrt independent_tablespace.*
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间

2、INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES判别

MySQL 5.6的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 关于这个系统表提供了有关表格的格式和存储特性,包括行格式,压缩页面大小位级别的信息(如适用),INNODB的表空间信息。

--共享表空间  
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='HWB' AND T.ENGINE='InnoDB';  
--独立表空间  
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='HWB'  AND T.ENGINE='InnoDB';
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间

3、INFORMATION_SCHEMA.INNODB_SYS_TABLES判别(推荐)

MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,不过其值全部为Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single与System 分别表示独立表空间和共享表空间。

--独立表空间  
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='HWB'  AND T.ENGINE='InnoDB';  
  
--共享表空间  
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='HWB' AND T.ENGINE='InnoDB';
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

本文参考原文-http://bjbsair.com/2020-03-22/tech-info/5348/
概述
==

InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其进行设置,可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引擎类型的表就会产生一个独立表空间。那么独立表空间有哪些优劣呢?怎么去判断XX表是独立表空间还是共享表空间?


一、独立表空间优缺点

1、优点

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

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

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

4)空间可以回收(除drop table操作处,表空不能自已回收)

  • Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
  • 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
  • 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

2、缺点

单表增加过大,如超过100个G。


二、判别数据表是独立表空间还是共享表空间

1、通过ibd文件判别

如果表的存储引擎是InnoDB,而且表空间(tablespace)是共享表空间的话,那么数据库对应目录下面是没有"表名.ibd"文件的。独立表空间的表的话,则有"表名.ibd"文件。只是这个方法很笨,对于生产环境,大量的表通过这种方式判别,确实不是一个好方法。

--innodb_file_per_table=1  
show variables like 'innodb_file_per_table';  
create table Independent_tablespace(name  varchar(64));  
ls -lrt independent_tablespace.*  
--innodb_file_per_table=0  
show variables like 'innodb_file_per_table';  
create table common_tablespace(name varchar(64));  
ls -lrt independent_tablespace.*
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间

2、INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES判别

MySQL 5.6的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 关于这个系统表提供了有关表格的格式和存储特性,包括行格式,压缩页面大小位级别的信息(如适用),INNODB的表空间信息。

--共享表空间  
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='HWB' AND T.ENGINE='InnoDB';  
--独立表空间  
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='HWB'  AND T.ENGINE='InnoDB';
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间

3、INFORMATION_SCHEMA.INNODB_SYS_TABLES判别(推荐)

MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,不过其值全部为Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single与System 分别表示独立表空间和共享表空间。

--独立表空间  
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='HWB'  AND T.ENGINE='InnoDB';  
  
--共享表空间  
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='HWB' AND T.ENGINE='InnoDB';
一文看懂MySQL如何判断InnoDB表是独立表空间还是共享表空间

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容