ProxySQL v2.4.2 Client_Connections_non_idle统计值与预期不符问题咨询
ProxySQL v2.4.2 连接统计值异常问题解答
问题场景
查询ProxySQL客户端连接统计数据时,执行如下SQL:
select * from stats.stats_mysql_global where variable_name like 'Client_connection%';
返回结果如下:
+-------------------------------------+----------------+ | Variable_Name | Variable_Value | +-------------------------------------+----------------+ | Client_Connections_aborted | 0 | | Client_Connections_connected | 495 | | Client_Connections_created | 43785 | | Client_Connections_non_idle | 495 | | Client_Connections_hostgroup_locked | 0 | +-------------------------------------+----------------+
可以看到Client_Connections_non_idle取值始终与Client_Connections_connected一致,但执行show processlist;查看连接列表时,所有连接的Command字段状态均为Sleep,按常规认知Client_Connections_non_idle值应为0,与实际统计结果不符,当前使用ProxySQL版本为v2.4.2。
问题原因
你的认知存在偏差,核心是对Client_Connections_non_idle指标的定义理解错误:
Client_Connections_non_idle不统计正在执行SQL的活跃连接数,它的实际统计逻辑是:未进入空闲等待回收队列、持有完整前端客户端会话上下文的连接总数。- ProxySQL v2.4.x版本的连接生命周期逻辑中,即使连接处于Sleep状态等待客户端下发新请求,只要连接没有被主动断开、没有被放入空闲连接复用池等待销毁或复用,就会计入
Client_Connections_non_idle。 show processlist中显示的Command=Sleep仅代表当前连接没有正在执行的SQL语句,和该指标的统计维度完全无关:Sleep状态的连接只要还绑定着对应客户端会话、没有被回收,就会同时被计入Client_Connections_connected和Client_Connections_non_idle,这就是两个值完全相等的原因。- 只有当连接被主动关闭、或者进入内部空闲连接回收队列等待销毁时,才会从
Client_Connections_non_idle计数中扣减。如果实例配置的前端连接空闲超时时间(mysql_wait_timeout参数)较大,就会长期出现两个计数值完全相等的情况。
内容的提问来源于stack exchange,提问作者Primadi
相关产品推荐
相关产品推荐

