首页 > 其他分享 >InnoDB 表空间

InnoDB 表空间

时间:2023-08-17 15:02:02浏览次数:32  
标签:文件 数据文件 per InnoDB file 空间 table

目录

Tablespace

System Tablespace

系统表空间(system tablespace)是更改缓冲区(change buffer)的存储区域。如果表不是在每个表文件(file-per-table)或通用表空间(general tablespace)中创建的,而是在系统表空间创建的,系统表空间中还可能包含表和索引数据。

系统表空间可以有一个或多个数据文件。默认情况下,会在数据目录中创建一个名为 ibdata1 的系统表空间数据文件,系统表空间数据文件的大小和数量由 innodb_data_file_path 启动选项定义的。

File-Per-Table Tablespaces

A file-per-table tablespace contains data and indexes for a single InnoDB table, and is stored on the file system in a single data file.

每个表文件表空间(file-per-table tablespace)包含单个 InnoDB 表的数据和索引,并存储在文件系统上的单个数据文件中。

File-Per-Table Tablespace Data Files

A file-per-table tablespace is created in an *.ibd data file in a schema directory under the MySQL data directory. The *.ibd file is named for the table (${table_name}.ibd).

例如,当我们创建一个 db_larry.t_user_info_1 表后,就会在对应的目录下面,生成一个表数据文件:

$ sudo ls -la /var/lib/mysql/db_larry
-rw-r----- 1 mysql mysql 114688 Aug 16 16:40 t_user_info_1.ibd

优缺点

与共享表空间(例如,系统表空间或通用表空间)相比,file-per-table 表空间具有以下优点和缺点。

优点

  • 在 file-per-table 表空间中创建的表,发生截断或删除后,相应的磁盘空间将返回给操作系统;

    截断或删除保存在共享表空间中的表,会在共享表空间的数据文件中创建可用空间,该空间只能用于数据 InnoDB。换句话说,在表被截断或删除后,共享表空间数据文件的大小不会缩小。

  • 对驻留在共享表空间中的表进行表复制ALTER TABLE 操作会增加该表空间占用的磁盘空间量;

    此类操作,可能需要与表中的数据加上索引一样多的额外空间。该空间不会像 file-per-table 表空间那样释放回操作系统。

  • TRUNCATE TABLE 语句,在 file-per-table 表空间中的表中执行时,性能会更好;

  • file-per-table 表空间的数据文件,可以创建在独立的存储设备上,这样,就可以实现 I/O 优化、空间管理或备份目的;

  • 可以从另一个 MySQL 实例,导入在 file-per-table 表空间中的表;

  • 在 file-per-table 表空间中创建的表,支持 DYNAMIC、COMPRESSED 行格式,而系统表空间不支持这些功能;

  • 当发生数据损坏、备份或二进制日志不可用或 MySQL 服务器实例无法重新启动时,存储在各个表空间数据文件中的表,可以节省时间并提高成功恢复的机会;

  • 可以使用 MySQL Enterprise Backup 快速备份或恢复在 file-per-table 表空间中创建的表,而无需中断其他 InnoDB 表的使用;

    这对于不同备份计划或需要不太频繁备份的表是有益的。

  • file-per-table 表空间允许通过监视表空间数据文件的大小来监视文件系统上的表大小;

  • 能提高磁盘写入的性能;

    当变量设置为 innodb_flush_method = O_DIRECT 时,常见的 Linux 文件系统不允许对单个文件(例如,共享表空间数据文件)进行并发写入。

    因此,file-per-table 表空间与此设置结合使用时,可能会提高性能。

  • 表空间大小不受限制。

    共享表空间中的表的大小受到 64TB 表空间大小限制。相比之下,每一个 file-per-table 的表空间大小最大都是为 64TB,这样就就为单个表的大小增长提供了充足的空间。

缺点

  • 对于 file-per-table 表空间,每个表可能有未使用的空间,这些空间只能由同一表的行使用,如果管理不当,可能会导致空间浪费。

  • 多个 file-per-table 表空间的数据文件刷新时,需要多次调用 fsync。

    fsync 操作是在多个 file-per-table 数据文件上执行的,而不是在单个共享表空间数据文件上执行的。由于 fsync操作是针对每个文件的,因此无法合并多个表的写入操作,这可能会导致多次调用 fsync 操作。

  • mysqld 必须为每个 file-per-table 表空间保留一个打开的文件句柄,如果 file-per-table 表空间中有大量表,这可能会影响性能。

  • 当每个表都有自己的数据文件时,需要更多的文件描述符。

  • DROP TABLE 可能会产生更多碎片,这可能会影响全表扫描的性能。

    但是,如果碎片得到管理,file-per-table 表空间可以提高这些操作的性能。

  • 删除驻留在 file-per-table 表空间中的表时,会扫描缓冲池,对于大型缓冲池,这可能需要几秒钟的时间。扫描是通过广泛的内部锁执行的,这可能会延迟其他操作。

  • innodb_autoextend_increment 变量定义了自动扩展共享表空间文件变满时扩展大小的增量大小,不适用于 file-per-table 表空间文件,这些文件无论设置如何都会自动扩展 innodb_autoextend_increment

    初始的每表文件表空间扩展量很小,之后扩展以 4MB 为增量。

General Tablespaces

通用表空间是使用 CREATE TABLESPACE 语法创建的共享 InnoDB 表空间。

