MYSQL的系统数据表空间,用户数据表空间,系统临时表空间,用户临时表空间详解

2023-11-02

系统数据表空间:
系统表空间可以有一个或多个数据文件。默认情况下,会在数据目录中创建一个名为ibdata1的系统表空间数据文件 。系统表空间数据文件的大小和数量由innodb_data_file_path启动选项定义。

mysql> show variables like '%innodb_data%';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| innodb_data_home_dir  |                        |
+-----------------------+------------------------+
2 rows in set (0.02 sec)

它里面存储的有:

InnoDB 表元数据
doublewrite buffer
change buffer
undo logs

1.InnoDB 表元数据:  只读的表,存储对象的相关信息,如占用空间,列的缺省值,约束信息,用户名,权限,审计信息等; 虽 然 InnoDB 表 元 数 据 通 过 information_schema.tables 来 读 取 , 但 是 实 际 上
information_schema 是一个虚拟数据库,并不物理存在,这些数据真正存放的地方就是 ibdata1

2.双写缓冲区 Double write buffer:; Innodb写入数据默认是16k/pages为一个单位写入,而磁盘是4k/page一个单位,为了防止写入一半,断电无法恢复数据的情况发生,引入了double writer buffer机制;double write buffer是一段连续空间,大小2M(128 page),数据写入的时候先写到doublewrite空间,然后再写入到磁盘,如果发生写入了一个page一半的时候断电,恢复后会自动从doublewrite中恢复;
3.插入缓冲区INSERT BUFFER:针对辅助索引(非unique),插入数据的时候,先将插入的数据在buffer中根据辅助索引叶子节点的Page_no排序,而后按照Page_no分批次插入,提高性能;
4.undo log;用于记录事物变更前的状态,如果未commit,其他session可以查看到变更前状态


用户数据表空间:
由 innodb_file_per_table 参数定义。启用后(innodb_file_per_table=1),InnoDB 可以在 file-per-table 表空间中创建表,存储在表名相同的ibd和frm文件中,这样新创建的数据库表都单独的表空间文件。该参数在 MySQL 5.6.7 及更高版本已经默认启用了。

临时表空间
非压缩的、用户创建的临时表和磁盘上产生的内部临时表都是存储在共享的临时表空间存储的,可以通过配置参数 innodb_temp_data_file_path 来定义临时表空间数据文件的路径、名称、大小和属性,如果没有指定,默认是在数据目录下创建一个名为 ibtmp1的大于 12M 的自动扩展数据文件。

mysql> show variables like '%innodb_temp%';
+----------------------------+-----------------------+
| Variable_name              | Value                 |
+----------------------------+-----------------------+
| innodb_temp_data_file_path | ibtmp1:12M:autoextend |
+----------------------------+-----------------------+
1 row in set (0.01 sec)

mysql> show variables like '%innodb_tmp%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| innodb_tmpdir |       |
+---------------+-------+
1 row in set (0.00 sec)

那MYSQL用户可以自己创建自定义的表空间吗?可以:

CREATE TABLESPACE myspacetest ADD DATAFILE 'myspacetest.ibd' ENGINE=InnoDB;
CREATE TABLE mytable ( id INT PRIMARY KEY ) TABLESPACE myspacetest;
mysql> insert into mytable value(34);
Query OK, 1 row affected (0.01 sec)

