MySQL 5.6安装完以后,每过一段时间就会莫名其妙挂掉。并且还很难启动。非要重启服务器,才能拉起mysql。mysql
后来分析是因为mysql启动后内存太高,跑一段时间就会因为内存不足而被杀死。sql
今天分析了这个问题,缘由及结果以下。缓存
我安装的版本是5.6.35。它默认占用内存达400多M, 而原来使用的5.0 只有30M。服务器
最开始我尝试调整这些参数:nosql
innodb_buffer_pool_size = 64M spa
key_buffer_size = 8Mrest
query_cache_size = 16M orm
tmp_table_size = 16M 内存
key_buffer_size = 32Mit
调整后内存是降低一点点。但仍是400M以上。
最后查出5.6默认的设置以下
performance_schema_max_table_instances 12500
table_definition_cache 1400 #打开表的缓存
table_open_cache 2000 #表定义的缓存
其中 table_open_cache 是mysql每打开一个表,都会读入一些数据到table_open_cache 缓存中。当mysql在这个缓存中找不到相应的信息时,才会去磁盘上直接读取。多说一句,增长 table_open_cache ,会增长文件描述符,当把 table_open_cache 设置为很大时,若是系统处理不了那么多文件描述符,那么就会出现客户端失效,链接不上。
而我如今打开表的数目是63个,彻底用不了那么多。
mysql> show status like "open%";
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Open_files | 16 |
| Open_streams | 0 |
| Open_table_definitions | 70 |
| Open_tables | 63 |
| Opened_files | 147 |
| Opened_table_definitions | 0 |
| Opened_tables | 0 |
+--------------------------+-------+
修改
performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256
重启mysql
service mysqld restart
发现mysql内存降低到81M。不错。^^
感谢连接:http://nosqldb.org/p/55ceaac5c3f8a8336f3bf727