mysql 开发进阶篇系列 41 mysql日志之慢查询日志
一.概述
慢查询日志记录了所有的超过sql语句( 超时参数long_query_time单位 秒),获得表锁定的时间不算作执行时间。慢日志默认写入到参数datadir(数据目录)指定的路径下。默认文件名是[hostname]_slow.log,默认超时是10秒,默认不开启慢查询日志。下面查看慢日志的几个参数:
-- 是否开启慢日志
SHOW VARIABLES LIKE 'slow_query_log';

-- 慢日志文件记录位置
SHOW VARIABLES LIKE 'slow_query_log_file';

-- 慢日志设置超时sql阀值(时间秒) 默认10秒
SHOW VARIABLES LIKE 'long_query_time';

-- 慢日志存储方式
SHOW VARIABLES LIKE '%log_output%';

log_output参数是指日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。支持同时两种日志存储方式如:log_output='FILE,TABLE'。另外:log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
二. 设置慢日志参数
下面设置my.cnf配置文件,将slow_query_log=1为开启慢查询记录,将long_query_time=1为记录超时1秒钟的sql语句。

重启mysqld服务后,在次查询慢日志参数,如下所示:


三.演示超时sql以及查看慢日志
-- 查询超大结果集
SELECT * FROM b LIMIT 1000000
执行信息如下图所示:

下面搜索日志中含有select 关键词的慢查询语句:

下面搜索日志中含有CALL关键词的存储过程的慢查询语句:

-- 查询有多少条慢查询记录,可以使用系统变量。下面统计了慢查询共10次。
SHOW GLOBAL STATUS LIKE '%slow_queries%';

四. 日志分析工具mysqldumpslow
当慢日志文件内容超大时,需要对慢查询进行分类汇总,可以使用mysqldumpslow工具。对于sql文本一致的,会视为同一个语句自动统计,如下面统计CALL调用9次。对于sql文本一致使用参数的,参数变更值使用N来代替。如下图所示:

五. 在线清除慢日志内容
FLUSH LOGS;
-- 在线关闭慢日志
SET GLOBAL slow_query_log=0;
-- 删除日志 rm

-- 在线开启慢日志
SET GLOBAL slow_query_log=1;
删除日志和开启慢日志后,会自动重新重成新的慢日志,新的内容如下图所示 :

六. 日志篇总结
在日志篇系列里讲到了最常用的4种日志类型:错误日志,二进制日志,查询日志,慢查询日志。 4种日志各有不同用途:
(1) 系统故障时,建议首先查看错误日志。
(2) 如果要记录数据的变更,数据备份,数据复制等操作时,二进制日志必须开启 (默认不开启)。
(3) 如果希望记录数据库发生的任何操作,包括select,需要开启。一般情况不建议打开,影响系统性能(默认不开启)。
(4) 如果要排查系统性能问题,想找到有性能的sql语句,慢日志则需要开启(默认不开启)。
mysql 开发进阶篇系列 41 mysql日志之慢查询日志的更多相关文章
- mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...
- mysql 开发进阶篇系列 38 mysql日志之错误日志log-error
一.mysql日志概述 在mysql中,有4种不同的日志,分别是错误日志,二进制日志(binlog日志),查询日志,慢查询日志.这此日志记录着数据库在不同方面的踪迹(区别sql server里只有er ...
- mysql 开发进阶篇系列 40 mysql日志之二进制日志下以及查询日志
一.binlog 二进制其它选项 在二进制日志记录了数据的变化过程,对于数据的完整性和安全性起着非常重要作用.在mysql中还提供了一些其它参数选项,来进行更小粒度的管理. 1.1 binlog-do ...
- mysql 开发进阶篇系列 19 MySQL Server(innodb_flush_log_at_trx_commit与sync_binlog)
一. innodb_flush_log_at_trx_commit 这个参数名称有个log,一看就是与日志有关.是指:用来控制缓冲区(log buffer)中的数据写入到日志文件(log file), ...
- mysql 开发进阶篇系列 16 MySQL Server(myisam key_buffer)
一.概述 mysql 提供了很多参数来进行服务器的设置,当服务第一次启动的时候,所有启动参数值都是系统默认的.这些参数在很多生产环境下并不能满足实际的应用需求.在这个系列中涉及到了liunx 服务器, ...
- mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
一.概述 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程, ...
- mysql 开发进阶篇系列 18 MySQL Server(innodb_buffer_pool_size)
从这篇开始,讲innodb存储引擎中,对于几个重要的服务器参数配置.这些参数以innodb_xx 开头. 1. innodb_buffer_pool_size的设置 这个参数定义了innodb存储引擎 ...
- mysql 开发进阶篇系列 17 MySQL Server(key_buffer与table_cache)
一.key_buffer 上一篇了解key_buffer设置,key_buffer_size指定了索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度.通过检查状态值Key_read_reque ...
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
随机推荐
- java编译时出现——注:使用了未经检查或不安全的操作。注:有关详细信息,请使用 -Xlint:unchecked 重新编译
网上说是泛型问题 private List<Product> products = new ArrayList<Product>(); 这种用法绝对没错!(因为是照着书写的)在 ...
- 3H - 进制转换
输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). Outpu ...
- ES6 扩展运算符
ES6的扩展运算符则可以看作是rest参数的逆运算.可以将数组转化为参数列表. 如:console.log(1,...[2,3,4],5) //1 2 3 4 5 用于合并数组: [1,2, ...m ...
- Python6大设计原则
内容总览 六大设计原则都有哪些 一.单一职责原则 二.里氏替换原则 三.依赖倒置原则 四.接口隔离原则 五.迪米特法则 六.开放封闭原则 内容详解 一.单一职责原则 单一职责原则:英文名称是Singl ...
- PHP常见的一些问题总结(收藏)
本篇文章给大家带来的内容是关于PHP常见的一些问题总结(收藏),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 字符串定义的时候单引号和双引号有什么区别? 单引号加载速度比双引号 ...
- 查找 管道 exec
#查找150天为使用的文件并列出find -type f -mtime +150 -exec ls -ltr {} \;#查找150天内120外的文件find -type f -mtime -150 ...
- nagios 报警参数
host_notification_options: d = notify on DOWN host states, u = notify on UNREACHABLE host states r = ...
- 关于双重for循环封装数据问题
1.问题描述 在使用双重for循环进行封装数据时出现一个问题,就是有的数据封装上了,有的数据未封装上,找了很久原因: for (A a:ListA) { for (B b: ListB) { if(a ...
- boost asio 学习(五) 错误处理
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Erro ...
- Python3实战系列之九(获取印度售后数据项目)
项目现状:已经部署在服务器上并正常运行了. 1.服务器上的部署 2.下载到服务器的文件列表 3.转存在到数据库SQL Server中的数据 项目总结:这次项目采用python来实现,刚开始还是有点担忧 ...