优化 MySQL 设置 - mysqld 内存不足

bab*_*eii 15 mysql

我对更改 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
Run Code Online (Sandbox Code Playgroud)

服务器规格是:

CPU Cores   2 cores
RAM (Memory)    1GB
SSD (Disk Space)    20GB
Run Code Online (Sandbox Code Playgroud)

运行 Ubuntu 12.04 LTS

这是我的分区:

NAME   FSTYPE   SIZE MOUNTPOINT LABEL
vda              20G            
??vda1 ext4     476M /boot      
??vda2 swap     477M [SWAP]     
??vda3 ext4    19.1G / 
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

查看错误日志,我可以看到 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
Run Code Online (Sandbox Code Playgroud)

Rin*_*ind 10

来自 serverguide wiki 的一般答案

MySQL 调谐器 安装 mysqltuner

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

sudo apt-get install mysqltuner
Run Code Online (Sandbox Code Playgroud)

然后一旦安装,运行它:

 mysqltuner
Run Code Online (Sandbox Code Playgroud)

并等待其最终报告。顶部提供有关数据库服务器的一般信息,底部提供调整建议以更改 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_size, max_heap_table_size variable: 保持这些相等和高。
  • join_buffer_size,少量增加;它将乘以max_connections
  • innodb_buffer_pool_size. 让它高。