【问题标题】:mysql innodb buffer vs memory table performancemysql innodb 缓冲区与内存表性能
【发布时间】:2013-05-02 08:09:21
【问题描述】:

内存/堆引擎表与具有大缓冲池的大多数 innodb 表数据库在性能方面是否相同?我通常有 2 个表 - 1 个带有 varchars 和几行的 innodb 以及一个紧凑大小的内存表(5 行,主要是 PK 和用于大量读取的索引整数。我最近了解了 innodb 缓冲区,所以我的表克隆系统过度杀伤和无用或还是比 innodb 快?

【问题讨论】:

    标签: mysql innodb


    【解决方案1】:

    至少在理论上,内存表必须具有更高的性能:在 InnoDB 中,即使有一个很大的缓冲池,缓存中也会有基于块的结构,所以一些块只会部分满,并且这是一个开销。另一个原因是内存中的表没有行版本或行锁,所以同样,这将使用更少的内存。但请注意:内存中的表仍然没有行级锁定,因此如果您运行大型更新,您实际上可能会发现使用 InnoDB 更具可扩展性。

    因此,总结一下:MEMORY 表 - 存储相同数量数据的内存可能更少,InnoDB - 可能更具可扩展性。

    当然,一切都需要针对您的特定情况进行测量。

    也许如果您无论如何都需要将数据存储在内存中,请选择内存数据库? (无耻的插头)。

    【讨论】:

    • +1 值得一提的是,InnoDB 在重读/写并发下肯定会表现得更好(但如果数据是只读的,则不会)。
    【解决方案2】:

    从 InnoDB 缓冲池中读取的速度将与内存表一样快。

    在某些情况下,内存表甚至可以胜过缓冲的 InnoDB 表,前者还支持Hash indexes,而后者仅支持 B-Tree 索引。根据您的查询配置文件,您可能会使用哈希表获得更快的读取速度。

    此外,如果某些查询需要此内存空间,或者数据很少使用,则缓冲的 InnoDB 表可能会从缓冲区中清除。通过将数据显式复制到内存表中,您可以保证数据始终在内存中。

    我还应该提到,无论缓冲池的大小如何,对 InnoDB 表的更新都需要在某个阶段刷新到磁盘。但我知道这不适用于您的用例。

    现在这是理论。只有当这些数据要非常、非常频繁地读取时,您才应该考虑这些因素。

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多