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. JS数据类型之Number类型

    Number类型的转换及方法 var num = 10; num.toString() //"10"转字符串,参数表示几进制 num.toFixed(2) //10.00 自动舍入 ...

  2. vue-router跳转

    当使用$router.push()操作时,如果路由不加反斜杠会自动替换当前路由的最后一个反斜杠后面部分

  3. 转载(TCPClient 建立连接和断开连接函数)

    public bool networkbuild()//建立端口连接 { if (client == null) { try { client = new TcpClient(networkip, n ...

  4. Oracle:查询各组最新的一条记录

    oracle中怎么查询各组中最新的一条记录呢?比如说现在有一个表中几条数据如下: 有两种写法:写法一:over partition by 分析函数 SELECT * FROM (select ID_, ...

  5. unfortunately,*********** has stopped及卸载模拟器上的多余不用apk

    虽然不知道是怎么了,但是项目进不去了,害的我一脸雾水,百度了下好像没什么人遇到过这问题,都没找到解决办法,那只好来个简单粗暴的,卸载重新安装apk ,希望有大神知道原因和其他方法的欢迎留言或者评价给出 ...

  6. cpu资源长期使用率过高导致系统内核锁问题

    服务器跑大量高负载程序,会造成cpu soft lockup. 解决办法: #追加到配置文件中 echo 30 > /proc/sys/kernel/watchdog_thresh #查看 [r ...

  7. Eclipse设置所有新创建文件默认格式为UTF-8

    一.为什么需要设置所有新创建文件默认格式为UTF-8 Eclipse编码默认是ISO-8859-1,不支持中文.而很多时候,我们的文件中含有中文,或者需要在创建文件时就需要是UTF-8编码格式的.在创 ...

  8. spring boot + apache camel 传输文件

    一 sftp搭建略 这里简单说一下为什么使用sftp.ftp和sftp各有优点,差别并不是太大.sftp安全性好,性能比ftp低.ftp对于java来说并不复杂,效率也高.之所以使用sftp主要是可以 ...

  9. Ubuntu16.04 git上网速度慢的解决方法.

    1.打开网站 IPAddress.com ,输入github.com和github.global.ssl.fastly.net,获取他们的域名对应的ip地址 2.sudo vi /etc/hosts ...

  10. css3-study-new

    不错的:http://c7sky.com/works/css3slides/#28