通用表空间提供以下功能:

  • 与系统表空间类似,通用表空间是能够存储多个表数据的共享表空间。

  • 与每个表文件的表空间 相比,通用表空间具有潜在的内存优势 。服务器在表空间的生命周期内将表空间元数据保存在内存中。与单独的每个表文件表空间中的相同数量的表相比,较少的通用表空间中的多个表消耗的表空间元数据内存更少。

  • 一般表空间数据文件可以放置在相对于或独立于MySQL数据目录的目录中,这为您提供了 file-per-table表空间的许多数据文件和存储管理功能。与每表文件表空间一样,将数据文件放置在 MySQL 数据目录之外的功能允许您单独管理关键表的性能,为特定表设置 RAID 或 DRBD,或者将表绑定到特定磁盘。

  • 通用表空间支持所有表行格式和相关功能。

  • 该TABLESPACE选项可用于 CREATE TABLE在常规表空间、每表文件表空间或系统表空间中创建表。

  • 该TABLESPACE选项可用于 ALTER TABLE在常规表空间、每表文件表空间和系统表空间之间移动表。

通用表空间的行格式

通用表空间支持所有表行格式(REDUNDANT、COMPACT、DYNAMIC、COMPRESSED),但需要注意的是,由于物理页大小不同,压缩表和未压缩表不能共存于同一个通用表空间中。

mysql> CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;

mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

标签:文件,数据文件,per,InnoDB,file,空间,table
From: https://www.cnblogs.com/larry1024/p/17635385.html

相关文章

  • 统计oracel表空间和用户的数据文件占物理磁盘空间大小
    selectbannerfromv$version;-----统计磁盘空间文件大小SELECT--B.file_name"文件名",A.TABLESPACE_NAME"表空间名",TOTAL"表空间大小",FREE"表空间剩余大小",(TOTAL-FREE)"表空间使用大小",TOTAL/(10......
  • 如何调整MySQL InnoDB缓冲池大小?如何监控缓冲池效率?常用的warm-up策略有哪些?
    如何调整MySQLInnoDB缓冲池大小?调整InnoDB缓冲池是优化InnoDB性能的关键步骤。InnoDB缓冲池是InnoDB存储引擎在内存中缓存数据和索引的地方,适当地调整它可以大大提高数据库的性能。以下是调整InnoDB缓冲池的步骤和建议:确定合适的大小:InnoDB缓冲池应该设置......
  • 对于MySQL的innodb存储引擎,‘select count(*) ’、‘select count(id)’、‘select co
    让我们重新审视那三个查询在InnoDB存储引擎中的行为:selectcount(*)fromtable;这个查询用于计算表中的所有行数。当使用count(*)时,MySQL不会去检查列的值,它只关心行数。对于InnoDB,这并不意味着它可以从某个内部计数器快速获取行数,而是需要对整个表或满足查询条件的相......
  • 为什么InnoDB不像MyISAM那样维护一个预存储的行数计数器?
     InnoDB和MyISAM有不同的设计哲学和用途,这影响了它们如何维护和管理行数。以下是为什么InnoDB不像MyISAM那样维护一个预存储的行数计数器的原因:事务支持:InnoDB是一个事务型存储引擎,支持ACID事务。在任何给定时间,多个事务可能都在同一个表上进行操作,这......
  • 为什么MySQL innodb的数据达到亿级别,使用‘select count(*) ’将会特别慢?
    当表的数据达到亿级别时,使用SELECTCOUNT(*)FROMtable会变得特别慢,主要是因为以下几个原因:全表扫描:SELECTCOUNT(*)FROMtable通常会导致全表扫描,除非有一些优化手段被应用(例如使用覆盖索引)。当你执行这样的查询,数据库实际上需要读取表中的每一行以计算总......
  • 7维空间计算器kwl2024下载
    2024版更新记录: 2024EditionupdateRecord:1、能计算一些7维空间的距离和角度的数据。2、能建立、保存和打开数据定义文件和结果文件。1,cancomputethedataof7dimssomedistancesofspacesandangle.2,cancreate,keepandopendocumentandresultdocument......
  • 华为开发者大会2023:云空间筑牢鸿蒙生态“云基因”
    8月4日,华为开发者大会2023在东莞·松山湖举办,众多开发者及合作伙伴共赴盛会,见证鸿蒙生态的最新进展。在本届大会的HarmonyOS应用开发(端云能力)分论坛上,华为DriveKit生态架构技术总监官宣云空间服务升级,赋能开发者高效开发,为鸿蒙生态应用注入“云基因”。构建端云数据同步服务,为......
  • oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户
    oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户news2023/8/1413:13:55概述有朋友问到如何查出表空间都被哪些用户使用的一些方法,因为有几种情况需要考虑,也顺便做个总结。需求:如何查看共用一个表空间的所有用户查看某表空间下表的所有者使用dba用户......
  • MySQL的空间索引
    空间索引是一种特殊的数据库索引,用于存储空间数据并加速空间查询。空间数据通常是指与地理位置或空间坐标有关的数据,如经度和纬度、多边形边界、点等。空间索引的目的是快速查找在特定地理区域内或与特定地理形状相交的对象。以下是空间索引的一些核心概念和特点......
  • python重采样tif影像,自定义空间分辨率
    importwarningsimportnetCDF4warnings.filterwarnings('ignore')warnings.filterwarnings('ignore',category=DeprecationWarning)importnetCDF4importpandasaspdimportnumpyasnpfromosgeoimportgdalimportmatplotlib.pyplotasp......