当前位置: 首页 > 编程日记 > 正文

MySQL如何判别InnoDB表是独立表空间还是共享表空间

 InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其进行设置,可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引擎类型的表就会产生一个独立表空间,独立表空间的命名规则为:表名.idb. 这些单独的表空间文件仅存储该表的数据、索引和插入缓冲BITMAP等信息,其它信息还是存放在共享表空间中,那么如何判别数据库中哪些表是独立表空间,哪些表是共享表空间呢?

方法1:通过ibd文件判别

 

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

 

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)
 
mysql> use MyDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> create table Independent_tablespace(name  varchar(64));
Query OK, 0 rows affected (0.03 sec)
 
mysql> exit
 
[root@DB-Server ~]# cd /data/mysql/MyDB/
[root@DB-Server MyDB]# ls -lrt Independent_tablespace*
-rw-rw---- 1 mysql mysql  8560 Aug 21 22:05 Independent_tablespace.frm
-rw-rw---- 1 mysql mysql 98304 Aug 21 22:05 Independent_tablespace.ibd
[root@DB-Server MyDB]# 

 

在配置文件my.cnf里面设置innodb_file_per_table=0,重启MySQL服务,创建表common_tablespace,你会在数据目录看到只有common_tablespace.frm文件。

 

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
1 row in set (0.00 sec)
 
mysql> use MyDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> create table common_tablespace(name varchar(64));
Query OK, 0 rows affected (0.02 sec)
 
mysql> exit
Bye
[root@DB-Server MyDB]# ls -lrt common_tablespace*
-rw-rw---- 1 mysql mysql 8560 Aug 21 22:08 common_tablespace.frm
[root@DB-Server MyDB]# 

 

方法2:使用INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES来判别。

 

MySQL 5.6

 

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

 

The INNODB_SYS_TABLESPACES table provides metadata about InnoDB tablespaces, equivalent to the information in the SYS_TABLESPACES table in the InnoDB data dictionary.

 

   花了点时间了解了一下INFORMATION_SCHEMA数据库下面的INNODB_SYS_TABLESPACES这个表,遂写了一个SQL来判断那些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='MyDB' AND T.ENGINE='InnoDB';

 

clip_image001[4]

 

不过这个脚本有个小小的bug,对于包含特殊字符的表名,有可能出现错误情况,这个是因为如果表名包含特殊字符,那么文件名或INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中的NAME做了转义处理,如下所示

 

clip_image002[4]

 

独立表空间

 

 
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';

 

clip_image003[4]

 

方法3 :INFORMATION_SCHEMA.INNODB_SYS_TABLES判别

MySQL 5.7

 

     如果是MySQL 5.7的话, 比MySQL 5.6有多了一种方法,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='YourDatabase'  AND T.ENGINE='InnoDB';

 

#共享表空间

SELECT * FROM  INFORMATION_SCHEMA.INNODB_SYS_TABLES
WHERE SPACE_TYPE='System';
 
 
   
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='YourDatabase' AND T.ENGINE='InnoDB'

方法4: INFORMATION_SCHEMA.INNODB_TABLES判别

MySQL 8.0

 

如果是MySLQ 8.0的话,还多了一种方法, 那就是通过INFORMATION_SCHEMA.INNODB_TABLES来判断,这个新增的系统表可以通过SPACE_TYPE字段来区分共享表空间与独立表空间

 

SELECT * FROM  INFORMATION_SCHEMA.INNODB_TABLES WHERE SPACE_TYPE=’Single’;

 

参考资料

 

https://dev.mysql.com/doc/refman/8.0/en/innodb-tables-table.html

https://dev.mysql.com/doc/refman/5.6/en/innodb-i_s-tables.html

https://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tablespaces-table.html#innodb-sys-tablespaces-table-flag-column

https://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tablespaces-table.html

相关文章:

如何使用WindowsLiveWriter发文章

1.下载wlw最新版本http://download.microsoft.com/download/8/0/9/809604cd-bd08-42c8-b590-49c332059e64/writer.msi 2.在菜单中选择“Weblog”,然后选择“Another Weblog Service”。如图一 (图一) 3.在Weblog Homepage URL中输入你的Blog主…

很多学ThinkPHP的新手会遇到的问题

在模板传递变量的时候&#xff0c;很多视频教程都使用$v.channel的方式&#xff0c;如下&#xff1a; <a href"{:U(Chat/set,array(id>$v.channel))}" title"设置" class"btn btn-mini tip"> 这会导致URL在解析的时候出现问题&#xff…

(C++)1040 有几个PAT

#include<cstdio> #include<cstring> const int MOD 1000000007; const int maxn 100010;int main(){char str[maxn];scanf("%s",str);int len strlen(str);//数出每个元素左侧的P的个数int leftnumP[maxn];leftnumP[0] 0;for(int i1;i<len;i){if…

C#进行Visio二次开发之电气线路停电分析逻辑

