MariaDB 中的文件组

FileGroup in MariaDB

在SQL服务器中分区有循环 Table -> 分区模式 -> 文件组 (f1,f2,f3,f4,....)

例如在 Oracle 中:

SQL服务器中的文件组类似于Oracle中的table空间,是table和索引数据的逻辑存储,可以包含一个或多个OS 个文件。

但是 MariaDB 有文件组吗?

并非如此。你想达到什么目的?请记住,存在一些类似的东西是因为磁盘过去比数据库小。今天,很少有问题。此外,RAID 控制器、SAN 等消除了手动决定文件去向的需要(甚至不需要)。 OS 有连接多个卷的方法,即使是在运行中。等等

MyISAM 有能力说出数据的去向和索引文件的去向。但是 MyISAM 几乎死了。即使在那里,将数据放在一个驱动器上而将索引放在另一个驱动器上也是愚蠢的。在执行查询时,首先访问索引,然后访问数据。如果获得任何性能,那是很少的。简单的 RAID 条带化可能会做得更好。

InnoDB 有办法拼出 ibdata1、ibdata2 等。这可以追溯到 OS 无法生成大于 2GB 或 4GB 的文件的时代。它今天基本上从未使用过。

InnoDB tables 可以全部在 ibdata1 中,也可以分散在各个 .ibd 文件中。但我真的不认为这就是你在说的。使用此 "file per table",微小的 table 存储效率低下。 MySQL 8.0 将略微改进,允许您在给定的 "tablespace" 中放置多个 table,类似于 .ibd 文件。

InnoDB table 空间包含给定 table 或一组 table 的所有数据 索引。分区 tables,当 file_per_table 时,每个分区都位于不同的 .ibd 文件中。这可能会随着 8.0 发生变化。

所有这些几乎都不值得一提。我猜想只有 1% 的系统需要考虑它。干脆让MySQL/MariaDB为所欲为;够用了。

一个相关的事情...在 80 年代和 90 年代,一些供应商拥有 "raw device" 访问权限,因为他们认为他们可以比通过 OS 做得更好。同样,OS 已经改进,RAID 控制器很复杂,并且存在 SAN。所以原始不再重要。 (我不认为MySQL曾经有过它。)这对供应商来说肯定是一个很大的开发和维护问题。

有多少 DBA 将 tmpdir 放在单独的分区中,却发现因为分区不够大而崩溃。 RAM 磁盘也是如此。