mysql总是使用最大连接

时间:2011-12-19 10:28:11

标签: mysql mysql-error-1064

我的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

2 个答案:

答案 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. index.php页面上的低效位(我假设这将是最热门的页面之一)
  2. 检查您的GA以查找最多点击页面。
  3. 检查MySQL慢查询并缓存这些内容。

答案 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中添加以上变量并重启服务器。