mysql 调优首先需要找到那些有问题的SQL语句。

怎么找到这些语句呢?

mysql 提供了很方便的功能。

1.慢日志

在my.cnf 文件中,增加如下配置

log-error                      = /var/lib/mysql/mysql-error.log

#记录没有索引使用的查询。

log-queries-not-using-indexes  = 1

#记录慢查询

slow-query-log                 = 1

#慢查询日志

slow-query-log-file            = /var/lib/mysql/mysql-slow.log

slow-query-log :启用慢日志

log-queries-not-using-indexes :没有使用索引的查询

slow-query-log-file :日志路径

当服务器出现性能时,日志就会记录下来。

2.分析慢日志

有了慢日志,我们就可以使用这个日志进行分析,找出有问题的SQL语句。

分析工具可以使用:

https://www.percona.com/downloads/percona-toolkit/3.0.13/binary/redhat/7/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm

下载后安装

rpm -ivh percona-toolkit-3.0.13-1.el7.x86_64.rpm

安装后就可以进行使用了

pt-query-digest --limit 20  mysql-slow.log >result.log

这个命令的意思是分析慢日志,并且会将分析结果记录到 result.log 文件中。

# 35.4s user time, 90ms system time, 26.54M rss, 220.85M vsz
# Current date: Thu Apr 25 14:44:54 2019
# Hostname: localhost.localdomain
# Files: mysql-slow.log
# Overall: 85.73k total, 11 unique, 30.61 QPS, 0.00x concurrency _________
# Time range: 2019-04-25T06:18:19 to 2019-04-25T07:05:00
# Attribute total min max avg 95% stddev median
# ============ ======= ======= ======= ======= ======= ======= =======
# Exec time 10s 68us 24ms 116us 167us 95us 103us
# Lock time 4s 21us 4ms 44us 69us 32us 38us
# Rows sent 83.75k 0 24 1.00 0.99 0.08 0.99
# Rows examine 586.61k 0 48 7.01 6.98 0.54 6.98
# Query size 5.34M 46 435 65.32 80.10 12.29 54.21 # Profile
# Rank Query ID Response time Calls R/Call V/M
# ==== ================================== ============= ===== ====== =====
# 1 0xB717B245D9B4D6CF8F79C4C320FFEC0C 6.2929 62.9% 57228 0.0001 0.00 SELECT os_rel_type
# 2 0x5F211D31CFFA376C13F39992DAE2394A 3.6963 36.9% 28453 0.0001 0.00 SELECT os_rel_type
# 3 0xE0F7C7EEB5446ECBF9C66FF0A1B4E8D6 0.0056 0.1% 15 0.0004 0.00 SELECT BPM_NODE_SET
# 4 0x7B35F1202DF2724043EFB10A443E25A1 0.0043 0.0% 15 0.0003 0.00 SELECT bpm_form_view
# 5 0x19E0ECF6F83257951B93561BB55257C7 0.0025 0.0% 5 0.0005 0.00 SELECT SYS_PROPERTIES
# 6 0x83A81E68FE6CCB29329B3D8C6F2DD7B9 0.0022 0.0% 1 0.0022 0.00 SELECT information_schema.PARTITIONS
# 7 0x7598123F1F2AFD056EBD09352AA28815 0.0021 0.0% 4 0.0005 0.00 SELECT sys_datasource_def
# 8 0x6C4E656EF7596EB3232AC868B24BD543 0.0017 0.0% 6 0.0003 0.00 SELECT SYS_INST
# 9 0x2A9FB8408CDA668DDD37078754092B47 0.0012 0.0% 4 0.0003 0.00 SELECT MI_DB_ID
# 10 0x951BF5C783033884B41893D8832E1E73 0.0007 0.0% 1 0.0007 0.00 SELECT information_schema.columns
# 11 0x7B8A1218880310FF773B6C94685844F4 0.0003 0.0% 1 0.0003 0.00 SELECT information_schema.triggers

我们在这里影响性能的就是 OS_REL_TYPE表。

select * from os_rel_type where KEY_='GROUP-USER-BELONG'\G

# Query 2: 10.16 QPS, 0.00x concurrency, ID 0x5F211D31CFFA376C13F39992DAE2394A at byte 21216778
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2019-04-25T06:18:20 to 2019-04-25T07:05:00
# Attribute pct total min max avg 95% stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count 33 28453
# Exec time 36 4s 84us 3ms 129us 176us 44us 119us
# Lock time 39 2s 31us 3ms 53us 76us 32us 47us
# Rows sent 33 27.79k 1 1 1 1 0 1
# Rows examine 33 194.50k 7 7 7 7 0 7
# Query size 42 2.28M 84 84 84 84 0 84

