把这篇没写完的文章写完,2015年的事就不留到2016了java
mysql> show variables like 'skip_name_resolve'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | skip_name_resolve | OFF | +-------------------+-------+
经过代码模拟用户查询请求,不断的创建链接执行sql查询,而后经过show processlist
命令查看链接状况:mysql
JAVA代码一sql
/** * MySQL Problem DNS lead to 'unauthenticated user' */ public class MysqlDNSUnauthUser { public static final Logger LOG = LoggerFactory .getLogger(MysqlDNSUnauthUser.class); /** * 执行查询操做 * @return */ public static long query() { long start = System.currentTimeMillis(); Connection conn = null; Statement stmt = null; String sql = "select 1"; try { // 建立新的链接 conn = DBUtils.getConnection(); stmt = conn.createStatement(); stmt.executeQuery(sql); } catch (SQLException e) { LOG.error(e.getMessage(), e); } finally { DBUtils.close(conn, stmt); } long end = System.currentTimeMillis(); return end - start; } public static void main(String[] args) { // 描述统计 DescriptiveStatistics stats = new DescriptiveStatistics(); int n = 0; while(true) { n++; long time = query(); stats.addValue(time); if(n == 1000) break; } LOG.info(stats.toString()); } }
打印结果以下:bash
n: 1000 min: 10.0 max: 421.0 mean: 14.202000000000002 std dev: 16.242444797905648 median: 12.0 skewness: 20.270437547223214 kurtosis: 463.94461541900915
发现最大值421ms性能
mysql> show processlist; +------+----------------------+-------------------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+----------------------+-------------------+------+---------+------+-------+------------------+ | 7 | root | localhost | test | Query | 0 | NULL | show processlist | | 2763 | unauthenticated user | 192.168.4.2:54804 | NULL | Connect | NULL | login | NULL | +------+----------------------+-------------------+------+---------+------+-------+------------------+
能够发现其中出现unauthenticated user
的用户code
在/etc/my.cnf
中的[mysqld]
节点增长skip_name_resolve
,重启mysqld服务ip
mysql> show variables like 'skip_name_resolve'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | skip_name_resolve | ON | +-------------------+-------+
再次执行JAVA代码一,结果以下:ssl
n: 1000 min: 7.0 max: 413.0 mean: 10.306999999999988 std dev: 16.131117877070835 median: 9.0 skewness: 20.655330340756084 kurtosis: 471.9124123214076
对比上一次开启DNS解析,此次的结果性能有所提升,上一次的均值是14ms,此次为10msget
mysql> show processlist; +------+----------------------+-------------------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+----------------------+-------------------+------+---------+------+-------+------------------+ | 2 | root | localhost | NULL | Query | 0 | NULL | show processlist | | 3891 | unauthenticated user | 192.168.4.2:59502 | NULL | Connect | NULL | login | NULL | +------+----------------------+-------------------+------+---------+------+-------+------------------+
能够发现仍然出现了unauthenticated user
的用户io
目前可得出以下结论:
DNS解析确实会影响链接创建的性能,可是DNS解析开启与否,与出现
unauthenticated user
没有关系
猜测unauthenticated user
的出现应该是链接在创建的过程当中出现的临时状态