我有LAMP服务器有4个核心CPU和32 GB的RAM.We运行在它上的一个大型网站。我的服务器上现在有以下问题。
当我使用Mysqlreport工具监视mysql服务器时,我总是看到下面的连接使用情况。以及在网站中报告连接问题的用户。
_
Connections _______________________________
Max used 251 of 250 %Max: 100.40 Total 748.71k 3.5/s但是当我使用“显示进程列表”命令时,它不会输出任何内容。我们所有的DBs都使用MyISAM引擎。
我的文件粘贴在下面:
######################
[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服务器是否需要优化?
请回答我以上两个问题。
提前谢谢你,
阿伦
发布于 2011-12-19 11:04:41
我注意到您已经在使用MySQL查询缓存。
您试过使用MySQL工作台连接到MySQL数据库吗?它提供了一种查看MySQL数据库的图形方法,包括进程列表。
如果您在防火墙后面,请尝试使用
show full processlist不过,我认为这是没有帮助的。
我假设您正在使用提供网页服务。因此,这意味着您将发现大部分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;
?>您需要先找到要缓存的内容。好的起点是:
发布于 2011-12-21 07:56:00
在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但是取决于您的DB大小和您的应用程序如何访问(获取)数据,我们可以修改上面的变量。
减少wait_timeout=30。
关于这件事,我真的没有任何头绪:连接_________________
最大值使用250 %中的251次最大: 100.40共计748.71k 3.5/s
显示PROCESSLIST\g
应该提供进程在任何状态下都连接到DB的列表(睡眠/读取.(等等)
在my.cnf中添加上述变量并重新启动服务器。
https://stackoverflow.com/questions/8559965
复制相似问题