14.7.4 InnoDB File-Per-Table Tablespaces

从历史上看,所有的InnoDB 表和indexes 是存储在system 表空间。

这个整体的方法是针对机器是整个用于数据库处理,精心策划的数据增长,

任何磁盘存储分配给MySQL 不会被其他目的需要.

InnoDB的file-per-table tablespace功能提供一个更加灵活的选择,

每个InnoDB 表和他的索引是存储在一个单独的.ibd文件。

每个这样的.ibd文件代表一个单独的表空间。

这个功能是通过innodb_file_per_table 配置选项,默认启用在5.6.6和更高版本

文件表空间的优势:

1.你可以回收磁盘空间当truncate或者drop 一个表存储在一个 file-per-table tablepace

 Truncating or dropping 表存储在共享的系统表空间创超的空闲空间在系统表空间数据文件内(ibdata files)

这个只能用于InnoDB data

同样, 一个表复制 ALTER TABLE 操作在表上 位于一个共享的tablespace 可以增加空间使用的总量

这样的操作需要额外的空间等同于表和索引的大小。

这个额外的空间需要用于表复制ALTER 操作是不释放回操作系统 

3. TRUNCATE 表操作是快速的在一个表存储在file-per-table tablepaces. 

你可以存储特定的表在单独的存储设备,对于I/O 优化, 空间管理,或者备份目的。

在以前的版本, 你只能移动整个数据库目录到其他设备

和创建软连接在MySQL 数据目录

在MySQL 5.6.6和更高版本,你可以指定每个表的位置使用 CREATE TABLE ... DATA DIRECTORY = absolute_path_to_directory, 

你可以运行OPTIMIZE TABLE 来压缩或者重新创建一个 file-per-table  表空间。

当你运行一个 OPTIMIZE TABLE,  InnoDB 创建一个新的.ibd file 使用一个临时的名字,

只使用需要的空间来存储实际的数据。

当优化器是完成后,InnoDB 删除老的.ibd文件和替换为新的,

如果先前的.ibd文件增长显著 但是实际数据只占用它的大小的一部分,运行OPTIMIZE TABLE可以回收不使用的空间

你可以移动单个InnoDB表相比整个数据库

你可以复制单个InnoDB 表从MySQL 实例到另外的地方

表创建在 file-per-table tablespaces 使用 Barracuda file format.

Barracuda file format 有压缩和动态行格式的功能。

表创建在system 表空间不能使用那些功能。

利用那些功能对于一个存在的表,启用 innodb_file_per_table setting 运行ALTER TABLE t ENGINE=INNODB t

来放置表在一个 file-per-table tablespace.

你可以让更有效的表的存储 使用 BLOB or TEXT columns 使用动态行格式

File-per-table tablespaces 可以改善恢复的机会,当一个corruption 发生时节省时间,

当一个拂去其不能启动时, 或者当备份和binary logs 是不可用时

你可以备份或者恢复单个表使用MySQL Enterprise Backup product, 不需要中断其他InnoDB 表的使用。

这是有益的 如果你的表需要不频繁的备份或者 不同的备份计划

File-per-table tablespaces 是方便的对于 每个表的状态报告 当复制或者备份表时

你不能监控表大小在系统层面,不访问MYSQL 数据库的话

常用的Linux 文件系统不允许 并发写到一个单独的文件 当 innodb_flush_method 是设置为O_DIRECT

mysql> show variables like '%innodb_flush_method%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_flush_method | |
+---------------------+-------+
1 row in set (0.00 sec) 因此, 有可能性能改善党使用 file-per-table 表空间 File-Per-Table Tablespaces 存在的缺点: 1. file-per-table tablespaces 每个表有一个未使用的空间, 只能被相同表的行使用。 这个会浪费空间 2.fsync 操作必须允许在每个打开的表相比在一个单独的文件。因为 这里有一个单独的fsync 操作在每个文件, 写操作在多个表不能合成一个单独的I/O操作。 这个可能需要InnoDB 执行更多数量得到fsync操作 3.mysqld 必须每个表一个文件句柄, 这可能会影响性能 如果你有大量的表 4.会使用更多的文件句柄 5.innodb_file_per_table 是默认启用的在 MySQL 5.6.6和更高版本。 你可以考虑禁用它如果和mysql 5.5或者5.1的兼容性是一个问题。 6.例如, 当重新组织 clustered index 对于一个InnoDB 表, 表时重新创建使用当前设置对于innodb_file_per_table. 7.这个行为不应用当增加或者删除InnoDB secondary indexes. 当一个 secondary index 被创建没有rebuild 表。 8. 如果很多表时在增长 有更多的碎片, 会阻碍 DROP TABLE和表扫描性能。