查看已存在的表空间和对于的文件:
mysql> select TABLESPACE_NAME,FILE_NAME  from information_schema.FILES;
+--------------------------+---------------------------------------+
| TABLESPACE_NAME          | FILE_NAME                             |
+--------------------------+---------------------------------------+
| innodb_system            | ./ibdata1                             |
| innodb_file_per_table_30 | ./mysql/Course.ibd                    |
| innodb_file_per_table_32 | ./mysql/SC.ibd                        |
| innodb_file_per_table_31 | ./mysql/Student.ibd                   |
| innodb_file_per_table_20 | ./mysql/engine_cost.ibd               |
| innodb_file_per_table_18 | ./mysql/gtid_executed.ibd             |
| innodb_file_per_table_5  | ./mysql/help_category.ibd             |
| innodb_file_per_table_7  | ./mysql/help_keyword.ibd              |
| innodb_file_per_table_6  | ./mysql/help_relation.ibd             |
| innodb_file_per_table_4  | ./mysql/help_topic.ibd                |
| innodb_file_per_table_14 | ./mysql/innodb_index_stats.ibd        |
| innodb_file_per_table_13 | ./mysql/innodb_table_stats.ibd        |
| innodb_file_per_table_2  | ./mysql/plugin.ibd                    |
| innodb_file_per_table_19 | ./mysql/server_cost.ibd               |
| innodb_file_per_table_3  | ./mysql/servers.ibd                   |
| innodb_file_per_table_16 | ./mysql/slave_master_info.ibd         |
| innodb_file_per_table_15 | ./mysql/slave_relay_log_info.ibd      |
| innodb_file_per_table_17 | ./mysql/slave_worker_info.ibd         |
| innodb_file_per_table_9  | ./mysql/time_zone.ibd                 |
| innodb_file_per_table_12 | ./mysql/time_zone_leap_second.ibd     |
| innodb_file_per_table_8  | ./mysql/time_zone_name.ibd            |
| innodb_file_per_table_10 | ./mysql/time_zone_transition.ibd      |
| innodb_file_per_table_11 | ./mysql/time_zone_transition_type.ibd |
| innodb_file_per_table_38 | ./mytest/t1.ibd                       |
| innodb_file_per_table_21 | ./sys/sys_config.ibd                  |
| innodb_temporary         | ./ibtmp1                              |
| innodb_file_per_table_43 | ./mysql/employee.ibd                  |
| innodb_file_per_table_44 | ./mysql/employee1.ibd                 |
| myspacetest              | ./myspacetest.ibd                     |
+--------------------------+---------------------------------------+

那MYSQL可以在系统表空间里创建表吗?可以,实际上innodb_file_per_table没打开的情况下,默认会把表建在ibdata1里


