【问题标题】:How can I see how many MySQL connections are open?如何查看打开了多少 MySQL 连接?
【发布时间】:2011-09-24 00:39:51
【问题描述】:

在运行于 Apache 的 PHP 中,如何查看当前请求期间通过 mysql_connect 打开了多少连接?

我知道如果我用相同的参数调用mysql_connect 函数 100 次,它总是会返回相同的连接链接。一旦连接已经存在,它将不会启动新连接。

但我只是想确保mysql_connect 没有开始新的。

我正在使用包含许多 mysql_connect 函数调用的旧系统。

Apache 中是否有任何设置,或者有什么方法可以在 Apache 或 MySQL 日志文件中记录此数量的连接?

【问题讨论】:

  • 一旦成功创建连接,您就可以将其记录下来。

标签: php mysql apache


【解决方案1】:

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

【讨论】:

  • 进程列表会显示mysql服务器连接正确吗?还是显示打开了多少个连接?
  • 是的,你现在是对的,我想他的问题是找出在给定时刻打开的连接数
【解决方案2】:

我不认为你可以看到连接数,但可以限制连接到 mysql 服务器。

【讨论】:

    【解决方案3】:

    我认为有几种方法:

    SHOW STATUS WHERE `variable_name` = 'Threads_connected'
    

    或者您可以执行SHOW PROCESSLIST 并在Id 列中找出唯一值。在旧的 PHP API mysql 中,有一个 mysql_list_processes 函数也与 SHOW PROCESSLIST 一样。

    但第一个应该适合你。也许您可能想查看其他STATUS variables

    【讨论】:

      【解决方案4】:

      当前连接状态:

      mysqladmin status
      

      查看Threads: 计数。可以通过以下命令获取有关当前连接的更多详细信息:

      user@host:~$ mysqladmin -uroot -ppass extended-status | grep Threads
      | Threads_cached                           | 0           |
      | Threads_connected                        | 3           |
      | Threads_created                          | 3           |
      | Threads_running                          | 1           |
      
      user@host:~$ mysqladmin -uroot -ppass processlist
      +----+------+-----------+----+---------+------+-------+------------------+
      | Id | User | Host      | db | Command | Time | State | Info             |
      +----+------+-----------+----+---------+------+-------+------------------+
      | 53 | root | localhost |    | Sleep   | 258  |       |                  |
      | 54 | root | localhost |    | Sleep   | 253  |       |                  |
      | 58 | root | localhost |    | Query   | 0    |       | show processlist |
      +----+------+-----------+----+---------+------+-------+------------------+
      

      仅供参考 mysqladmin -v -uroot -ppass processlistshow full processlist 的模拟。

      命令可以缩短为任何唯一的前缀,并同时调用:

      user@host:~$ mysqladmin -v -uroot -ppass proc stat
      +----+------+-----------+----+---------+------+-------+-----------------------+
      | Id | User | Host      | db | Command | Time | State | Info                  |
      +----+------+-----------+----+---------+------+-------+-----------------------+
      | 53 | root | localhost |    | Sleep   | 951  |       |                       |
      | 54 | root | localhost |    | Sleep   | 946  |       |                       |
      | 65 | root | localhost |    | Query   | 0    |       | show full processlist |
      +----+------+-----------+----+---------+------+-------+-----------------------+
      Uptime: 1675  Threads: 3  Questions: 171  Slow queries: 0  Opens: 235  
      Flush tables: 1  Open tables: 57  Queries per second avg: 0.102
      

      【讨论】:

        【解决方案5】:

        还有其他关于连接的有用变量,在您的特定情况下,变量Connections 可能有助于确定您的代码是否建立了太多连接。只需在运行代码之前和之后检查它的值。

        # mysql -e 'SHOW STATUS WHERE variable_name LIKE "Threads_%" OR variable_name = "Connections"'
        
        +-------------------+-------+
        | Variable_name     | Value |
        +-------------------+-------+
        | Connections       | 22742 |
        | Threads_cached    | 1     |
        | Threads_connected | 87    |
        | Threads_created   | 549   |
        | Threads_running   | 51    |
        +-------------------+-------+
        
        • 连接

          与 MySQL 服务器的连接尝试次数(成功与否)。

        • Threads_cached

          线程缓存中的线程数。

        • Threads_connected

          当前打开的连接数。

        • Threads_created

          为处理连接而创建的线程数。如果 Threads_created 很大,您可能需要增加 thread_cache_size 值。缓存未命中率可以计算为 Threads_created/Connections。

        • 线程运行

          未休眠的线程数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-15
          • 2011-12-15
          • 1970-01-01
          • 2014-06-26
          • 1970-01-01
          • 2017-03-13
          相关资源
          最近更新 更多