如何计算开放数据库连接?

时间:2008-11-06 19:38:29

标签: java mysql servlets jdbc

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

编辑:

我尝试了“show processlist”,它向我展示了:2695159,但这不对,我只是开发这个新项目,我是唯一的用户,无法运行那么多进程,我想要的是访问我的项目的数据库的用户数,而不是所有数据库用户的数量,而只是登录到我的数据库的只有一个表的用户数。

8 个答案:

答案 0 :(得分:15)

根据您的MySQL版本,您可以执行选择

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

您可以在用户,数据库和主机IP之间执行where

例如:

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

答案 1 :(得分:9)

您可以使用MySQL命令show processlist来获取连接数。

但是,这也会向您显示使用相同的userID与数据库建立的任何连接,这些连接可能不是来自您的servlet。

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

如果您的servlet需要知道连接数,那么您的连接池应该附带一个方法,告诉您当前有多少连接处于活动状态。

答案 2 :(得分:3)

显示类似'Threads_connected'的状态 要么 显示全局状态,如'Threads_connected'

不确定用户上下文中这两者之间的区别,您可能仍会遇到问题,即您会看到所有连接,而不仅仅是来自您应用的连接。

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

答案 3 :(得分:3)

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

SELECT host,count(host)FROM information_schema.processlist GROUP BY host;

答案 4 :(得分:2)

显示进程列表

答案 5 :(得分:2)

您只能从Information_Schema.Processlist中选择属于您的数据。这意味着只有在以root用户身份登录时才能使用它进行监控,否则您将看到来自您登录的用户的连接。

如果您想要正确监控SQL,它将是:

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

答案 6 :(得分:0)

您可以使用此

显示全球状况; 要么 显示全局状态,如“Threads_connected”;

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

答案 7 :(得分:0)

您还可以通过显示Threads_connected变量名称的状态来计算打开的连接,如下所示:

SHOW STATUS WHERE variable_name = 'Threads_connected';

或者您也可以直接从information_schema.PROCESSLIST计算流程列表,如下所示:

SELECT COUNT(*) FROM information_schema.PROCESSLIST;