低配置计算机对于MySQL5.6.x版本的调整

一直以来认为:MySQL这种健壮性特别高的软件默认配置没有什么大毛病,安装时内存就占用50%左右是正常的,前段时间还因为mysql崩溃,调整了php的子进程,但在运行久了之后内存占用仍有90%。
直到我了解到同学服务器上的MySQL占用不到百分之十时,才开始怀疑我的MySQL默认配置的问题。
在网上搜到答案并实践了一下,才发现作为一台数据库服务器兼web程序服务器,MySQL的默认配置不是很合理,尤其是PHP这种内存占用很高的网站
先来简单粗暴的讲讲解决办法。

解决办法

在linux系统中修改my.cnf,(默认路径/etc/my.cnf)
我的1G内存配置:

performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256

重启mysql服务,mysqld内存占用降到9%,且网站流程运行。

原理

我们修改的到底是什么配置呢?
原来mysql 5.6.6及以上版本默认开启了性能模式,这是MySQL内存占用量飙升的主要原因,另外5.6.7和其他5.6.x版本默认提升了一些和内存相关的变量,尽管有一部分MySQL会根据主机实际情况进行动态配置,但不是全部,尤其对小内存的PHP主机不是很友好。

 

table_definition_cache(表定义缓存)

5.6.7及更低版本默认值400,5.6.8及更高版本默认值-1(即自动分配大小)。
如果你使用大量的表,你可以增大这个值,以此加快表的打开速度。和普通的表缓存不同,表定义缓存占用很少的内存空间而且不会使用文件描述符。

在InnoDB中,此变量用来限制数字词典缓冲区中打开表实例数量,如果打开表实例的数量超过这个值,LRU机制将从数据字典缓存中按照LRU算法,将不常用的表移除。

表定义缓存的官方说明:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_table_definition_cache

table_open_cache

5.6.7及更低版本默认值400,5.6.8及更高版本默认值2000。
这个值表示了缓冲区可容纳的表数量。
table cache对innodb存储引擎影响其实不是很大,innodb有自己的数据字典,可以缓存相关表信息。
更多相关信息请查看本站另一篇文章:https://imdyc.com/database/mysql如何打开和关闭表.html

performance_schema_max_table_instances

性能模式概述

根据官网描述,性能模式是工作在MySQL服务器底层的监测系统。它监控的是Mysql表上的的“事件”(例如SQL语句、函数等等)。性能模式旨在提供关于服务器执行的有用信息
性能模式官方介绍:
https://dev.mysql.com/doc/refman/5.6/en/performance-schema.html

 

您可能还喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注