前言:

最近在线上诊断QPS飙升的过程中深入进行了下Admin Ping Command的测试。此外,再一些国外文章中最近也读到了一些相关知识,所以写成一篇博文做一下总结。

1. 关于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

2. Admin Ping Command的性能优势测试

看了上面的介绍,大家一定有很多疑问。例如,用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 => }) || die "Could not connect to database: $DBI::errstr"; for(my $i=;$i<;$i++){
#my $result=$dbh->do('/* ping */select 1');
my $result=$dbh->ping;
}

执行结果:

select :

real    0m5.968s
user 0m1.235s
sys 0m1.175s real 0m6.003s
user 0m1.195s
sys 0m1.236s real 0m6.155s
user 0m1.225s
sys 0m1.237s
Admin Ping:

real    0m3.426s
user 0m0.604s
sys 0m1.115s real 0m3.483s
user 0m0.681s
sys 0m1.081s real 0m3.467s
user 0m0.614s
sys 0m1.136s

取平均值后,

SELECT 1十万次执行时间: 6.03 秒

Admin PING十万次执行时间:3.45秒

可见后者性能整整高出 74% ,对于链接池这种对响应时间要求极高的实现来说,资源的节省相当可观。

参考资料:

http://mysqlblog.fivefarmers.com/2010/08/25/connector-j-ping/

关于MySQL的Admin Ping Command的更多相关文章

  1. oozie.log报提示:org.apache.oozie.service.ServiceException: E0104错误 An Admin needs to install the sharelib with oozie-setup.sh and issue the 'oozie admin' CLI command to update sharelib

    不多说,直接上干货! 问题详情 关于怎么启动oozie,我这里不多赘述. Oozie的详细启动步骤(CDH版本的3节点集群) 然后,我在查看 [hadoop@bigdatamaster logs]$ ...

  2. grafana+mysql忘记admin密码解决方法

    通过mysql修改admin的密码. 我之前注册了一个用户,所以我直接复制lvusyy这个用户的密码即可. update user inner join (select password,salt,r ...

  3. MySql 数据库导入"Unknown command '\n'."错误解决办法

    原文地址:http://www.cnblogs.com/bingxueme/archive/2012/05/15/2501999.html 在CMD 下 输入: Mysql -u root -p -- ...

  4. mysql 无法启动 unkown command

    1. https://serverfault.com/questions/490656/mysql-not-starting-error-usr-sbin-mysqld-unknown-option- ...

  5. MySQL:select command denied to user for table 'proc'案例

    使用EMS MySQL Manager Pro(3.4.0.1)连接MySQL 5.6.20时,报错:"SELECT command denied to user xxx@xxx.xxx.x ...

  6. MYSQL使用PMM进行性能监控

    简介Percona监视和管理(PMM)是一个用于管理和监视MySQL和MongoDB性能的开源平台.它是由Percona与托管数据库服务.支持和咨询领域的专家合作开发的. PMM是一个免费的开源解决方 ...

  7. MySQL中间件之ProxySQL(6):管理后端节点

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.配置后端节点前的说明 为了让ProxySQL能够找到后端的MySQ ...

  8. tunning-prime优化mysql建议

    #!/bin/sh       # set tabstop=8   ################################################################## ...

  9. 032:基于Consul和MGR的MySQL高可用架构

    目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...

随机推荐

  1. Tomcat日志输出在linux和windows差异

    tomca日志保存在${catalina}/logs目录下: 主要包括五类文件,开发测试常使用的日志主要保存在catalina.localhost日志中,且每天生成独立日志文件,结尾以日期命名,方便查 ...

  2. Hadoop MapReduce例子-新版API多表连接Join之模仿订单配货

    文章为作者原创,未经许可,禁止转载.    -Sun Yat-sen University 冯兴伟 一.    项目简介: 电子商务的发展以及电商平台的多样化,类似于京东和天猫这种拥有过亿用户的在线购 ...

  3. Visual Studio 2013 and .NET 4.6

    I'm trying to set the 4.6 .NET framework for my project and in the settings, as it wasn't listed, I ...

  4. GTD中落地执行篇

    前面几篇主要是分享GTD对事情进行 ”收集“,“分类”,“组织”.今天主要是想分享“落地执行” 先来看一个案例 (案例 来自于<小强升职记>) 通过这个案例我们看出 1: 当我们通过对事情 ...

  5. Spark随机森林实现学习

    前言 最近阅读了spark mllib(版本:spark 1.3)中Random Forest的实现,发现在分布式的数据结构上实现迭代算法时,有些地方与单机环境不一样.单机上一些直观的操作(递归),在 ...

  6. Windows 10开启默认网络驱动器访问

    在Windows 10的系统策略中,驱动器盘符的网络访问是默认关闭的,用管理员权限打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...

  7. IntelliJ IDEA + Maven创建Java Web项目

    1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工 ...

  8. sctp和tcp的区别

    作为一个传输层协议,SCTP兼有TCP及UDP两者的特点.SCTP可以称为是TCP的改进协议,但他们之间仍然存在着较大的差别.首先SCTP和TCP之间的最大区别是SCTP的连接可以是多宿主连接的,TC ...

  9. WPF快速精通版

    命名空间: xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:U ...

  10. 自定义android RadioButton View,添加较为灵活的布局处理方式

    android的RadioButton的使用历来都让人比较头疼,如在布局方面,图案.文字无法分别设置padding等,另外,低版本的android RadioGroup不支持换行排列的RadioBut ...