方法一
1、查看profiling是否开启
select @@profiling;
0代表没有开启 1代表开启
设置命令是
set profileing=1
2、然后我们进行一个sql语句的查询
3、查看当前会话所产生的所有 profiles:
show profiles;#查看最近一次
show profile for query 14; # 查询指定的 Query ID
show profile cpu,block io for query 14;#更丰富的查询
#ALL:显示所有的开销信息。
#BLOCK IO:显示块IO开销。
# CONTEXT SWITCHES:上下文切换开销。
# CPU:显示CPU开销信息。
# IPC:显示发送和接收开销信息。
# MEMORY:显示内存开销信息。
# PAGE FAULTS:显示页面错误开销信息。
# SOURCE:显示和Source_function,Source_file, Source_line相关的开销信息。
# SWAPS:显示交换次数开销信息。
#converting HEAP to Myisam #查询结果太大 内存不够
# creating tmp table 创建临表 先拷贝数据到临时表
copying to tmp table on disk 把内存中临时表复制到磁盘上
locked
如果show profile出现以上4个一个 则sql需要优化
方法二
查看系统性能参数
show [global | session] status like '参数' # global全局 session 当前会话
#常见参数
#Connections:连接MySQL服务器的次数。
#Uptime:MySQL服务器的上线时间。
#Slow_queries:慢查询的次数。
#Innodb_rows_read:Select查询返回的行数
#Innodb_rows_inserted:执行INSERT操作插入的行数
#Innodb_rows_updated:执行UPDATE操作更新的行数
#Innodb_rows_deleted:执行DELETE操作删除的行数
#Com_select:查询操作的次数。
#Com_insert:插入操作的次数。对于批量插入的 INSERT 操作,只累加一次。
#Com_update:更新操作的次数。
#Com_delete:删除操作的次数。
show status like '%Innodb_rows_%' #查看增删改查 操作返回的行数
sql成本的查询 last_query_cost
SHOW STATUS LIKE 'last_query_cost';
定位执行慢的sql 慢查询日志
global全局 session 当前会话
#查询慢日志的参数看是否开启
show VARIABLES like '%slow_query_log%'
#没有开启的话
set GLOBAL slow_query_log='on'
#查看时间的阀值
show VARIABLES like '%long_query_time%'
#修改时间阀值设置global的方式对当前session的long_query_time失效。对新连接的客户端有效。所以可以一并 执行下述语句
set global long_query_time = 1;
show global variables like '%long_query_time%';
set long_query_time=1;
show variables like '%long_query_time%';
#查看当前慢查询多少条
SHOW GLOBAL STATUS LIKE '%Slow_queries%';
慢查询的分析工具 mysqldumpslow
-a: 不将数字抽象成N,字符串抽象成S
-s: 是表示按照何种方式排序:
c: 访问次数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间 (默认方式)
ac:平均查询次数
-t: 即为返回前面多少条的数据;
-g: 后边搭配一个正则匹配模式,大小写不敏感的;
#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/文件.log
#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/文件.log
#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/文件.log
#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/文件 | more
等 第三种见下面