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

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

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

任何磁盘存储分配给MySQL 不会用于其他目的。

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

每个InnoDB 表和它的索引是是单独存储.ibd数据文件。

每个.ibd 数据文件代表一个单独的表空间,这个功能是有innodb_file_per_table 配置选项控制,

在MySQL 5.6.6和更高版本默认启用的。

 File-Per-Table  表空间的优势:

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

 Truncating or dropping  存储在共享系统表空间的表内部的创建空闲空间 在system tablespace data files

(ibdata files)  ,空闲的空间只能用于新的InnoDB 数据

同样, 一个表复制ALTER TABLE 操作食欲一个共享的表空间可以增加属于表空间的总量。

这样的操作可能需要更多额外的空间作为数据在表加上索引。

额外的空间用于table-copying ALTER TABLE 选项不会释放回操作系统

2. TRUNCATE TABLE 选项是更快的 当运行在存储在file-per-table tablepaces的表

3.你可以存储特定的包在单独的存储设备,对于I/O优化,空间管理,

或者备份目的。在以前的版本中,你需要移动整个数据库目录到其他设备,然后创建符号连接

在MySQL 数据目录,

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

你可以运行OPTIMIZE TABLE来压缩或者重新创建一个

file-per-table tablespace.

当你运行一个 OPTIMIZE TABLE,InnoDB 创建一个新的临时名称的.ibd文件,

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

InnoDB 删除老的.ibd文件用新的替换它。如果前面的.ibd 文件增长显著但是实际的数据

只占用了一部分空间,运行 OPTIMIZE TABLE 可以回收未使用的空间。

4.你可以移动单独的InnoDB 表相比整个数据库

5.你可以复制单个InnoDB表从一个MySQL 实例到

6. 在file-per-table tablespaces  创建的表使用Barracuda 文件格式。

Barracuda file format 启用功能比如也说和动态行格式。

在 system tablespace 创建的表不能使用那些功能。

李亚那些功能对于一个存在的表,启用innodb_file_per_table设置 

运行 ALTER TABLE t ENGINE=INNODB 来替换表

你可以启用更有效率的存储引擎对于BLOB或者TEXT 列使用动态行格式

File-per-table tablespaces 可以提高成功恢复的机会和节省时间当一个腐败发生,

当一个server 不能被重启,或者当备份和binary logs 不可用

你可以备份或者恢复单个表使用MySQL 企业备份产品,

而无需中断其他InnoDB表的使用。

这是有益的 如果你有些表需要较少的备份或者不同的备份计划

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

你可以监控表大小在文件系统层面,不需要访问MySQL

常见的linux 文件系统不允许并发写一个单独的文件当innodb_flush_method 是设置为 O_DIRECT.

因此,有可能的性能改善当使用file-per-table tablespace。

system 表空间存储数据目录和undo logs, 有64TB限制。

通过比较,每个 file-per-table tablespace 有一个64TB 大小限制,

潜在的缺点 对于File-Per-Table 表空间。

1. file-per-table tablespaces, 每个表可能有没有使用的空间, 只能被相同表的记录使用。

这样会浪费空间如果没有妥善管理。

2.fsync 选项必须运行在每个打开的表相比在一个单独的文件,

因此有单独的fsync操作在每个文件,写操作在多个表不能被合并成一个单独的I/O操作。

这个需要InnoDB 执行一个高数量的fsync操作

3.mysqld 必须保持 一个打开的文件句柄对于每个表, 这可能会有性能问题

如果你有多个file-per-table tablespaces 表

4.更多的文件句柄被使用

5. innodb_file_per_table 在MySQL 5.6.6和更高版本默认启用,

你可以考虑关闭如果向后兼容性在MySQL 5.5 or 5.1

关闭innodb_file_per_table防止ALTER TABLE 移动一个InnoDB 表从系统表空间到一个单独的.ibd文件

6.例如,当重新构建InnoDB的 clustered index, 表是被重建使用当前设置的 innodb_file_per_table. 

这个行为不应用当增加或者删除InnoDB secondary indexes. 

7.如果很多表在增长,会有更多的碎片 会阻碍 DROP TABLE 和表扫描性能。

然而, 当碎片化被管理, 它们自己的表空间的文件可以改善性能

14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件的更多相关文章

  1. 14.7.4 InnoDB File-Per-Table Tablespaces

    14.7.4 InnoDB File-Per-Table Tablespaces 从历史上看,所有的InnoDB 表和indexes 是存储在system 表空间. 这个整体的方法是针对机器是整个用于 ...

  2. 14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间

    14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间 在MySQL 5.6.3,你可以存 ...

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

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

  4. 14.6.1 InnoDB Startup Configuration 启动配置

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

  5. 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 ...

  6. 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 ...

  7. 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 ...

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

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

  9. 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 恢复正 ...

随机推荐

  1. Python中打印列表的序号和内容

    ==>the start 最近作业里要用到遍历打印出列表中的序号和内容,我刚开始用了个很笨的方法来写,后来老师说可以使用enumerate()函数,所以我就特意研究了下. 先看我之前用的笨方法: ...

  2. HDOJ 4007 Dave【最大覆盖集】

    Dave Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submis ...

  3. 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图

    原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...

  4. 总线接口与计算机通信(五)CAN总线

        CAN网络图示     CAN的特点      CAN协议具有以下特点.      (1) 多主控制  在总线空闲时,所有的单元都可开始发送消息(多主控制). 最先访问总线的单元可获得发送权( ...

  5. loadrunner参数化总结

    Select next row:Sequential,Rondom,Unique Update value on:Each iteration,Each occurrence,Once 下面分别对这两 ...

  6. Ch06 验证

    6.1  服务器端验证 6.1.1  Data Annotations验证 6.1.2  扩展ModelMetadtaProvider 6.2  客户端验证 6.2.1  客户端验证初步 6.2.2  ...

  7. android怎样实现自动点击功能

    一个按钮之类的控件的自动点击的话,可以定时调用 button.performClick();

  8. Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)

    Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...

  9. 基于visual Studio2013解决面试题之0502字符串左移

     题目

  10. python 站点爬虫 下载在线盗墓笔记小说到本地的脚本

    近期闲着没事想看小说,找到一个全是南派三叔的小说的站点,决定都下载下来看看,于是动手,在非常多QQ群里高手的帮助下(本人正則表達式非常烂.程序复杂的正则都是一些高手指导的),花了三四天写了一个脚本 须 ...