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. windows 进程间通讯方法

    Windows平台为我们提供了多种进程间通信的机制,主要包括:注册表方式.共享文件方式.共享内存方式.共享数据段.映射文件方式.管道方式. 剪贴板方式.消息方式.其中注册表方式需要增加注册表表项,而注 ...

  2. Nginx性能统计模块http_stub_status_module使用

    1.进入nginx源码目录,重新配置编译参数 ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module 2.重新编译安 ...

  3. [转]JavaScript 的同源策略

    同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就 ...

  4. (转)META http-equiv="refresh" 实现网页自动跳转

    ***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5 ...

  5. Java 读取Properties 配置文件

    方法一,使用 io 包中的 BufferedInputStream 以及 FileInputStream读入文件转成字符流,然后使用 lang 包中 的 Properties 的 load 方法进行读 ...

  6. C#调用cmd程序,读取结果

    示例,调用cmd执行PING命令,读取结果,代码如下: using System; using System.Collections.Generic; using System.Linq; using ...

  7. 给右键 添加dos命令

    reg add "HKEY_CURRENT_USER\Console" /v "ScreenBufferSize" /t REG_DWORD /d 655361 ...

  8. mysql的sql分页函数limit使用

    My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为: SELECT * FROM 表名称 LIMIT M, ...

  9. 利用c语言做简单的迷宫小游戏

                       #include <stdio.h> #define ROW 6 #define COL 6 // 封装打印地图的函数 void printMap(c ...

  10. CSS3弹性盒模型flex box快速入门 2016.03.16

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...