停电分析&#xff0c;顾名思义&#xff0c;是对图纸进行停电的逻辑分析。在电气化线路中&#xff0c;一条线路是从一个电源出来&#xff0c;连接着很多很多的设备的&#xff0c;进行停电分析&#xff0c;有两个重要的作用&#xff1a;一是看图纸上的Shape元件是否连接正常&…

红芯丑闻揭秘者 Touko 专访 | 关于红芯丑闻的更多内幕……

专栏 | 九章算法 网址 | www.jiuzhang.com ❤ 红芯事件 近日&#xff0c;一则《自主研发的国产浏览器内核&#xff0c;红芯宣布获2.5亿C轮融资》的讯息再次将“国产自主创新”这一话题推向高潮&#xff0c;希冀之声群起。然好景不长&#xff0c;网友Touko在将红芯浏览器的exe文…

数学图形(1.20)N叶草

有N个叶子的草 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 vertices 1000 t from 0 to (2*PI) r 10 n rand_int2(3, 10) p 1 cos(n*t) sin(n*t)^2 x p*cos(t) y p*sin(t) N叶草面_1 vertices D1:5…

(C++)1045 快速排序 非满分

#include<cstdio>const int maxn100010; //思路&#xff0c;从第一个元素开始&#xff0c;假设其是主元&#xff0c;然后用two pointers方法&#xff0c;看有没有进行交换&#xff0c;进行了则不是 int main(){int iszy[maxn]{0};//0表示可以是主元&#xff0c;1表示一定…

android笔记1——开发环境的搭建

Long Long ago...已经成为了历史&#xff0c;我还是要说出一个真相&#xff1a;早年前&#xff0c;那时候&#xff0c;android还不被大众所认知的时候&#xff0c;当然开发人员也没不像如今那样趋于饱和状态。一位大牛前辈&#xff0c;也是我的学长&#xff0c;那时候我还在上大…

XP的几个小问题

一&#xff1a;没有了显示桌面可以用WinD来实现&#xff0c;但是用鼠标习惯了&#xff0c;所以还是让它出现好&#xff1a;点击“开始→运行”&#xff0c;在弹出的“运行”对话框中输入“REGSVR32 /n /i:u shell32”&#xff08;不含双引号&#xff09;&#xff0c;然后回车&a…

使用 SQL Server 的 uniqueidentifier 字段类型

原文:使用 SQL Server 的 uniqueidentifier 字段类型SQL Server 自 2008 版起引入了 uniqueidentifier 字段&#xff0c;它存储的是一个 UUID, 或者叫 GUID&#xff0c;内部存储为 16 个字节。SQL Server 可用两个函数来生成 uniqueidentifier, 分别是 NEWID() 和 NEWSEQUENTIA…

(C++)202012-2 期末预测之最佳阈值 满分

#include<cstdio> #include<algorithm> using namespace std;const int M 100000;struct Student{int score;int res;//0表示挂科&#xff0c;1表示未挂int times;//表示预测正确的次数 int before;//在它之前的0的个数 int after;//在它之后的1的个数 }stus[M10…

javascript之prototype总结常用方法

//去左右空格String.prototype.trim function(){ return this.replace(/^\s*|\s*$/g,);}//去空格添加至数组集合String.prototype.splitrim function(t){ return this.trim().split(new RegExp(\\s*t\\s*)) }test "testing , splitrim ";var arr test.split…

Power Designer逆向工程导入Oracle表,转为模型加注释

1.打开PowerDesigner ——文件——Reverse Engineer——DataBase 2.选择所要连接数据库版本&#xff0c;此处使用的是oracle version 11g。 3.点击红色区域&#xff0c;选择数据源 4.选择modify 5.在此填写你的数据库名称、连接地址、用户名。确定 6.选择你新建立的连接数据库 …

ubuntu修改主机名后无法解析主机

修改完主机名后在执行sudo命令时&#xff0c;会提示sudo: 无法解析主机。在网上搜了下&#xff0c;找到了解决方法&#xff1a;1.sudo vim /etc/hosts找到如下行&#xff1a;127.0.1.1 XXX修改为&#xff1a;127.0.1.1 &#xff08;修改后的主机名&#xff09; 转载于:https://…

(C++)201709-1 打酱油

#include<cstdio> #include<algorithm> using namespace std;//贪心问题&#xff0c;优先级&#xff1a;剩的钱购买5瓶就买5瓶&#xff0c;不够看够不够买三瓶&#xff0c;再不够看够不够买一瓶 int main(){int start,left,num0;//初始的钱&#xff0c;当前剩下的…

【转】实现多行toolTips的类模块

注&#xff1a;本文转自CSDN论坛这里有一个类模块,就是用来实现多行 toolTips 的. Option Explicit Module Name : mdlAPI Written By : Gordon Robinson Date …

POJ 1458

