0

尽管 httpd 上没有用户,但我的数据库似乎有许多打开的连接。

mysql> SHOW PROCESSLIST;
+-------+----------+--------------------+---------------------+---------+------+-------+------------------+
| Id    | User     | Host               | db                  | Command | Time | State | Info             |
+-------+----------+--------------------+---------------------+---------+------+-------+------------------+
| 22865 | rdsadmin | localhost:51066    | mysql               | Sleep   |    8 |       | NULL             |
| 25098 | ubuntu   | 123.45.67.89:48060 | database_name_here! | Sleep   |  350 |       | NULL             |
| 25099 | ubuntu   | 123.45.67.89:48069 | database_name_here! | Sleep   | 3731 |       | NULL             |
| 25126 | ubuntu   | 123.45.67.89:49558 | database_name_here! | Sleep   |  349 |       | NULL             |
| 25161 | ubuntu   | 123.45.67.89:50770 | database_name_here! | Sleep   |  289 |       | NULL             |
| 26583 | ubuntu   | 123.45.67.89:37593 | database_name_here! | Sleep   | 4550 |       | NULL             |
| 29729 | ubuntu   | 123.45.67.89:49280 | database_name_here! | Sleep   |  953 |       | NULL             |
| 29737 | ubuntu   | 123.45.67.89:49489 | database_name_here! | Sleep   |  953 |       | NULL             |
| 29738 | ubuntu   | 123.45.67.89:49490 | database_name_here! | Sleep   |  349 |       | NULL             |
| 29755 | ubuntu   | 123.45.67.89:50674 | database_name_here! | Sleep   | 2751 |       | NULL             |
| 29759 | ubuntu   | 123.45.67.89:50892 | database_name_here! | Sleep   |  600 |       | NULL             |
| 35600 | ubuntu   | 123.45.67.89:49677 | NULL                | Query   |    0 | NULL  | SHOW PROCESSLIST |
+-------+----------+--------------------+---------------------+---------+------+-------+------------------+

我不明白为什么会有这么多的联系。我正在使用带有 RDS 的亚马逊 EC2,带有 PDO 的 apache/mysql/PHP。我有“开启”持久连接,但我认为这只是缓存了连接。即使在任何给定时间我的网站上有 1-2 个用户,似乎有 10 个连接始终保持打开状态。

这是什么原因,我该如何解决?这是正常行为吗,MySQL 是否有最小数量的连接保持打开以处理不同的用户?我似乎找不到任何有关如何分析正在发生的事情的信息。

4

1 回答 1

0

通常你会有一个从应用服务器(Apache httpd、nginx 等)到数据库的连接池。这些始终保持打开状态,因此当请求进入时不需要重新连接。请记住,连接到数据库可能需要几秒钟,但使用活动连接需要零时间。

你为什么要“解决”这个问题?这是现代应用程序堆栈的一个特性。如果他们不运行查询,则没有问题。

于 2013-10-16T16:48:41.903 回答