mysql my.cnf 用于具有 128GB RAM 服务器的 innodb

mysql my.cnf 用于具有 128GB RAM 服务器的 innodb

我有一台 128GB RAM 的服务器,但 mysqld 进程的 top 命令中 CPU 总是显示超过 100%(有时 >1000%)以下是 my.cnf 中 innodb 的部分配置请告知如何微调配置。谢谢

   innodb_buffer_pool_size         = 60G   #global buffer
   innodb_additional_mem_pool_size = 4M    #global buffer
   innodb_status_file                      #extra reporting
   innodb_file_per_table                   #enable always
   innodb_flush_log_at_trx_commit  = 0     #2/0 = perf, 1 = ACID
   innodb_table_locks              = 0     #preserve table locks
   innodb_log_buffer_size          = 256M  #global buffer
   innodb_lock_wait_timeout        = 60
   innodb_thread_concurrency       = 16    #recommend 2x core quantity
   innodb_commit_concurrency       = 16    #recommend 4x num disks
   innodb_support_xa               = 0     #recommend 0, disable xa to negate extra disk flush
   # skip-innodb-doublewrite

   #innodb_force_recovery       = 3

答案1

首先要说的是:Linux 系统上的 CPU 使用率 > 100% 并不意味着存在问题,只是表示系统使用了多个 CPU。16 核系统的最大负载可达 1600%,因此此类系统上的 1000% 负载意味着负载相当大,但绝对不是超载。

服务器实际上是否性能不佳,或者您只是担心看似高 CPU 使用率,但对于专用 DB 服务器来说可能完全没问题?


也就是说,如果服务器的 CPU 负载很重,那么拥有大量的 RAM 也无济于事;RAM 仅有助于缓存内容和减少磁盘 I/O(在大多数情况下这是一个瓶颈),而不能帮助实际处理。

您应该查看您的服务器实际上在做什么,包括用户负载和实际查询,然后尽可能优化您的数据库(如表、键和索引)以完成它需要完成的工作;或者,如果其他方法都失败了,就给它投入更多的 CPU 核心和/或找到一种方法将负载分散到多个服务器。

不知道任何事情关于您的服务器正在做什么,我们不可能告诉您更多信息。

相关内容