让 MySQL 内存存储引擎使用 512 GB 的 RAM 是否可行?

Dav*_*vid 3 mysql myisam memory scalability

我正在考虑扩大规模而不是扩大规模。因此,我很想知道将 MySQL 内存存储引擎用于 500+ GB 的数据库是否可行,因为有一台服务器,具有这种内存?我应该提到对表的查询主要是临时查询。

我相信我发现会出现的一个问题是对 MEMORY 表的查询可能会导致创建临时表。临时表在转换为 MyISAM 表之前有一个硬性限制,即最多使用4 GB的 RAM。这当然会完全杀死性能。临时表的内存限制可以通过将tempdir设置为 ramdisk 来解决

您还预见到哪些其他类型的问题?

Rol*_*DBA 9

MEMORY存储引擎可以是福或取决于诅咒

  • 你打算存储什么
  • 您计划多久执行一次 DML
  • 你留下多少内存
    • 数据库缓存(MyISAM 密钥缓存、InnoDB 缓冲池)
    • 操作系统缓存
    • 操作系统操作

MEMORY 存储引擎

  • 对 INSERT、UPDATE 和 DELETE 使用全表锁定
  • 无法执行并发 INSERT
  • 默认情况下使用哈希索引而不是 BTREE 索引
  • 可以使用 BTREEs 索引,但必须在 CREATE TABLE 时明确指定
  • 没有交易支持
  • 单行查询非常适用于 MEMORY 表,尤其是使用 HASH 索引——除非您明确使用 BTREE(需要更多内存消耗),否则范围查询和顺序访问非常可怕

即使您在 RAM 中有数据,mysqld 也将始终访问 .frm 文件以检查作为参考点存在的表,因此总是会产生少量磁盘 I/O。按比例,对 MEMORY 存储引擎表的大量访问将具有明显的磁盘 I/O。

  • +1 大概这些点会随着数据库的增长而限制它的实用性 - 因此它可能无法很好地处理 500GB+ 数据? (3认同)
  • FWIW 当我需要机器做的只是返回数据时,我会将操作系统扔到总线下。在这方面,我赞成大铁的回归。去除所有不必要的东西(你好 MinWin) (2认同)