给出两个字符串&#xff0c;求它们最长的公共子字符串长度。 如abfgc acbfefc 最长的公共子字符串为abfc 长度为4 思路&#xff1a;找到s1[i]与s2[j]的时候&#xff0c;相等的话&#xff0c;dp[i1][j1]dp[i][j]1; 不等的话dp[i1][j1]max(dp[i][j1],dp[i1][j]); #include <…

Activity的LaunchMode

在Android中&#xff0c;启动一个Activity有时需要总是创建一个新的对象&#xff0c;有时需要重复使用以后的对象&#xff0c;可以通过在配置activity时通过LaunchMode属性指定。 LaunchMode的属性值&#xff1a; 1、shandard&#xff1a; 标准模式&#xff1a;每次调用startAc…

邻域数、直接密度可达、密度可达、密度相连的概念

例子&#xff1a;如图所示&#xff0c;Eps用一个相应的半径表示&#xff0c;设MinPts3&#xff0c;请分析Q,M,P,S,O,R这5个样本点之间的关系。 易知&#xff0c;P,M,Q,O,SO之间的点,OR之间的点都是核心点 M是从P直接密度可达&#xff0c;Q是从M直接密度可达 Q是从P密度可达(反…

VUE中使用Echarts绘制地图迁移

踩坑说明 很久以前写jsp时使用过echarts的china.js插件&#xff0c;不过echarts是2.0的&#xff0c;目前vue项目中使用echarts3.8.5&#xff0c;直接将china.js插件引入&#xff0c;代码复制&#xff0c;运行一看&#xff0c;GG。地图中央只有一个光溜溜的南海群岛框框&#xf…

关于mysql字符集及导入导出

MySQL字符集设置 • 系统变量&#xff1a;– character_set_server&#xff1a;默认的内部操作字符集– character_set_client&#xff1a;客户端来源数据使用的字符集– character_set_connection&#xff1a;连接层字符集– character_set_results&#xff1a;查询结果字符集…

javascrip 常用属性

1 隐藏控件<div style"dispay:none"><asp:TextBox id"txthiddent" run"server"></asp:TextBox></div>2 页面引用带的<script> </script> EnDate.JS<head><!--#Include File"Js/EnDate.js&q…

数据预处理知识点汇总

(一) 数据清理 a) 缺失值填充 i. 忽略元组 ii. 手工填写 iii. 自动填充 使用属性均值推理出最可能的值&#xff0c;如贝叶斯公式或决策树 b) 去除离群点 i. 聚类 ii. LOF iii. 回归函数拟合数据 c) 噪音(包括错误和离群)处理 i. 分箱光滑 d) 纠正不一致数据 (二) …

Android支付接入(五):机锋网

前边已经陆续跟大家走了一遍运营商和支付宝付费接入&#xff0c;今天跟大家一起看看机锋网的支付接入。事实上付费接入本身并没有太多须要注意的地方&#xff0c;做的多了以后你会发现套路都是大同小异的。而须要注意的地方在于怎么跟游戏兼容及后期的维护&#xff0c;包含增减…

腾讯广告广点通API接入文档(Android)

官方文档地址 如果能够看懂文档的也没有必要再往下面看了。本篇文章就到此结束。 下面记录的是本人在上面锁踩过的坑&#xff0c;因为我发现Mac电脑上面的联系客服不是我想要的。 本来只是内部使用的文档&#xff0c;后来想想还是公开出来&#xff0c;希望能够帮助到人。进入正…

Linux下的下载工具 axel

下载地址&#xff1a;http://wilmer.gaast.net/main.php/axel.html Axel是命令行下的多线程下载工具&#xff0c;支持断点续传&#xff0c;速度通常情况下是Wget的几倍。 下载后使用如下命令编译安装&#xff1a; #tar zxvf axel-1.0a.tar.gz #cd axel-1.0a/ #./con…

集成学习知识点汇总

为啥叫集成学习 结合多个学习器来完成学习任务。 俗话说就是&#xff0c;团结力量大。 个体学习器可以相同可以不同。如果相同叫同质集成&#xff0c;如果不尽相同叫异质集成。 个体学习器最好满足&#xff1a;好而不同。 所谓好(准确性)&#xff0c;就是个体学习器不能太坏&…

hdu 2028 Lowest Common Multiple Plus

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2028 题目大意&#xff1a;求最小公倍数&#xff0c;用辗转相除法。 1 #include <stdio.h>2 int main ()3 {4 int gcd(int a,int b);5 int a,b,n,i,c;6 while (scanf("%d",&n)…

TreeView

6.遍历TreeView节点(递归算法) private void Page_Load(object sender, System.EventArgs e) { GetAllNodeText(TreeView1.Nodes); } void GetAllNodeText(TreeNodeCollection tnc) { foreach(TreeNode node in tnc) { if(node.Nodes.Count!0) GetAllNodeText(node.Nodes); Res…

FZU 2297 Number theory【线段树/单点更新/思维】

Given a integers x 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First line of the input file contains an integer T(0 < T ≤ 10) that indicates how many cases of inputs are there. The description of each case is given below: …