亲爱的,我经历了这一切article但不是我无法在我的 Centos 6.2 上找到名为 '/proc/user_beancounters'
的文件,是否有任何标准计算以根据可用 ram 设置 my.cnf
以增加查询性能。
如果有什么方法的话,假设我得到了8GB RAM
,那么MyISAM
和my.cnf
的配置是什么Innodb
使用可用 RAM 获得最佳性能?
最佳答案
我不得不查找/proc/user_beancounters,它似乎是为 OpenVz 实现的 Linux 的扩展。我怀疑它会出现在普通的 CentOS Linux 中。
首先推荐你don't use MyISAM .它不是 ACID 存储引擎,它使用表锁定。 MyISAM 的唯一好处是它可以将数据存储在比 InnoDB 更少的磁盘空间中(取决于您的表结构)。
没有神奇的调整值可以使所有工作负载都达到最佳状态。如果有,它们将不是可调选项,它们只是预先设置为正确的值。
通常情况下,您拥有的数据多于可用 RAM 的容量,因此考虑到服务器上 RAM 的其他用途,折衷方案是将 innodb_buffer_pool_size
设置得尽可能高。例如,如果您有 Apache 或 Java 应用程序或内存缓存或其他 RAM 用户,请确保他们有他们需要的东西。
您需要对数据运行的查询也是一个重要的考虑因素。如果您有大量查询一直扫描整个表,那么很难将它们保留在缓冲池中。但典型的 OLTP 工作负载定位于“热点”,并在 80% 的时间内查询 20% 的数据。缓存在这里有很大帮助,因为最常请求的数据会被缓存。
针对 OLAP 工作负载进行优化更加困难,在这种情况下,您的查询可能会扫描大量数据库,并且您的数据库大于可用 RAM。
所以基本准则是:
- 如果可以,请不要使用 MyISAM。
- 确保其他进程拥有所需的 RAM。
- 在剩余的 RAM 中,尽可能多地分配给
innodb_buffer_pool_size
。人们通常猜测可用 RAM 的 80%。请记住,缓冲池使用的值比您设置的值高出大约 10%。 - 如果您的数据库小于 RAM,那么让缓冲池大于数据库的大小没有任何好处。 InnoDB 只缓存每个数据库页面一次。
关于mysql - 基于可用 RAM 调优 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888358/