服务性能简介


三个性能服务请求



  • 如何确认服务器是否达到了性能最佳状态
  • 找出某条sql语句执行慢的原因
  • 诊断被用户描述成“停顿”,“堆积”或者是“卡死”的间歇性疑难故障.


性能定义


  • 为完成某件任务所需要的时间度量,换言之,性能即响应时间,这是一个非常重要的原则.


SQL性能分析



  • 执行分析 - 基于执行时间的分析
  • 等待分析 - 基于等待时间的分析

SQL性能优化

在一定的工作负载下尽可能地降低响应时间,在SQL服务器中定义的吞吐量指标为单位时间内的查询量.


性能优化工具


慢查询日志是一种轻量而且功能全面的性能剖析功能,优化服务器查询的利器.

  • 通过​​--processlist​​查看记录出现的时间和消失的时间
show full processlist
  • 通过TCP网络抓包
tcpdump -i lo -l port 3306 -w lo.pcap | strings tcpdump host mysql_ip and port mysql_port 


开启binlog慢日志查询


## 查看mysql所有的日志信息的状态以及对应存储的位置
show variables like '%log%';

## 查看bin log是否开启
show variables like 'log_bin';

## 查看mysql的版本,我的当前为5,7
show variables like '%version%';

## 启用bin log
## /etc/mysql/mysql.conf.d/mysqld.cnf
server_id = 1 # 随机数,集群中要保证唯一
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 100M
binlog_do_db = include_database_name

## 重启服务
service mysql start

## 再次查看bilog是否生效
show variables like 'log_bin';


查看binlog


/usr/bin/mysqlbinlog --base64-output=DECODE-ROWS -v /var/log/mysql/mysql-bin.000001


参考


参考: https://blog.51cto.com/lookingdream/1921162


单条SQL查询性能分析


## 在mysql5之后可以通过profile来启用分析
## 查看是否启用
show variables like '%profil%';

## 设置启用
set profiling=1;

## 查看启用结果
show variables like '%profil%';

## 查看sql的执行性能
show profiles;

## 根据上述的结果获取queryId
show profile from query queryId;

## 格式化输出
set @query_id = 1;
select state, sum(duration) as total_r, round(100 * sum(duration) / (select sum(duration) from information_schema.profiling where query_id=@query_id ), 2) as pct_r, count(*) as calls, sum(duration) / count(*) as "R/Call" from information_schema.profiling where query_id = @query_id group by state order by total_r desc;

上述的执行输出结果如下:

MySQL性能分析命令_sql


非性能分析工具的show status


mysql的show status命令返回一些计数器,既有服务器级别的计数器,也有基于某个连接会话级别的计数器.可以查看服务器级别的从服务器启动开始计算的查询次数统计

截取部分结果图:

MySQL性能分析命令_性能优化_02