我正在开发一个使用 Java servlet 访问 Mysql 数据库的 Web 应用程序,我如何才能获得当前打开的数据库的连接数?
编辑 :
我尝试了“show processlist”,它显示:2695159,但这不对,我只是在开发这个新项目,我是唯一的用户,不能运行那么多进程,我想要的是数量访问我项目数据库的用户,而不是所有 db 用户的数量,而只是那些登录到我只有一张表的数据库的用户。
根据您的 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%"
您可以使用 MySQL 命令show processlist
来获取连接数。
但是,这也会向您显示使用相同用户 ID 与数据库建立的任何连接,这些连接可能不是来自您的 servlet。
一般来说,我建议您最好使用连接池对象(请参阅http://java-source.net/open-source/connection-pools)来管理与 MySQL 服务器的连接。这可以通过使数据库连接持久化来提高性能,因此您不必总是为每个页面加载新数据库连接的开销。
如果您的 servlet 需要知道连接数,那么您的连接池应该带有一个方法,告诉您当前有多少连接处于活动状态。
显示“Threads_connected”之类的状态或显示“Threads_connected”之类的全局状态
不确定这两者在用户上下文中的区别,您可能仍然会遇到这样的问题,即您会看到所有连接,而不仅仅是来自您的应用程序的连接。
您甚至可以检查 Threads_running 以仅查看正在运行的线程(例如不休眠)。
运行以下查询,它列出了主机名和编号。每个主机的连接数:
SELECT host,count(host) FROM information_schema.processlist GROUP BY host;
显示进程列表
您只能从属于您Information_Schema.Processlist
的数据中进行选择。这意味着只有当您以 root 身份登录时,您才能使用它进行监控,否则您将看到来自您登录的用户的连接。
如果您想要正确监控 SQL,它将是:
SELECT variable_value
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE variable_name='threads_connected'
您还可以通过显示Threads_connected
变量名称的状态来计算打开的连接,如下所示:
SHOW STATUS WHERE variable_name = 'Threads_connected';
或者您也可以直接从information_schema.PROCESSLIST
下面计算进程列表:
SELECT COUNT(*) FROM information_schema.PROCESSLIST;
你可以用这个
显示全球状态;或显示全局状态,如“Threads_connected”;
从连接状态,您可以找出连接总数。