【问题标题】:MySQL memory usage for large database大型数据库的 MySQL 内存使用情况
【发布时间】:2014-01-04 21:03:31
【问题描述】:

我们有一个 MySQL 数据库 (OLD_DATA),其中许多分区表的大小已经超过 100GB。为了提高服务器性能,我们考虑创建一个并行 DB (NEW_DATA) 并开始在 NEW_DATA 中收集新数据。

数据库是 MyISAM,服务器有 96GB RAM。

在此之后 OLD_DATA 将不会被访问。

这种方法是否有助于提高服务器在 RAM 和 CPU 使用率方面的性能? OLD_DATA 中的数据会加载到内存中吗?

【问题讨论】:

  • 数据库通常不会一次将整个数据库加载到内存中。索引(和其他聚类技术)的使用允许良好的算法选择和数据访问:即只读取需要的内容,当它需要。
  • 取决于您查询新数据的方式以及您拥有的索引设置。只是将其移至新表并不能保证任何更好的性能。你有很多内存,所以你应该能够为快速查询建立良好的索引
  • 感谢您的 cmets。我同意索引和优化查询是必不可少的。但我希望迁移到新数据库并以某种方式隔离旧数据库,这样旧数据库就不会占用内存。
  • @user1434805 为什么“占用”主内存?数据库只会在认为合适时加载/缓存磁盘页面。这通常应该远小于媒体上数据的大小。
  • @user1434805 无论如何,创建一个新数据库本质上不会使数据访问速度更快。但如果“[OLD_DATA] 将不会被访问”,那么听起来“OLD_DATA”将被转换为历史档案——在这种情况下,建立档案系统/流程可能是有益的。

标签: mysql performance partitioning myisam


【解决方案1】:

请提供SHOW CREATE TABLE。如果正如您所暗示的那样,它是分区的,那么我们需要将其纳入分析。

通常,如果不再以任何方式访问“旧”行,它们不会受到伤害,也无需执行您所做的操作。请详细说明您认为“慢”的查询,最好提供EXPLAIN SELECT

MyISAM 在“key_buffer”中缓存索引块;索引有多大? key_buffer_size 设置为什么?数据块由操作系统缓存。

对于一个系统来说,拥有一个数倍于 RAM 的数据集是非常“正常的”。性能取决于数据集的“工作集”以及查询数据的积极程度。您已经暗示不使用“旧”行,因此不属于“工作集”。

另一方面,如果您有“表扫描”,则整个表都是工作集的一部分。我们很有可能会建议如何将这些查询更改得更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2021-03-03
    • 2013-02-11
    • 2019-12-14
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多