mysql日志-慢查询日志

概念

MySQL 的慢查询日志用来记录在 MySQL 中响应时间超过参数 long_query_time(单位秒,默认值 10)设置的值并且扫描记录数不小于min_examined_row_limit(默认值0)的语句。默认环境下,慢查询日志是关闭的

参数说明

  • log_slow_admin_statements: 默认情况下,慢查询日志中不会记录管理语句(DCL),可通过设置 log_slow_admin_statements = on 让管理语句中的慢查询也会记录到慢查询日志中
  • log_queries_not_using_indexes: 默认情况下,也不会记录查询时间不超过 long_query_time 但是不使用索引的语句,可通过配置 log_queries_not_using_indexes = on 让不使用索引的 SQL 都被记录到慢查询日志中(即使查询时间没超过 long_query_time 配置的值)。
  • slow_query_log(慢查询开启状态): show variables like 'slow_query_log';
  • slow_query_log_file(慢查询日志存放的位置): show variables like 'slow_query_log_file';
  • long_query_time(查询超过多少秒才记录 ): show variables like 'long_query_time';

慢查询使用

  1. 开启慢查询日志: set global slow_query_log = on;
  2. 设置慢查询阀值:   set global long_query_time = 1;
  3. 确定慢查询日志路径:  show global variables like "datadir";
  4. 确定慢查询日志的文件名:  show global variables like "slow_query_log_file";

     注意:

     long_query_time时间使用把控:

     1-  一般把 long_query_time 设置为 1 秒,但如果某个业务的对MySQL 要求比较高的 QPS,可设置慢查询为 0.1 秒(或者和组长等人协商)。以便于及时发现慢查询,我们可以及时优化。

     2- 一般测试环境的 long_query_time 设置的阀值要比生产环境的小,便于在测试环境及时发现一些效率低的 SQL。甚至某些重要业务测试环境 long_query_time 可以设置为0,以便记录所有语句。并留意慢查询日志的输出,上线前的功能测试完成后,分析慢查询日志每类语句的输出,重点关注 Rows_examined(查询检查的行数),提前优化。

查看慢查询日志方式

  1. 我们可以通过设置慢查询输出到表中。通过SHOW VARIABLES LIKE "log_output" 查看当前是输入file还是表,通过 set global log_output ="TABLE"设置输入表中查看
  2. 可以通过mysqldumpslow查看,比如说查看时间最长的10条sql语句: mysqldumpslow  -s  al -n 10 日志文件                         
[root@linjina linjiandeMacBook-pro]# tail -f /tmp/mysql_slow.log
Time: 120815 23:22:11
User@Host: root[root] @ localhost []
Query_time: 9.869362 
Lock_time: 0.000035 
Rows_sent: 1 
Rows_examined: 6261774
SET timestamp=1294388531;
select count(*) from houses;

返回值说明: 
Time:慢查询发生的时间
User@Host:客户端用户和 IP
Query_time:查询时间
Lock_time:等待表锁的时间
Rows_sent:语句返回的行数
Rows_examined:语句执行期间从存储引擎读取的行数

扩展知识

1- 一般慢查询日志我们用来记录查询慢的sql,而我们定位慢的sql语句两种方法:

  1. 查看慢查询日志确定已经执行完的慢查询; 
  2. show processlist 查看正在执行的慢查询

2- sql语句分类

  1. DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。
  2. DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。
  3. DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的语句关键字有:GRANT,REVOKE。

  4. TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

你还不来,我怎敢老去  -----张爱玲

猜你喜欢

转载自blog.csdn.net/lin_keys/article/details/108872551