根据可用 RAM 调整 MySQL

Tuning MySQL based on available RAM

亲爱的,我已经完成了这个 article 但我无法在我的 Centos 6.2 上找到名为 '/proc/user_beancounters' 的文件,是否有任何标准计算来设置 my.cnf 基于可用 ram 以提高查询性能。

如果有任何方法,然后说我有 8GB RAM,那么 MyISAMInnodbmy.cnf 的配置是什么以获得最佳性能使用可用内存?

8GB RAM(任何OS,任何硬件),InnoDB 和 MyISAM,机器上没有其他应用程序运行:

key_buffer_size = 800M           -- for caching MyISAM indexes
innodb_buffer_pool_size = 2500M  -- for caching InnoDB data and indexes

如果您有其他应用 运行,这些数字可能需要降低一些。

Reference.

在出现特定问题之前,将其他内容保留为默认值。

/proc/ 包含系统信息,而不是文件本身。什么是 user_beancounters

我不得不查找 /proc/user_beancounters,它似乎是为 OpenVz 实现的 Linux 的扩展。我怀疑它会出现在普通的 CentOS Linux.

首先推荐你don't use MyISAM。它不是 ACID 存储引擎,它使用 table-locking。 MyISAM 的唯一好处是它可以将数据存储在比 InnoDB 更少的磁盘 space 中(取决于您的 table 结构)。

没有神奇的调整值可以使所有工作负载都达到最佳状态。如果有,它们将不是可调选项,它们只是 pre-set 的正确值。

通常情况下,您拥有的数据多于可用 RAM 的容量,因此考虑到服务器上 RAM 的其他用途,折衷方案是将 innodb_buffer_pool_size 设置得尽可能高。例如,如果您有 Apache 或 Java 应用程序或内存缓存或其他 RAM 用户,请确保他们有他们需要的东西。

您需要 运行 针对您的数据进行的查询也是一个重要的考虑因素。如果您有很多查询一直扫描您的 table,那么很难将它们保留在缓冲池中。但是典型的 OLTP 工作负载在 "hot spots" 上稳定下来,并在 80% 的时间内查询 20% 的数据。缓存在这里有很大帮助,因为最多 frequently-requested 数据被缓存。

很难针对 OLAP 工作负载进行优化,因为您的查询可能会扫描大量数据库,并且您的数据库大于可用 RAM。

所以基本准则是:

  • 如果可以,请不要使用 MyISAM。
  • 确保其他进程拥有所需的 RAM。
  • 剩余的 RAM,尽可能多地提供给 innodb_buffer_pool_size。人们通常猜测可用 RAM 的 80%。请记住,缓冲池使用的值比您设置的值高出大约 +10%。
  • 如果您的数据库小于 RAM,那么使缓冲池大于数据库的大小没有任何好处。 InnoDB 只缓存每个数据库页面一次。