我有一台专用的 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
如能提供任何有关优化 my.cnf 配置,甚至提出新配置的帮助,我将不胜感激。
答案1
只有在 12GB 机器上配置 16GB 内存时才会出现问题,即 MySQL 试图使用比系统更多的内存资源。大多数 MySQL 服务器都配置为使用过多内存,但这并不会导致它们从第一天开始运行不佳。如果机器没有交换且 MySQL 没有被 OOM 杀死,那么问题并不在于它是 12GB 机器上配置 16GB 内存的机器。
如果问题出在 MySQL 方面,您可以先使用 检查进程列表SHOW PROCESSLIST;
。如果耗时 500 秒,您肯定会看到一些挂起的查询。如果正在执行的查询被截断,您可以运行SHOW FULL PROCESSLIST;
。
我还建议打开慢查询日志。一旦您发现任何问题查询,您可以使用解释语句来查看您的查询是否正在使用您拥有的索引。
如果将问题隔离到数据库,仍然有很多变量。第一步是找出哪些查询运行缓慢,然后从那里开始。您可能会发现,改进查询将比任何服务器端配置更改带来最大的改进。