16 核 12 GB RAM 专用 MySql 配置

kor*_*esh 5 mysql innodb configuration

我有一个专用的 16 核 12 GB RAM Mysql 服务器,由于我将其配置为 16 GB 服务器,因此性能非常差,我想这解释了为什么该站点现在需要超过 500 秒来呈现单个页面。我使用 memcached 来缓存查询并使用 InnoDB 作为数据库引擎。

#8 core/16GB config stolen from http://groups.drupal.org/node/28830

back_log                        = 50
max_connect_errors              = 9999999
table_cache                     = 5000
binlog_cache_size               = 1M
max_heap_table_size             = 128M
sort_buffer_size                = 500K
join_buffer_size                = 500K
thread_cache_size               = 100
thread_concurrency              = 16
query_cache_size                = 512M
query_cache_limit               = 8M
query_cache_min_res_unit        = 2K
thread_stack                    = 192K
tmp_table_size                  = 384M
long_query_time                 = 2

# *** INNODB Specific options ***

innodb_additional_mem_pool_size = 80M
innodb_buffer_pool_size         = 12G
innodb_file_io_threads          = 4
innodb_thread_concurrency       = 16
innodb_log_buffer_size          = 20M
innodb_log_file_size            = 800M
innodb_log_files_in_group       = 3
innodb_max_dirty_pages_pct      = 90
innodb_lock_wait_timeout        = 120
innodb_file_per_table           = 1
Run Code Online (Sandbox Code Playgroud)

任何有关优化 my.cnf 配置的帮助,甚至是设计一个新配置,都将不胜感激。

小智 3

在 12GB 机器上配置 16GB 会出现问题的唯一原因是 MySQL 是否尝试使用比系统更多的内存资源。大多数 MySQL 服务器都配置为使用过多的内存,但这不会导致它们从第一天起就运行不佳。如果机器没有交换并且 MySQL 被 OOM 杀死,则事实并不是它是 16GB 机器的配置在 12GB 盒子上。

如果问题出在 MySQL 端,您可以通过检查进程列表开始SHOW PROCESSLIST;。如果花费 500 秒,您肯定会看到一些挂起的查询。如果正在执行的查询被截断,您可以运行SHOW FULL PROCESSLIST;.

我还建议打开慢查询日志记录。一旦发现任何有问题的查询,您可以使用EXPLAIN语句来查看您的查询是否正在使用您拥有的索引。

如果将问题隔离到数据库,仍然存在很多变数。第一步是找出哪些查询进展缓慢并从那里开始。您可能会发现,与任何服务器端配置更改相比,改进查询将带来最大的改进。