优化MySQL设置 – mysqld耗尽内存

我对我的my.conf文件中要更改哪些设置以优化我的服务器感到困惑(由于我们的高流量,mysql服务器不断崩溃)。

这是my.cnf文件:

[mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking key_buffer = 16M max_allowed_packet = 16M myisam-recover = BACKUP #max_connections = 100 #table_cache = 64 #thread_concurrency = 10 query_cache_limit = 1M query_cache_size = 16M 

服务器规格是:

 CPU Cores 2 cores RAM (Memory) 1GB SSD (Disk Space) 20GB 

运行Ubuntu 12.04 LTS

这是我的分区:

 NAME FSTYPE SIZE MOUNTPOINT LABEL vda 20G ├─vda1 ext4 476M /boot ├─vda2 swap 477M [SWAP] └─vda3 ext4 19.1G / 

任何帮助将非常感激。

查看错误日志,我可以看到mysqld内存不足:

 Feb 17 11:02:06 111488 kernel: [8276839.559141] Out of memory: Kill process 20719 (mysqld) score 75 or sacrifice child Feb 17 11:02:06 111488 kernel: [8276839.559209] Killed process 20719 (mysqld) total-vm:1347424kB, anon-rss:30524kB, file-rss:0kB 

来自serverguide wiki的一般答案 :

MySQL调谐器 安装mysqltuner

MySQL Tuner是一个非常有用的工具,它将连接到正在运行的MySQL实例,并提供有关如何为您的工作负载进行最佳配置的建议。 服务器运行的时间越长,mysqltuner提供的建议就越好。 在生产环境中,请考虑在运行该工具之前至少等待24小时。 您可以从Ubuntu存储库安装mysqltuner:

 sudo apt-get install mysqltuner 

然后,一旦安装,运行它:

  mysqltuner 

并等待其最终报告。 顶部提供有关数据库服务器的一般信息,底部提供了要在my.cnf中更改的调整建议。 其中大部分都可以在服务器上实时更改而无需重新启动,查看官方MySQL文档(参考资料部分中的链接),了解生产中相关变量的变化。 以下是来自生产数据库的示例报告的一部分,该数据库显示增加查询缓存量可能会带来一些好处:

 --------建议----------------------------------------- ------------
一般建议:
    运行OPTIMIZE TABLE以对表进行碎片整理以获得更好的性能
    逐渐增加table_cache以避免文件描述符限制
要调整的变量:
     key_buffer_size(> 1.4G)
     query_cache_size(> 32M)
     table_cache(> 64)
     innodb_buffer_pool_size(> = 22G)

关于调优数据库的最后评论:虽然我们可以广泛地说某些设置是最好的,但性能因应用程序而异。 例如,最适合Wordpress的可能不是Drupal,Joomla或专有应用程序的最佳选择。 性能取决于查询类型,索引的使用,数据库设计的效率等等。 您可能会发现根据您正在使用的应用程序,花一些时间搜索数据库调优技巧很有用。 一旦超过某一点,您所做的任何调整都只会带来微小的改进,您最好不要改进应用程序,或者通过使用更强大的硬件或添加从属服务器来扩展数据库环境。


  • 观看mysqltuner报告的性能指标部分。 将最大可能内存保持在50%以下。
  • tmp_table_sizemax_heap_table_size variable :保持这些相等和高。
  • join_buffer_size ,少量增加; 它将乘以max_connections
  • innodb_buffer_pool_size 。 把它做得很高。

另一个可能的解决方法是在/etc/mysql/my.cnf配置的[mysqld]部分中使用以下内容。

 performance_schema = off 

资料来源: https : //serverfault.com/questions/564748/mysql-mariadb-crashes-frequently