mysql> CREATE TABLE mytable1 ( id INT PRIMARY KEY ) TABLESPACE innodb_system;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into mytable1 values(23);
Query OK, 1 row affected (0.00 sec)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL的系统数据表空间,用户数据表空间,系统临时表空间,用户临时表空间详解 的相关文章

  • LiveSQL 不断向我显示:ORA-00933:SQL 命令未正确结束[重复]

    这个问题在这里已经有答案了 INSERT INTO Countries Country Capital Cities VALUES Philippines Manila 122 USA Washington 19495 Brazil Bra
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • Oracle 语法 - 我们是否必须在新旧语法之间进行选择?

    我在一个由大约 8 名开发人员组成的团队中负责大约 1 000 000 行源代码的代码库 我们的代码基本上是一个使用 Oracle 数据库的应用程序 但代码随着时间的推移而不断发展 我们有大量九十年代中期的源代码 团队中就我们用于查询 Or
  • 删除连接到另一表 SQL 的一个表中的记录

    我有两个表 一个包含 212 000 条记录 已弃用的记录 另一个包含 10 500 000 条记录 我想在 id 和 version number 字段上连接两个表 因为两个表都有这些字段 我希望从连接表中删除匹配的记录 来自连接表 即从
  • OracleDataSource.getConnection 是线程安全的吗?

    我以为找到这个答案很容易 但并不是那么容易 有谁知道 OracleDataSource getConnection 方法是否是线程安全的 我不是指它返回的 Connection 对象 而是指 getConnection 本身的调用 具体来说
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 同一表中同一列的 SQL 完全外连接

    这可能更多的是一个设计问题 但我希望这在没有太多巫术的情况下是可能的 假设我有一个这样的表 SELECT FROM stuff id grp 1 a 2 a 3 a 1 b 2 b 4 b 我想要得到这样的东西 ID 按列分组 a id b
  • 如何创建从表中最大值开始的 Oracle 序列?

    尝试在 Oracle 中创建一个以特定表中的最大值开始的序列 为什么这不起作用 CREATE SEQUENCE transaction sequence MINVALUE 0 START WITH SELECT MAX trans seq
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经
  • sql - oracle - 选择特定组/sku的第一条和最后一条记录

    我一直在尝试寻找答案 但没有成功 需要得到 首次购买的价格和最后一次购买的价格并按 SKU 分组 查询结果应该是这样的 sku first purchase price Last purchase price BC123 3 09 6 68
  • 关闭连接时 JDBC 事务回滚失败

    如果在提交期间与数据库资源的连接丢失 这可能会导致提交失败 然后回滚失败 是否有可能事务已部分提交 这似乎发生在我的案例中 但希望社区能更清楚地说明这一点 HibernateTransactionManager 和 Oracle 与 JDB
  • SQL在单个命令中在表中添加列和注释

    我的 Web 应用程序使用 Oracle 11g 我想向现有表添加列和注释 我可以使用以下命令轻松做到这一点 ALTER TABLE product ADD product description VARCHAR2 20 and COMME
  • 为什么oracle中的select语句不能执行存储过程?有什么强有力的理由吗?

    create or replace procedure pr is v date date begin select sysdate into v date from dual DBMS output put line v date end
  • 如何根据 Oracle 中的动态列表检查 IN 条件?

    编辑 更改标题以适合下面的代码 我试图从 Oracle 表中检索可接受值的列表 然后对另一个表执行 SELECT 同时将某些字段与所述列表进行比较 我试图用光标来做到这一点 如下所示 但是失败了 DECLARE TYPE gcur IS R
  • cx_Oracle 和数据源范例

    有一个 Java 范例用于在 Java 中实现数据库访问DataSource 该对象围绕数据库连接的创建创建了一个有用的抽象 这DataSource对象保留数据库配置 但只会根据请求创建数据库连接 这允许您将所有数据库配置和初始化代码保留在
  • java应用程序中与oracle的连接

    我已经下载了 oracle express 11g 版本并安装了它 现在我想从 java 应用程序连接它 这是我的连接代码 Class forName oracle jdbc driver OracleDriver newInstance
  • 无法加入交易

    我有问题 我已经在 Windows 中设置了 1 个 sql 服务器 SQL Server 2014 Express 并在另一台服务器的 Linux 中设置了 1 个 Oracle 数据库服务器 11g 现在我想通过链接服务器将数据从SQL
  • 如何以合理的方式使用 Oracle 驱动程序的日志记录来记录 UPDATE 语句?

    我想记录我的应用程序发出的所有 SQL 所以我确切地知道它在做什么 我已经根据以下内容为 Oracle 设置了 Java Util Logging这个答案 https stackoverflow com a 40491028 216353
  • oracle中有没有相当于sp_getapplock、sp_releaseapplock的

    我需要能够在 Oracle 中的会话级别 事务范围之外 使用自定义锁 在 MSSQL 中 我使用 sp getapplock sp releaseapplock 如何在 Oracle 中实现相同的功能 DBMS LOCK 包 这将做你想做的
  • 通用 Oracle 数据收集存储

    我正在设计一个新的实验室数据库 我想将所有测试的原始结果存储在一起 在某些情况下 结果是单个值 然而 结果有时是原始波形或信号 下面哪种情况是理想的 以及为什么 或提供您自己的理想选择 选项 1 将每个单独的数据点存储为单独的结果行 距 t

