2008-11-06 43 views
12

我正在开发一个使用Java servlet访问Mysql数据库的Web应用程序,我如何获取当前打开的数据库的连接数?如何计算打开的数据库连接?

编辑:

我想“SHOW PROCESSLIST”,这表明我:2695159,但这是不正确的,我只是在开发这个新的项目,我是唯一的用户,可能没有那么多进程运行,我想要的是访问我的项目的数据库,而不是所有数据库用户的数量,但仅登录到我的数据库只有一个表的用户数。

回答

2

SHOW PROCESSLIST

9

你可以使用MySQL命令show processlist获得连接的数量。

但是,这也会显示任何使用相同的用户ID到数据库的连接,这可能不是来自您的servlet。

一般来说,我建议您最好使用连接池对象(请参阅http://java-source.net/open-source/connection-pools)来管理与MySQL服务器的连接。这可以通过使数据库连接持久化来提高性能,所以每次页面加载时都不会总是有新的数据库连接开销。

如果你的servlet需要知道连接的数量,那么你的连接池应该有一个方法告诉你当前有多少连接是活动的。

3

显示像像“threads_connected的” 或 显示全球状态的状态“threads_connected的”

不知道有关在用户上下文这两个之间的区别,你仍然可以从你会看到问题的困扰所有连接,而不仅仅是来自您的应用的连接。

你甚至可以检查Threads_running,只看到正在运行的线程(例如不睡觉)。

13

根据您的MySQL版本,你可以在

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

进行选择,你可以做一个where用户,数据库,主机IP之间。

例如:

USE information_schema; 
SELECT COUNT(*) FROM PROCESSLIST WHERE db ="mycase" AND HOST LIKE "192.168.11.174%" 
2

只能从Information_Schema.Processlist选择属于你的数据。这意味着如果您以root用户身份登录,则只能将其用于监控,否则您将看到来自您登录的用户的连接。

如果你想适当的监测SQL,这将是:

SELECT variable_value 
FROM INFORMATION_SCHEMA.GLOBAL_STATUS 
WHERE variable_name='threads_connected' 
3

运行以下查询,它列出了主机名和没有。来自每个主机的连接:

SELECT host,count(host)FROM information_schema。processlist GROUP BY主机;

0

你可以用这个

SHOW GLOBAL STATUS; 或 显示全局状态,如“Threads_connected”;

从Connections状态您可以找出连接总数。

0

您也可以通过计算显示打开的连接状态从Threads_connected变量名是这样的:

SHOW STATUS WHERE variable_name = 'Threads_connected'; 

或者你也可以直接从information_schema.PROCESSLIST计数进程列表如下图所示:

SELECT COUNT(*) FROM information_schema.PROCESSLIST;