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. Linux删除除了某些文件之外的所有文件(夹)

    例如:删除当前目录下除了.tar.gz和.py结尾的其他文件 shopt -s extglob rm -rf !(*.py|*.tar.gz)

  2. 让IE支持Css3属性(圆角、阴影、渐变)

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  3. CXF错误:Unsupported major.minor version 51.0,java.lang.UnsupportedClassVersionErro

    CXF错误:Unsupported major.minor version 51.0 java.lang.UnsupportedClassVersionError >>>>&g ...

  4. CI框架篇之基础篇(2)

    CodeIgniter 的基础了解了后,现在就来对这个框架进行预热 CodeIgniter 配置 理论是不用配置,直接拷贝到服务器目录下即可运行 CodeIgniter 安装分为四个步骤: 1. 解压 ...

  5. Singleton设计模式 分类: 设计模式 2014-12-03 17:54 59人阅读 评论(0) 收藏

    实现方法: public class SingleTon<T> where T : class, new() {     protected SingleTon() { }     pri ...

  6. .Net程序员学习Linux(二)

    本次知识点:递归命令符,wc命令,文档编辑器 vi的简单使用,文本常用操作命令,find查询文件命令,grep匹配文本中对应的关键字 递归命令符 递归对于程序猿来说不默认,经常用于级联关系,一层套一层 ...

  7. DBA词典:数据库设计常用词汇中英文对照表

    1. Access method(访问方法):此步骤包括从文件中存储和检索记录. 2. Alias(别名):某属性的另一个名字.在SQL中,可以用别名替换表名. 3. Alternate keys(备 ...

  8. 网上流行的add(2)(3)(4)

    网上有很多其他的各样的算法.其实这题就可以用javascript属性arguments.callee来实现,代码如下: function add(x){ var result=0; return fu ...

  9. c语言的数组指针与指针数组

    1. 数组指针:指向数组的指针是数组指针 先看下面一段代码: #include <stdio.h> int main(void) { int m[10]; printf("m = ...

  10. JavaScript 实现触点式弹出菜单插件

    之前做项目时经常用到一种触点式弹出菜单或者导航的功能,这个功能的主要应用场景是:web页面中多层分级导航或者子功能目录,但又考虑到页面区域有限,于是就考虑到在鼠标移动到某导航按钮上或者点击时,系统将在 ...