`
san_yun
  • 浏览: 2671005 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Mysql Innodb的两种表空间方式

 
阅读更多

要说表空间,Mysql的表空间管理远远说不上完善。换句话说,事实上Mysql根本没有真正意义上的表空间管理。Mysql的Innodb包含两 种表空间文件模式,默认的共享表空间和每个表分离的独立表空间。只要在my.cnf里面增加innodb_file_per_table=1就可以从共享 表空间切换到独立表空间。当然对于已经存在的表,则需要执行alter table MY_TABLE engine=innodb命令迁移数据。

共享表空间方式

由于是默认的方式,就暂且理解为Mysql官方推荐的方式。相对而言所有的数据都在一个(或几个)文件中,比较利于管理,而且在操作的时候只需要open这一个(或几个)文件即可,相对来说代价很低。

但问题是在数据达到以G为单位来计算的时候优劣逆转。一个大小惊人的文件很不利于管理,而且对于一个如此巨大的文件来说,读写它需要耗费的资源一样 巨大。更加令人费解的是,MySQL竟然将索引和数据保存于同一个文件中,索引和数据之间尚存在资源争用,不利于性能的提升。你当然可以通过 innodb_data_file_path的配置规划多个表空间文件,但MySQL的逻辑是“用满后增加”,仅仅是一个文件的拆分而已,不能从根本上分 离数据和索引。

之前曾经遭遇到700G以上的表空间文件,而且更加让人郁闷的是对于如此大的文件还在以每天数G的数量增加。由于无法停机,即便是拷贝一下也要花费差不多一夜,只能眼睁睁看着它继续增大而毫无保守可行的办法。

独立表空间方式

相对而言对立表空间每个表都有独立的多个数据文件,而且做到了索引和数据的分离。多个小文件之间很方便的完成跨数据库甚至跨硬件的数据拷贝和迁移。相对来说灵活性很好。

这样做同样带来另一个方面的问题。当数据库中的表数量达到一定级别时,每次操作所涉及的文件过多,如果按照默认Centos的ulimit -n = 1024的话,仅仅只能保证同时打开256个表以内,这在习惯上“拆库拆表”的MySQL数据结构上很难达到要求。尚且这种数据文件的利用率不算很高,当 大量“不高”的文件集中起来,浪费的空间也很惊人,更何况最后可能出现的状况不是“一堆K级别的小文件”而是“一堆G级别的大文件”,有点适得其反的意 思。你自然可以联想到分区表,又是一个“仅仅做文件拆分而已”,多个分区文件缺一不可。

之前同样遇到过这个问题,MySQL连接大的状况下大量的timeout,但主机负载还算可以,查了一圈才知道是open files限制的问题,限制一修改,负载变得惊人,但连接数却又提升的不多。

总之,两种方法各有所长,部分互补,但都不是解决问题的终极方案。期待MySQL能够出现真正意义上表空间的概念,更加自由的规划数据文件。

 

更多参考官方文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

分享到:
评论

相关推荐

    MySQL Innodb 索引原理详解

    在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) 搜索二叉树是一种特殊的二叉树,每个节点至多有两个子...

    MySQL内核:InnoDB存储引擎 卷1.pdf.zip

    1. **事务支持**:InnoDB支持事务的四种隔离级别,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ,MySQL默认级别)和串行化(SERIALIZABLE)。这使得InnoDB能保证数据...

    MySql Innodb底层存储架构

    InnoDB有两种类型的表空间:共享表空间和独立表空间。 ###### 共享表空间(Shared Tablespace) - **定义**:在共享表空间模式下,一个数据库的所有表数据和索引文件都被存储在同一个文件中。该文件通常位于MySQL的...

    mysql Innodb表空间卸载、迁移、装载的使用方法

    MySQL的InnoDB存储引擎在处理表空间方面有两种模式:共享表空间和独立表空间。共享表空间模式下,所有InnoDB表的数据和索引都存储在一个或多个大文件(如ibdata1)中。而独立表空间模式,也称为文件-per-table模式,...

    mysql innodb引擎 知识点总结

    5. **InnoDB存储格式**:InnoDB有两种存储格式——Antelope(旧版)和Barracuda(新版)。Barracuda引入了COMPRESSED列式存储,可以对大表进行压缩,节省磁盘空间。 6. **页大小**:InnoDB默认的页大小为16KB,这是...

    Mysql InnoDB删除数据后释放磁盘空间的方法

    MySQL的InnoDB存储引擎在处理数据删除时,采取了一种高效但可能会导致磁盘空间占用过高的策略。当用户删除数据行时,InnoDB并不会立即回收这些被删除的数据所占用的空间,而是简单地将这些记录标记为已删除。这种...

    MySQL核心Innodb存储引擎浅析—事务系统

    其中,MyISAM和InnoDB是最常用的两种存储引擎。 - **MyISAM** - **特性**: - 不支持事务,这意味着在执行一系列操作时,如果其中一个操作失败,前面的操作不会被回滚。 - 提供了较高的读取速度,尤其是在只读或...

    Innodb核心内幕

    这两种空间文件具有相同的高级结构,但系统表空间文件包含了一些额外的页,用于存储必要的结构,这些结构位于固定位置。 系统表空间ibdataX文件中存放着InnoDB的系统表空间数据,例如事务系统信息、数据字典、双写...

    mysql支持事务配置,配置InnoDB引擎

    - 定义InnoDB表空间文件的路径和大小。这里指定了两个文件,每个文件大小为1GB。 - **第7行**: `innodb_data_home_dir=C:\ProgramFiles\MySQL\MySQLServer5.0\ibdata` - 指定InnoDB表空间文件的存放目录。建议...

    MySQL 中如何优化表释放表空间

    本篇文章将深入探讨两种常见的优化表以释放表空间的方法,并提供相关的注意事项和实践技巧。 方法一:`OPTIMIZE TABLE table_name` `OPTIMIZE TABLE` 是MySQL中一个常用的命令,用于对表进行优化,包括重组数据、...

    mysql,innodb索引介绍

    MySQL数据库的InnoDB存储引擎广泛使用BTree索引来优化查询性能。BTree索引是一种常见的索引类型,尤其适用于范围查询和排序操作。在MySQL中,InnoDB存储引擎的索引分为聚簇索引(主键索引)和非聚簇索引(二级索引)...

    innodb存储引擎修改表共享空间为独立空间

    在MySQL中,InnoDB存储引擎提供了两种表空间模式:共享表空间和独立表空间。共享表空间模式下,所有的InnoDB表数据和索引都存储在一个或多个文件中,而独立表空间模式则为每个InnoDB表创建单独的数据文件。 1. **...

    MySQL临时表空间优化:提升数据库性能的关键

    在 MySQL 中,临时表空间主要有两种类型: 1. **内存临时表**:这类表存储在内存中,访问速度非常快,但受限于系统的可用内存空间。 2. **磁盘临时表**:这类表存储在磁盘上,虽然存储空间相对较大,但访问速度较慢...

    InnoDB源码解析

    - .ibd文件:InnoDB使用独立表空间存储每个表的数据和索引。 - ibdata文件:系统表空间文件,所有表共享。 - Redo Log文件:为故障恢复提供支持,保证了事务的持久性。 - Doublewrite Buffer文件:用于存储临时页,...

    《MYSQL备份与恢复》之 Innodb与 MyISAM引擎

    (1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 (2)innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的,innobackupex是一个perl脚本封装,封装了xtrabackup,所以能...

    MySQL-InnoDB

    MySQL-InnoDB是一个强大的关系型数据库管理系统,其内核支持事务处理、行级锁定以及高度的数据一致性和可用性。在现代数据中心环境中,为了提高性能和降低延迟,SSD(固态硬盘)被广泛采用作为存储介质。针对SSD的...

Global site tag (gtag.js) - Google Analytics