14.7.4 InnoDB File-Per-Table Tablespaces的更多相关文章

  1. 14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件

    14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件 从历史上看, 所有的InnoDB 表和索引是存储在system 表空间, 这个整体的方法是针对机器专注 ...

  2. 14.8.2 Verifying File Format Compatibility 校验文件格式兼容性:

    14.8.2 Verifying File Format Compatibility 校验文件格式兼容性: 14.8.2.1 Compatibility Check When InnoDB Is St ...

  3. 14.6.1 InnoDB Startup Configuration 启动配置

    14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置. 推荐你定义数 ...

  4. 14.10.1 InnoDB Disk I/O

    14.10 InnoDB Disk IO and File Space Management InnoDB 磁盘IO和文件空间管理: 14.10.1 InnoDB Disk I/O 14.10.2 F ...

  5. 14.8.1 Enabling File Formats

    14.8 InnoDB File-Format Management 14.8.1 Enabling File Formats 14.8.2 Verifying File Format Compati ...

  6. mysql 异常宕机 ..InnoDB: Database page corruption on disk or a failed,,InnoDB: file read of page 8.

    mysql 测试环境异常宕机 系统:\nKylin 3.3 mysql版本:5.6.15--yum安装,麒麟提供的yum源数据库版本 error日志 181218 09:38:52 mysqld_sa ...

  7. 14.3.5.1 Interaction of Table Locking and Transactions 表锁和事务的相互作用

    14.3.5.1 Interaction of Table Locking and Transactions 表锁和事务的相互作用 LOCK TABLES 和UNLOCK TABLES 交互实用事务如 ...

  8. 14.2.3 InnoDB Redo Log

    14.2.3 InnoDB Redo Log 14.2.3.1 Group Commit for Redo Log Flushing redo log 是一个基于磁盘数据结构的用于在crash 恢复正 ...

  9. 14.1.1 InnoDB as the Default MySQL Storage Engine

    14.1 Introduction to InnoDB 14.1.1 InnoDB as the Default MySQL Storage Engine 14.1.2 Checking InnoDB ...

随机推荐

  1. python np.linspace

    该函数的形式为: linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 作用为:在规定的时间内,返回固定间隔的 ...

  2. css hack 大全

    各个浏览器的css hack区别属性: IE6: _zoom:1; IE6/7: *zoom:1; IE6/7/8/9 :\9 各个浏览器的css hack区别规则 IE6: *html{} IE7: ...

  3. enableEventValidation

    回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEve ...

  4. C#当中的多线程_任务并行库(中)

    发现自己有点懒了!也可能是越往后越难了,看书理解起来有点费劲,所以这两天就每天更新一点学习笔记吧. 4.5 将APM模式转化为任务 书上提供的三种方式 方式一: class Program       ...

  5. oracle数据库的导出与导入

    导出:exp devtest10/dev10@172.16.7.39:1521/WSRZ file=d:\WSRZ.dmp log=d:\WSRZ.log full=y 导入:imp testdb/t ...

  6. 三步走起 提升 iOS 审核通过率 下篇

    根据2015年的数据统计情况,并结合<苹果应用商店审核指南>,互娱 iOS 预审组通过细分将预审工作划为3大模块:客户端资源检查.应用内容检查和提审资源检查. 在上一篇文章中,Bugly ...

  7. EA UML 建模——类图

    Enterprise Architect(EA) 是一个功能比较强悍的建模工具,本篇文章仅使用其 UML 建模功能,其他更多功能,可以Google. 一.简单梳理C#中类与类.类与接口.接口与接口的关 ...

  8. HDU 1114 Piggy-Bank(完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题目大意:根据储钱罐的重量,求出里面钱最少有多少.给定储钱罐的初始重量,装硬币后重量,和每个对应 ...

  9. 在Windows下用MingW 4.5.2编译OpenCV 2.3.0

    需要的工具:1.安装QT SDK环境2.安装CMake for Windows3.OpenCV最新Windows源码步骤:1.将QT SDK安装目录下的{QtSDK}\mingw\bin添加到系统环境 ...

  10. float浮动引起的ul高度崩溃与overflow的关系

        今天遇到的问题真的让人不得不吐槽,因为一个很小的问题,花费了半天的时间来才解决这个问题.一直认为自己对Html与Css了解应该算蛮不错的,但是今天遇到的事情让我不得不反省自己的学习心态上的错误 ...