【问题标题】:How to count open db connections?如何计算打开的数据库连接?
【发布时间】:2010-09-21 03:55:01
【问题描述】:

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

编辑:

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

【问题讨论】:

    标签: java mysql servlets jdbc


    【解决方案1】:

    显示进程列表

    【讨论】:

    • 这不计算进程
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      显示“Threads_connected”等状态 要么 显示全局状态,如“Threads_connected”

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

      您甚至可以检查 Threads_running 以仅查看正在运行的线程(例如不休眠)。

      【讨论】:

        【解决方案4】:

        根据您的 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%"
        

        【讨论】:

          【解决方案5】:

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

          如果你想要适当的监控 SQL,它将是:

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

          【讨论】:

            【解决方案6】:

            运行以下查询,它会列出主机名和编号。每个主机的连接数:

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

            【讨论】:

              【解决方案7】:

              你可以用这个

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

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

              【讨论】:

                【解决方案8】:

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

                SHOW STATUS WHERE variable_name = 'Threads_connected';
                

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

                SELECT COUNT(*) FROM information_schema.PROCESSLIST;
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-03-13
                  • 1970-01-01
                  • 2023-04-03
                  • 2011-03-06
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多