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. javascript每日一练(六)——事件一

    一.event对象 var oEvent = ev || event;//获取事件对象 oEvent.clientX oEvent.clientY//获取鼠标坐标 oEvent.cancelBubbl ...

  2. 彻底明白Java的IO系统

    java学习:彻底明白Java的IO系统 文章来源:互联网 一. Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有 ...

  3. 安卓android WebView Memory Leak WebView内存泄漏

    Android WebView Memory Leak WebView内存泄漏 在这次开发过程中,需要用到webview展示一些界面,但是加载的页面如果有很多图片就会发现内存占用暴涨,并且在退出该界面 ...

  4. 【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码

    原文:[项目分析]利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码 最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中. 在JAVA程 ...

  5. Java Arrays Tutorial (3)

    Java Arrays Tutorial (3) Data types have a specific set of values. A byte cannot hold a value larger ...

  6. boost 轻量级信号量

    #include <boost/thread/condition_variable.hpp> #include <boost/thread/mutex.hpp>     #in ...

  7. 一起C语言中程序时序问题的排查过程

    [文章摘要] 对于由多个模块协同工作的软件来说,程序处理的时序是很重要的.当消息处理的顺序出现混乱时,程序就会出现异常. 本文基于作者的实际项目经验.对软件模块之间的时序问题进行了具体的分析,为相关软 ...

  8. The FlexSession is invalid问题

    package com.cmbj.soa.servicemonitor.view.service.impl; import java.util.Enumeration; import javax.se ...

  9. Winfrom 表格单元格格式化事件(DataGridView - CellFormatting)

    格式化 14,15列将编码显示为编码值 this.dgv_prescription.CellFormatting += (object sen, DataGridViewCellFormattingE ...

  10. 多屏广告技术调研 & 广告基础介绍

    之前做的多屏广告产品调研,并简单介绍了一些基础广告知识.见ppt:多屏广告技术调研