随机推荐

  • UPC--扑克牌

    题目描述 从一副含有n n 10000 张的扑克牌 显然每张扑克牌都不相同 中 分给m m 100 个人 第i个人得到ai 0 ai 100 张牌 求一共有几种分法 这个数可能非常大 请输出此数模10007后的结果 输入 第一行两个整数 为
  • HDU1874 单源最短路经 dijkstra或者floyd

    include
  • 3、域渗透详解

    在渗透测试过程中 我们经常会遇到以下场景 某处于域中的服务器通过路由做端口映射 对外提供web服务 我们通过web脚本漏洞获得了该主机的system权限 如果甲方有进一步的内网渗透测试需求 以证明企业所面临的巨大风险 这个时候就需要做内网的
  • 模拟IC应届生都这么牛,我想到了崩溃

    再过两个月就到学弟学妹找工作的高峰期了 做为一个2007年的毕业生 能为学弟学妹做的 就是把我去年到今年找工作的经历和经验与他们分享 希望大家都能找到合适的工作 因为本人是模拟ic设计方向的 所以只能介绍些模拟ic设计方面的找工作经验 其实
  • SVM如何避免过拟合

    过拟合 Overfitting 表现为在训练数据上模型的预测很准 在未知数据上预测很差 过拟合主要是因为训练数据中的异常点 这些点严重偏离正常位置 我们知道 决定SVM最优分类超平面的恰恰是那些占少数的支持向量 如果支持向量中碰巧存在异常点
  • pyside6中QcommandLinkButton 控件qss有哪些用法和案例

    QCommandLinkButton 是 Qt GUI 框架中的一个功能按钮类 而 Qt Style Sheets QSS 提供了一种强大的方式来自定义 Qt 控件的外观 以下是 QCommandLinkButton 常用的 QSS 用法
  • 比亚迪半导体IPO再生波折:又被中止审核 红杉小米是股东

    雷递网 雷建平 4月1日报道 2022年1月底刚刚过会的比亚迪半导体上市再生波折 于2022年3月31日的审核再度被中止 这不是比亚迪半导体IPO审核第一次被深交所中止 2021年8月8日 因律师北京市天元律师事务所被中国证监会立案调查 比
  • [从零开始学DeepFaceLab-16]: 使用-命令行八大操作步骤-第6步:模型的选择与训练 - 进阶 - SAEHD模型训练参数详解与优化

    目录 前言 第1章 SAEHD模型训练参数详解 1 1 SAEHD参数汇总 默认 1 2 参数详解
  • 手把手教你:解决python UnicodeDecodeError: 'gb2312' codec can't decode问题

    问题 UnicodeDecodeError gb2312 codec can t decode bytes in position 2 3 illegal multibyte sequence 原因 python在做将普通字符串转换为uni
  • 【Github Action】使用ssh-deploy上传文件的小坑

    可以使用这个Github Action上传文件到服务器 https github com easingthemes ssh deploy README中描述了使用方法 name Deploy to Staging server uses e
  • FastAPI从入门到实战(13)——常见配置项

    这一部分的内容主要是一些常见的配置 包括路由 静态文件等 还包括一些路径和文档的修饰器 包括简介 标签参数等内容 配置静态文件 from fastapi import FastAPI from fastapi staticfiles imp
  • jvisualvm ssl远程连接JVM

    jvisualvm 远程ssl连接 文章目录 一 没认证的 JMX连接 不安全 二 SSL证书认证的JMX连接 安全 1 进入生成证书的目录 并执行脚本 2 一键生成密钥脚本 3 服务器端运行jar包时 开启ssl连接 4 客户端远程SSL
  • AR小项目的制作过程(一)

    前段时间一直想着初一个教程 怎么用unity去做一个AR小demo 在做之前先科普一下什么是AR AR技术也被称作是 增强现实 主要是一种将虚拟信息与真实世界巧妙融合的技术 现在光返的运用在很多方面 例如多媒体 3D建模 实时跟踪及注册 智
  • 如何在CentOS 8上使用firewalld设置防火墙

    介绍 Introduction firewalld is firewall management software available for many Linux distributions which acts as a fronten
  • JVM内存结构与内存模型

    JVM内存结构 前言 java开发人员不像C C 开发人员那样需要自己来管理内存 每一个对象从出生到死亡都需要由开发人员来管理 对于初级开发人员来说很容易出现内存问题 而java开发人员就很 幸运 了 内存的管理几乎全部交给JVM虚拟机来管
  • php 操作系统之间的一些黑魔法(绕过文件上传a.php/.)

    http wonderkun cc index html p 626 0x00 前言 做了一个CTF题目 遇到了一些有趣的东西 所以写了这篇文章记录了一下 但是我却不明白造成这个问题的原因在哪里 所以不知道给文章起什么标题 就姑且叫这个非常
  • 汇总

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 汇总图像语义分割那些质量最好的数据集与常用benchmark数据集 前言 图像语义分割是计算机视觉最经典的任务之一 早期的图像分割主要有以下几种实现方法 基于像素分布的分
  • 4.3、Flink任务怎样读取Kafka中的数据

    目录 1 添加pom依赖 2 API使用说明 3 这是一个完整的入门案例 4 Kafka消息应该如何解析 4 1 只获取Kafka消息的value部分 4 2 获取完整Kafka消息 key value Metadata 4 3 自定义Ka
  • 我读zookeeper源码系列1

    一 准备工作 1 zookeeper版本 01 zookeeper 3 4 x 企业最常用 大数据技术组件最常用 基本维持在 3 4 5 3 4 6 3 4 7 这几个版本 02 zookeeper 3 5 x 03 zookeeper 3
  • MYSQL的系统数据表空间,用户数据表空间,系统临时表空间,用户临时表空间详解

    系统数据表空间 系统表空间可以有一个或多个数据文件 默认情况下 会在数据目录中创建一个名为ibdata1的系统表空间数据文件 系统表空间数据文件的大小和数量由innodb data file path启动选项定义 mysql gt show