mysql总是使用最大连接数
我有LAMP服务器有4核心CPU和32 GB RAM.We正在运行一个大型网站。我的服务器中有以下问题。mysql总是使用最大连接数
当我使用Mysqlreport工具来监视MySQL服务器时,我总是看到如下的连接使用情况。用户报告网站中的连接问题。
_
Connections _______________________________
Max used 251 of 250 %Max: 100.40 Total 748.71k 3.5/s
但是当我使用 “显示进程列表” 命令,将输出什么。我们为我们所有的数据库使用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服务器的任何优化?
请回复我上面的两个问题。
由于提前,
Aruns
我注意到,你已经在使用MySQL查询缓存。
您是否尝试过使用MySQL工作台连接到您的MySQL数据库?它提供了检查MySQL数据库的图形化方式,包括进程列表。
如果您在防火墙后面,请尝试使用
show full processlist
不过,我认为这不会真正的帮助。
我会假设你正在使用PHP-MySQL提供网页。所以这意味着你将主要发现MySQL连接是由PHP创建的。查看一次有多少个apache线程正在运行。你可以尝试:
ps aux |grep httpd |wc -l
如果你有更多的线程在Apache上,连接到MySQL,那么你知道你有问题。
你提到你有一个繁忙的网站,因此,你的问题的真正答案是缓存你的内容,可能使用memcached。这个想法是减少你的MySQL服务器的命中。你的服务器有很多内存,非常适合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;
?>
你需要找到第一缓存哪些内容。好的地方是:
- 索引上的低效位。php页面(我认为这将是最受欢迎的页面之一)
- 检查你的GA的大多数热门网页。
- 检查您的MySQL缓慢查询并缓存这些内容。
在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。
对此真的我没有任何线索:(.. 连接_ __ _ __ _ __ _ __ _ ____
最大使用250%251 Max:100.40总计748.71k 3.5/s
SHOW PROCESSLIST \ g
应提供进程列表连接到数据库的任何状态(睡眠/读取.....等)
在my.cnf中添加上述变量并重新启动服务器。
明白了。它报告max_used_connections,这是服务器上次重新启动后的高水位 - 这与当前的连接数不一样。从:http://serverfault.com/questions/342225/mysql-always-using-maximum-connection 谢谢大家为你的时间。 – ArunS 2011-12-19 13:40:17