首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql总是使用最大连接

mysql总是使用最大连接
EN

Stack Overflow用户
提问于 2011-12-19 10:28:11
回答 2查看 4.4K关注 0票数 1

我有LAMP服务器有4个核心CPU和32 GB的RAM.We运行在它上的一个大型网站。我的服务器上现在有以下问题。

当我使用Mysqlreport工具监视mysql服务器时,我总是看到下面的连接使用情况。以及在网站中报告连接问题的用户。

_

代码语言:javascript
复制
Connections _______________________________

Max used 251 of 250 %Max: 100.40 Total 748.71k 3.5/s

但是当我使用“显示进程列表”命令时,它不会输出任何内容。我们所有的DBs都使用MyISAM引擎。

我的文件粘贴在下面:

代码语言:javascript
复制
######################

[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连接池?我怎么能找到它?

我还有另一个问题。

代码语言:javascript
复制
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服务器是否需要优化?

请回答我以上两个问题。

提前谢谢你,

阿伦

EN

回答 2

Stack Overflow用户

发布于 2011-12-19 11:04:41

我注意到您已经在使用MySQL查询缓存。

您试过使用MySQL工作台连接到MySQL数据库吗?它提供了一种查看MySQL数据库的图形方法,包括进程列表。

如果您在防火墙后面,请尝试使用

代码语言:javascript
复制
show full processlist

不过,我认为这是没有帮助的。

我假设您正在使用提供网页服务。因此,这意味着您将发现大部分MySQL连接都是由PHP生成的。查看一次运行多少个apache线程。你可以试试:

代码语言:javascript
复制
ps aux |grep httpd |wc -l

如果apache上有更多连接到MySQL的线程,那么您就知道有问题了。

因此,您提到您有一个繁忙的站点,因此,解决问题的真正答案是缓存内容,可能使用memcached。这样做的目的是减少对MySQL服务器的访问。您的服务器有大量的RAM,非常适合memcached。

这个想法是在一定时间内重用内容,这取决于内容是否需要新鲜:

代码语言:javascript
复制
<?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
EN

Stack Overflow用户

发布于 2011-12-21 07:56:00

在my.cnf中添加以下变量:如果只使用MyISAM引擎,下面的变量将根据硬件配置提供最佳结果。

代码语言:javascript
复制
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中添加上述变量并重新启动服务器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8559965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档