【问题标题】:FileGroup in MariaDBMariaDB 中的文件组
【发布时间】:2016-12-29 17:04:42
【问题描述】:

在 SQL Server 中,分区有循环 表 -> 分区架构 -> 文件组 (f1,f2,f3,f4,....)

例如在 Oracle 中:

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

但是 MariaDB 有文件组吗?

【问题讨论】:

    标签: mysql innodb mariadb


    【解决方案1】:

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

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

    InnoDB 有一种方法可以拼出 ibdata1、ibdata2 等。这可以追溯到操作系统无法制作大于 2GB 或 4GB 的文件的时代。它今天基本上从未使用过。

    InnoDB 表可以全部位于 ibdata1 中,也可以分散在各个 .ibd 文件中。但我真的不认为这是你在说什么。使用这种“每个表的文件”,小表的存储效率低下。 MySQL 8.0 将通过让您将多个表放在给定的“表空间”中(类似于 .ibd 文件)稍微改进这一点。

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

    所有这些都不值得一提。我猜只有 1% 的系统需要考虑它。简单地让 MySQL/MariaDB 为所欲为;已经足够了。

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

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

    【讨论】:

    • 即使使用优化的语句,巨大的表和索引也会很慢 - 如果表是分区的,读取少量分区的语句可能会快得多。如果您只需要备份一个分区而不是整个表,那么备份可能会更快。
    • 我不认为有任何“按分区备份”,PARTITION 或磁盘分区。
    • 扫描少量分区的唯一优势是当您需要扫描整个分区时,因为您没有合适的索引。即使这样,索引也可能足以模拟分区。
    • @GeorgRichter - 我需要看一个具体的例子,然后有机会用非分区的等价物反驳它。我可以通常想出一个至少一样快的解决方案。
    • 另外需要注意的是:MySQL 和 MariaDB 在单个查询中还没有并行性。因此,跨多个磁盘分区布置表影响不大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多