bitsCN.com
前言:最近在线上诊断QPS飙升的过程中深入进行了下Admin Ping Command的测试。此外,再一些国外文章中最近也读到了一些相关知识,所以写成一篇博文做一下总结。
由于查阅官方文档中没有关于Admin Ping Command的描述和介绍。因此,Google了很多页面,把大家的阐述做一个个人理解总结如下:
什么是Admin Ping Command(后文简称ping命令)?
ping命令实际上是提供了一种轻度消耗命令接口,这种接口用于去判断一个持久连接是否存活,或者远端MySQL是否存活。
当远端MySQL Server接收到这种特殊形式的命令后,不做更多的语法解析和执行计划优化,直接返回结果。
Admin Ping Command有什么用?
在运用链接池方法连接MySQL的时候,这个命令就显得非常有用。因为链接池再把一个空闲链接句柄给到客户端的时候并不知道这个链接是否仍然存活(即没有超时或者被Server 主动kill)。链接池需要用一个命令去判断并触发重连。而这时Ping Command无疑是代价最小的。如果有同学自己用java代码去实现MySQL链接池的话,链接存活判断使用Admin Ping Command是最佳选择。
怎么调用Admin Ping Command?
每个MySQL client/connector 实现Ping Command的方式都不一样。Java的使用方法见:http://mysqlblog.fivefarmers.com/2010/08/25/connector-j-ping/
Perl的使用方法简单的说就是 $dbh->ping(); 详见:http://www.turbolift.com/mysql/DBD_3.21.X.php3#ping
看了上面的介绍,大家一定有很多疑问。例如,用ping比用select 1到底快多少?如何在Server端监控?下文将通过实际测试一一分析。
如何在MySQL Server端观察到Admin Ping Command?
实际上MySQL有一个专门的计数器来统计ping命令。通过show global status like 'Com_admin_commands' 即可看到从Server启动后累计接收到的ping命令次数
Admin Ping Command的性能优势有多大?
下面通过一个简单的perl测试脚本,来观察常用的 select 1 和 ping命令之间的性能差距。脚本分别重复执行十万次ping和select 1,通过time比较两者之间的总执行时间的差距。脚本如下:
use strict;use warnings;use utf8;use DBI;use IO::Socket;use FileHandle;my $CONFIG_SERVER_IP ='192.168.26.167';my $CONFIG_SERVER_DB='test';my $CONFIG_SERVER_PORT='3310';my $CONFIG_SERVER_USER='root';my $CONFIG_SERVER_PASS='password';my $dbh = DBI->connect("DBI:mysql:$CONFIG_SERVER_DB;host=$CONFIG_SERVER_IP;port=$CONFIG_SERVER_PORT", $CONFIG_SERVER_USER, $CONFIG_SERVER_PASS,{RaiseError => 1}) || die "Could not connect to database: $DBI::errstr";<br /><br />for(my $i=0;$i<100000;$i++){ #my $result=$dbh->do('/* ping */select 1'); my $result=$dbh->ping;}执行结果:
采用JSP开发的办公自动化产品、基于B/S结构,运行环境:JDK v1.5、Tomcat v5.5、MySQL v4.1,三者均为以上版本其他相关内容:可视化流程设计: 流程支持串签、会签和分支流程,可以设置流程节点的修改、删除权限,并可指定流程中各个用户在表单中可以填写的域。智能表单所见即所得设计: 智能设计,自动在数据库中生成表格,方便优化程序 公共交流: 集论坛、博客、聊天室于一体文件柜:C
0
select 1:real 0m5.968suser 0m1.235ssys 0m1.175sreal 0m6.003suser 0m1.195ssys 0m1.236sreal 0m6.155suser 0m1.225ssys 0m1.237s
Admin Ping:real 0m3.426suser 0m0.604ssys 0m1.115sreal 0m3.483suser 0m0.681ssys 0m1.081sreal 0m3.467suser 0m0.614ssys 0m1.136s
取平均值后,
SELECT 1十万次执行时间: 6.03 秒
Admin PING十万次执行时间:3.45秒
可见后者性能整整高出 74% ,对于链接池这种对响应时间要求极高的实现来说,资源的节省相当可观。
参考资料:
http://mysqlblog.fivefarmers.com/2010/08/25/connector-j-ping/
bitsCN.com
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号