解释

Exec time :执行时间

Lock time :锁定时间

Rows sent :返回的记录数

Rows examine :扫描过的记录数,我们可以看到

这返回的数据和扫描的记录差的很大,所以我们可以通过创建索引。

Query size:查询语句的字符数

如果返回的记录数和扫描的记录数相差很远,那么就需要想办法创建索引了。

mysql 慢日志分析的更多相关文章

  1. MySQL二进制日志分析-代码实现(FORMAT_DESCRIPTION_EVENT)

    如前文概述,MySQL Binlog v3以前版本, 二进制日志文件的第一个事件是START_EVENT_V3, 从v4版本开始第一个事件为FORMAT_DESCRIPTION_EVENT(以下简称F ...

  2. MySQL二进制日志分析-概述篇

    MySQL从3.23版本开始引入了二进制日志,用于的数据复制, 二进制日志根据MySQL的版本不同,目前有4个版本: https://dev.mysql.com/doc/internals/en/bi ...

  3. MySQL慢日志分析之pt-query-digest

    http://www.php.cn/mysql-tutorials-357655.html 监控慢日志: pt-query-digest 切割分析慢日志 anemometer 删掉垃圾查询 pt-ki ...

  4. mysql慢日志分析pt-query-digest

    一.pt-query-digest 安装pt-query-digest yum install perl-DBI yum install perl-DBD-MySQL yum install perl ...

  5. MySQL 死锁日志分析

    ------------------------ LATEST DETECTED DEADLOCK ------------------------ 140824  1:01:24 *** (1) T ...

  6. MySQL慢日志分析-转载

    /path/mysqldumpslow -s c -t 10 /database/mysql/slow-log这会输出记录次数最多的10条SQL语句,其中: -s, 是表示按照何种方式排序,c.t.l ...

  7. 【原】mysql慢日志分析

    pt-query-digest slowquery.log --since "2016-01-23 10:50:00"

  8. mysql慢日志分析组件安装

    1.pt-query-digest 安装 cd /usr/bin wget percona.com/get/pt-query-digest chmod u+x pt-query-digest yum ...

  9. MySQL慢查询日志分析

    一:查询slow log的状态,如示例代码所示,则slow log已经开启. mysql> show variables like '%slow%'; +-------------------- ...

随机推荐

  1. vue项目tips

    在main.js引入了封装好的各组件,包括echarts.自定义组件等

  2. Redis 数据类型归纳

    Redis的数据类型从整体上看,都是Key-Value键值对的模型,数据类型更确切地说,应该是Value的数据类型,比如string,set,list等,都是key值对应的Value的数据集合格式.不 ...

  3. css预处理器:Sass LASS Stylus

    语法 Sass h1 { color: #0982C1; } h1 color: #0982c1 LESS h1 { color: #0982C1; } Stylus /* style.styl */ ...

  4. 项目(七)SVN版本管理与大型代码上线方案

    SVN介绍 Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Svn版本管理工具管理着随时间改变的各种数据.这些数据放置 ...

  5. wkhtmltopdf 转pdf时元素被页面切割开

    1. <style> * { page-break-inside: avoid; page-break-after: avoid; page-break-before: avoid; } ...

  6. tamptermonkey 脚本初步尝试

    刚开始接触tamptermonkey 主要用于基于浏览器的数据采集 基本都是js基础 这里是采集表格里的内容, 构造json, 然后post发送到后台 如果加入定时刷新功能就可以随时或是按照固定或是随 ...

  7. 如何在 Koa 中获取 client 的 ip 以及 port

    ctx.body.remoteAddress ctx.body.remotePort

  8. TZOJ 2289 Help Bob(状压DP)

    描述 Bob loves Pizza but is always out of money. One day he reads in the newspapers that his favorite ...

  9. es6数组的扩展

    数组扩展运算符 ...(三个点) const demoArr=[0,1,2,3,4] console.log(...demoArr) // 0 1 2 3 4 // 他把一个数组用逗号分隔了出来 // ...

  10. 关于@JsonIgnore的理解

    首先:@JsonIgnore是一个能够在后端发送给前端数据的时候对后端发送出的json字符串能够发挥作用的一个注解 如果比如user表,你在password这个属性上添加@JsonIgnore,就会s ...