MySQL日志分类及性能分析你应该知道的知识
为什么80%的码农都做不了架构师?>>>
MySQL日志记录了MySQL数据库日常操作和错误信息,MySQL总共有四种类型的日志,通过分析这些日志可以查询到MySQL的运行情况、用户操作、错误信息等,可以为MySQL的管理和优化提供必要信息。
1、日志类型
MySQL总共有四种类型的日志,如下:
- 错误日志:记录Mysql服务的启动、运行或停止MySQL服务时出现的问题,默认开启。
- 查询日志:记录建立连接的客户端连接和执行的语句。
- 二进制日志:记录所有更改数据的语句,可以用于数据复制。
- 慢查询日志:记录所有执行时间超过设定时间(long_query_time)的查询
四种日志,仅错误日志默认开启,其他需要手动配置开启,启动日志会降低服务器性能、而且会占用大量磁盘空间。
什么是刷新日志?
刷新日志可以强制MySQL关闭旧的日志文件,重新打开新的日志文件 即切换到新的日志文件,例如:错误日志当手工删除后无法重新建立新的日志文件,则需要进行刷新日志操作才会重新创建日志文件。
如何操作?
可在服务器端执行:
mysqladmin -u root -p flush-logs
或在客户端执行
flush logs
2、二进制日志
1、原理介绍
二进制日志主要记录MySQL数据库的变化,主要运用场景为 MySQL replication ,例如主从复制,主主复制,环形复制(不常用),从机通过IO线程读取主机的二进制日志 生成自己的中继日志,然后自己的SQL线程通过中继日志进行复制数据功能,简单点说就是把SQL再执行一遍,主要原理详细如下图:
2、开启二进制日志
在my.cnf文件 [MySQLd]组下进行如下配置
log-bin[=path/filename]
例如:
log-bin
log-bin=mysql-bin
log-bin=/home/zhpt/logs/mysql-bin
以上三种方式都可开启二进制日志
其他配置:
expire_logs_days=10 #自动清除过期日志的时间
max_binlog_size=100M #设置单个二进制日志文件的大小,默认为1G,不能设置超过1G或小于4096B
3、查看二进制日志及其设置
show variables like 'log_%'
结果如下:
也可使用
show binary logs
查看二进制日志文件的个数及文件名,如下图:
3、错误日志
MySQL错误日志记录了MySQL服务在运行中发生的任何严重错误信息,此错误类型默认开启。
1、查看日志文件配置
show variables like 'log_error%'
结果如下所示:
2、修改日志文件路径
在my.cnf文件 [MySQLd]组下进行如下配置
log-error=/home/zhpt/logs/MySQL_Ruoli.err
错误日志直接以文件的形式存储于磁盘上,可随时手工删除,删除后需要执行刷新日志才可生成新的错误日志。
4、通用查询日志
在my.cnf文件 [MySQLd]组下进行如下配置 开启 通用查询日志
log[=path/filename]
通用查询日志记录了用户的所有操作,可使用编辑工具直接查看,开启通用查询日志后,会降低数据库性能增大磁盘占用,不建议在生产环境中使用。
5、慢查询日志
慢查询日志是MySQL提供的用来记录执行时间过长的查询语句,为数据库性能优化提供重要依据。
1、查看慢查询日志开启状态及存储位置:
mysql> show variables like 'slow_query%';
+---------------------------+----------------------------------+
| Variable_name | Value |
+---------------------------+----------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /mysql/data/localhost-slow.log |
+---------------------------+----------------------------------+
如上所示,此台服务器已经开启了慢查询日志功能,慢查询日志文件路径也在其data目录下。
2、查看慢查询日志超时时间
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 5.000000 |
+-----------------+-----------+
3、开启慢查询日志
前面提到过,慢查询日志并不是默认开启的,开启慢查询可以通过如下方式:
- 通过配置文件设置,此种修改方式为永久生效。
在my.cnf文件 [MySQLd]组下进行如下配置,开启慢查询日志,如下:
slow_query_log = ON
slow_query_log_file =/usr/local/mysql/data/slow.log
long_query_time=2 #设置超时时间为2秒,默认为10秒
- 通过设置全局变量设置,此种方式重启后失效。
将 slow_query_log 全局变量设置为“ON”状态
mysql> set global slow_query_log='ON';
设置慢查询日志存放的位置
mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';
查询超过2秒就记录
mysql> set global long_query_time=2;
开启记录没有使用索引的查询语句
mysql> set global log-queries-not-using-indexes = on
4、慢查询日志分析
上图是一条慢查询日志的内容,我们进行分析时主要看的就是执行信息,包括执行时间(Query_time)、发送行数(Rows_sent)、扫描行数(Rows_examined),通过降低扫描行数可以明显降低执行时间。
如果扫描行数明显大于发送行数说明此条SQL的索引命中率很低,可以优先进行优化。
关于降低降低扫描行数来提升查询效率最直接的例子就是MySQL的分页查询。
具体可以另一篇文章:最快速的办法解决MySQL数据量增大之后翻页慢问题
转载于:https://my.oschina.net/ruoli/blog/1625695
MySQL日志分类及性能分析你应该知道的知识相关推荐
- mysql 日志分类详解
前言 对于IT从业人员来说,日志是日常开发和问题排查过程中非常重要的信息,通过日志可以了解到很多有用的信息,很多奇怪的不好定位的问题,往往可以通过分析日志找到答案. 在mysql中,也提供了多种类型的 ...
- MySQL 进阶 索引 -- SQL性能分析(SQL执行频率:查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次、慢查询日志、 profile详情、explain)
文章目录 1. SQL性能分析 1.1 SQL执行频率(可以查看当前数据库SQL的访问频次) 1.2 慢查询日志(可以记录用时较长的SQL) 1.2.1 开启慢查询日志 1.2.2 慢查询日志测试 1 ...
- mysql bytessent_如何对DSQLSERVER、MySQL、Orache语句性能分析
SQLSERVER语句性能分析 SQL SERVER通过设置STATISTICS查看执行SQL时的系统情况. SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以 ...
- MySQL日志双一配置分析实战
mysql双一配配置分析 mysql双一配置主要是binlog和redolog的落盘时间的 binlog的write 和 fsync 的时机,是由参数 sync_binlog 控制的: sync_bi ...
- MySQL调优之性能分析
目录 1.SQL执行频率 2.SQL性能分析 慢查询日志 profile详情 开启profile 使用profile explain 1.SQL执行频率 MySQL客户端连接成功后,通过 show[s ...
- mysql火焰图_Linux 性能分析利器 -火焰图 flame graph
简述 Perf 命令(performance的简写)是 Linux 系统原生提供的性能分析工具,返回 CPU 正在执行的函数名以及调用栈(stack). 通常,它的执行频率是 99Hz(每秒99次), ...
- 计算机揭秘之:网络分类和性能分析
文章目录 简介 OSI网络七层协议 延迟与带宽 延时的构成 IP协议 IP数据包 分片和重组 MSS与MTU TCP TCP三次握手 拥塞崩溃 流量控制 UDP NAT 总结 简介 程序员天天都在写代 ...
- [转]Mysql explain用法和性能分析
本文转自:http://blog.csdn.net/haifu_xu/article/details/16864933 from @幸福男孩 MySQL中EXPLAIN解释命令是显示mysql如何 ...
- mysql不同count的性能分析
以下文章来源于Hollis ,作者Hollis(微信公众号搜索) 数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查. 在数据库的增删改查操 ...
最新文章
- pfamscan 的使用_Hmmer安装与使用
- 在哪里可以运行EJB?
- 3分钟融云Demo体验:IM即时通讯篇
- http接口_基于Python的HTTP接口自动化测试框架实现
- juniper防火墙策略元素
- 2. PSR-2 --- 代码风格指南
- 简库软件库工具箱综合源码_iApp源码
- csdn切换格式markdown
- springboot集成微信公众号文章推送
- 树莓派python脚本开机自启动设置
- saltstack自定义returner之利用fluent+mysql进行结果收集
- RGB图转为灰度图的方法
- 后缀为.epub的是什么格式的文件
- css33d图片轮播_通过html+css3实现图片轮播切换
- 运维之DNS域名解析服务基础概念与Bind9安装
- ListView分页(带图片)显示用法案例。。。下
- springboot出现“org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?“的解决办法
- mp3剪切器如何剪切mp3格式的音频
- 计算机导论——信息安全基础06
- DOM DOM概述