我的LAMP服务器有4核CPU和32 GB RAM。我们正在运行一个大型网站。我现在在服务器中遇到以下问题。
当我使用Mysqlreport工具监视mysql服务器时,我总是看到连接用法,如下所示。用户在网站上报告连接问题。
_
Connections _______________________________
Max used 251 of 250 %Max: 100.40 Total 748.71k 3.5/s
但是当我使用“show process list”命令时,它什么都不会输出。我们正在为所有数据库使用MyISAM引擎。
我的Mysql配置文件粘贴在下面:
######################
[mysqld]
max_connections = 250
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
skip-name-resolve
skip-bdb
wait_timeout = 60
thread_cache_size = 100
table_cache = 1024
key_buffer = 384M
log_slow_queries=/mysql-log/mysql-slow.log
query-cache-size=512M
query-cache-type=1
query_cache_limit=20M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#
谁在使用我的Mysql连接池?我怎么能找到它?
我有另一个问题。
Sometimes the Load average goes beyond 4-8 range. See below:
13:40:02 up 2 days, 10:39, 0 users, load average: 5.03, 1.68, 0.93
那时我可以看到mysql是CPU的最大消费者。 mysql Server中是否需要进行任何优化?
请回复上述两个问题。
提前致谢,
Aruns
答案 0 :(得分:1)
我注意到您已经在使用MySQL Query Cache。
您是否尝试过使用MySQL工作台连接MySQL数据库?它提供了一种检查MySQL数据库的图形方式,包括进程列表。
如果您位于防火墙后面,请尝试使用
show full processlist
但是,我认为这不会有帮助。
我认为你使用PHP - MySQL来提供网页。所以这意味着你将大多发现MySQL连接是由PHP构成的。要查看一次运行多少个apache线程。你可以尝试:
ps aux |grep httpd |wc -l
如果你在apache上有更多的线程,连接到MySQL,那么你知道你有问题。
你提到你有一个繁忙的网站,因此,你的问题的真正答案是缓存你的内容,可能使用memcached。我们的想法是减少MySQL服务器的命中率。您的服务器有足够的RAM,非常适合memcached。
这个想法是在一定时间内重复使用内容,具体取决于内容是否需要新鲜度:
<?php
$cachedContent = $memcache->get("cacheKey");
if (!$cachedContent) {
// retrieve from MySQL and formulate HTML here
// you can use obstart so that you can reuse your previous code
ob_start();
// your previous code here
// echo or
?>
<div>
previous generated content from mysql
</div>
<?php
// now cachedContent contains your previous generated HTML
$cachedContent = ob_get_contents();
// set content into memcache
$memcache->set("cacheKey", $cachedContent, false, 1800);
// clear the buffer
ob_end_flush();
}
echo $cachedContent;
?>
您需要先找到要缓存的内容。好的开始是:
答案 1 :(得分:1)
在my.cnf中添加以下变量: 如果您打算仅使用MyISAM引擎,则根据您的硬件配置,变量将提供最佳结果。
max_allowed_packet = 1M
table_open_cache = 250
sort_buffer_size = 2M
thread_stack = 128K
join_buffer_size = 1M
query_cache_limit = 400k
query_cache_size = 300M
key_buffer_size = 5G
read_buffer_size = 2M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 6G
myisam_recover=FORCE,BACKUP
但是,取决于您的数据库大小以及您的应用程序访问(获取)数据的方式,我们可以修改上述变量。
减少wait_timeout = 30。
对此我真的没有任何线索:( .. 连接 _ __ _ __ _ __ _ __ _ ____ < /强>
最大使用251的250%最大值:100.40总计748.71k 3.5 / s
SHOW PROCESSLIST \ g
应该提供进程列表在任何状态下与DB连接(睡眠/阅读等等)
在my.cnf中添加以上变量并重启服务器。