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 pyfits

    原链接:http://blog.sina.com.cn/s/blog_a046022d0101a48h.html,全文复制以备出错.   导入pyfits模块:import pyfits        ...

  2. django-form表单的提交

    <form action="/blog/" method="get"> 如果runserver默认启用127.0.0.1:8000的话,且上面这个f ...

  3. WPF4字体改善

    原文 WPF4字体改善 WPF4对字体渲染做了很大的改善,增加了TextOptions属性,该属性可以设置TextFormattingMode,TextRenderingMode,TextHintin ...

  4. asp.net用Zxing库实现条形码输出

    原文 asp.net用Zxing库实现条形码输出 这个简单的问题,困扰了我将近两个小时,主要是再官方文档上没有找到demo,那只能用搜索引擎了,看看其他程序员写的程序,但是发现处处是坑,看了四五个例子 ...

  5. android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()详解二之小秘与领导的故事

    总结的不是很好,自己也有点看不懂,正好现在用到了,研究了一个,再次总结,方便大家查看 总则: 1.onInterceptTouchEvent中有个Intercept,这是什么意思呢?她叫拦截,你大概知 ...

  6. 梳理一下uboot是如何从nandflash挂载文件系统的

    只是找到了比较一点点的线索, 如下: 首先要有的概念是,内核在挂载文件系统之前,自己会做一个虚拟fs. 1. Uboot:从flash启动set bootcmd nand read 0x3000000 ...

  7. SQL 教程

    SQL 教程 http://www.w3school.com.cn/sql/

  8. javascript 浏览器兼容性写法

    var event = window.event || arguments.callee.caller.arguments[0]; // 获取event对象 event = event.srcElem ...

  9. ASP.NET - 编写让别人能读懂的代码

    http://www.cnblogs.com/richieyang/p/4840614.html

  10. Qt中使用OpenCV库

    原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100qwi3.html 心情真是好啊,曾经一度想放弃使用Qt加OpenCV进行数字图像处理了,幸好坚持住了,今 ...