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. 【Android】数据库的简单应用——创建数据库

    SQLiteOpenHelper是一个抽象类,要使用它必须写一个类继承它.SQLiteOpenHelper有两个抽象方法onCreate()和onUpgrade(),我们要在类里面重写这两个方法来实现 ...

  2. JS 自定义回调函数callback

    1 应用场景:js的异步加载,在get,post,ajax异步加载的时候,可能对应的请求没有完成,这时需要使用请求回来的数据作为参数调用其他函数,这时就需要使用回调函数. 2 回调函数作用:等待函数调 ...

  3. [DEncrypt] Encrypt--加密/解密/MD5加密 (转载)

    点击下载  Encrypt.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.Encrypt加密2.Encrypt解密3.Encrypt MD5加密看下面代码吧 /// <summar ...

  4. 多线程与Socket编程

    一.死锁 定义: 指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁 ...

  5. Android 设计随便说说

    我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...

  6. 关于AfterLogic WebMail 的.net版无法上传控件的解决办法

    在使用AfterLogic WebMail做客户端的时候发现无论是在FF下还是在IE下发送邮件时附件怎么也无法上传,后来查看代码发现它使用的FLASH上传调用的上传代码是upload.php,问题就出 ...

  7. Ubuntu下解压rar文件的方法

    原帖地址:http://hi.baidu.com/remoteexp/item/1c32d0ffb92e946c3c148596 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了ra ...

  8. Oracle 11g 新特性(一)-- 虚拟列

    数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如 ...

  9. CoreAnimation3-专用图层

    CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类.你指定诸如颜色和线宽等属性,用CGPath来定义想要绘制的图形,最后CAShapeLayer就自 ...

  10. Ubuntu 之旅 —— 解决sudo: source: command not found错误

    $ sudo -s # source /etc/profile