MySQL 的缓冲池扩展

Buffer Pool Extension for MySQL

主机上的主内存有限,因此 mysql 引擎的缓冲池大小有限。想知道是否有任何已知的 MYSQL 解决方案允许缓冲池扩展到非易失性随机存取存储器(即固态驱动器或 EBS 卷,在 AWS 基础设施的情况下)扩展到数据库引擎。

[编辑] 我能够找到 sql 服务器的非常旧的文档,但在 mysql 上没有找到任何内容。我正在寻找 mysql engine/innodb 的任何现有解决方案或有关如何添加该功能的良好参考点。

参考

SQL Server doc

MySQL 没有像 Microsoft SQL 服务器的缓冲池扩展那样的功能。

大多数操作系统允许通过磁盘存储扩展 RAM。它被称为交换space。这个想法是,如果进程使用的虚拟内存多于系统的物理 RAM,则可以使用一定数量的存储 space。

问题是,即使是最好的 SSD 驱动器也比 RAM 慢大约 10,000 倍。如果你依赖 SSD 上的交换 space 来补充 MySQL 的缓冲池,那么 MySQL 会慢到无法使用。

在我的工作中,当我们在 Linux 服务器上配置交换 space 时,MySQL 会过度分配虚拟内存并使用一些交换 space,它导致整个服务器因频繁的磁盘访问而变得如此缓慢,以至于我们几乎无法通过 ssh 连接到服务器以将其关闭。所以我们禁用了交换 space。完全失败总比停滞不前好。

那是我们数据中心物理服务器上的直连 SSD 存储。对于 AWS EBS 卷来说情况会更糟,因为 EBS 是具有更高延迟的网络附加存储。

您不一定需要与整个数据集大小一样多的缓冲池。默认情况下,我们选择缓冲池与存储的比率 1:10。例如,10GB 的缓冲池通常足以存储磁盘上的 100GB 数据。至少作为默认的起点。某些工作负载需要更多缓冲池,因此我们可能会在稍后进行调整。

如果您的 MySQL 实例需要更多缓冲池,那么您确实需要获得一台具有更多物理 RAM 的服务器。没有有效的替代品。

获得具有更多 RAM 的服务器将花费更多。

如果应用程序没有产生足够的商业价值来支付其所需的服务器规模,那么它就不是一个可行的应用程序。