mysql18-Show Profile和全局日志

1.是什么

  分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数开启后,后续执行的SQL语句都将记录其资源开销,诸如IO,上下文切换,CPU,Memory等等。根据这些开销进一步分析当前SQL瓶颈从而进行优化与调整。相较于explain更加的详细。

2.官网

http://dev.mysql.com/doc/refman/5.5/en/show-profile.html

3.开启profiling

3.1查看参数

show variables like 'profiling';

ON表示开启,如果未开启,设置参数开启

3.2设置参数开启

SET GLOBAL profiling = 1

4.设置profiles 记录数

show variables like 'profiling_history_size';

show profiles 默认显示最近15条的sql执行情况,15这个数字由profiling_history_size常量决定,你可以配置为0到100的数字最大支持100,如果设置为0则类似于关闭profiling选项

5.使用profiles

5.1查看最近执行的sql列表

SHOW PROFILES

 可以看到最近的15条的sql的执行情况

5.2查看某条记录的详情

show profile [type] for query query_id

type:  
    ALL                --显示所有的开销信息  
  | BLOCK IO           --显示块IO相关开销  
  | CONTEXT SWITCHES   --上下文切换相关开销  
  | CPU                --显示CPU相关开销信息  
  | IPC                --显示发送和接收相关开销信息  
  | MEMORY             --显示内存相关开销信息  
  | PAGE FAULTS        --显示页面错误相关开销信息  
  | SOURCE             --显示和Source_function,Source_file,Source_line相关的开销信息  
  | SWAPS              --显示交换次数相关开销的信息 
show profile cpu,block io for query  59    # 59是Query_ID

5.3几个大消耗的情况

converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。

Creating tmp table 创建临时表

Copying to tmp table on disk 把内存中临时表复制到磁盘,危险!

6.全局查询日志

除了profile ,还提供了全局查询日志。默认关闭,开启后,会记录所有执行的sql。最好不要生产环境使用

6.1查看参数

show variables like 'general_log';

6.2开启

SET GLOBAL general_log = 1

6.3全局日志的记录方式
全局日志可以存放到日志文件中,也可以存放到Mysql系统表中。存放到日志文件中性能更好一些,默认是存放到日志文件中

6.3.1查看日志存放方式

show variables like 'log_output';

6.3.2设置日志存放方式

set global log_output='TABLE';  #设置放到表中
set global log_output='FILE'; #设置放到日志文件中

 
6.3.3在表中,可以select查看

select * from mysql.general_log;

 BLOB的内容,开启备注即可查看到

相较于profile ,全局日志的内容很简单,不够详细。

原文地址:https://www.cnblogs.com/jthr/p/15393327.html