一、优化思路

数据查询慢,不代表 SQL 语句写法有问题。 首先,我们需要找到问题的源头才能“对症下药”。用一张流程图展示 MySQL 优化的思路:

从图中可以清楚地看出,导致数据查询慢的原因有多种,如:缓存失效,在此一段时间内由于高并发访问导致 MySQL 服务器崩溃;SQL 语句编写问题;MySQL 服务器参数问题;硬件配置限制 MySQL 服务性能问题等。

二、查看 MySQL 服务器运行的状态值

如果系统的并发请求数不高,且查询速度慢,可以忽略该步骤直接进行 SQL 语句调优步骤。执行命令:

show status

由于返回结果太多,此处不贴出结果。其中,再返回的结果中,我们主要关注 “Queries”、“Threads_connected” 和 “Threads_running” 的值,即查询次数、线程连接数和线程运行数。

我们可以通过执行如下脚本监控 MySQL 服务器运行的状态值:

#!/bin/bash

while true

do

mysqladmin -uroot -p"密码" ext | awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}' >> status.txt

sleep 1

done

执行该脚本 24 小时,获取 status.txt 里的内容,再次通过 awk 计算:每秒请求 MySQL 服务的次数

awk '{q=$1-last;last=$1}{printf("%d %d %d\n",q,$2,$3)}'>> status.txt

如果观察的数据有周期性的变化,需要修改缓存失效策略。

三、获取需要优化的SQL语句

方式一:查看运行的线程

执行命令:

show processlist

返回结果:

mysql> show processlist;

+----+------+-----------+------+---------+------+----------+------------------+

| Id | User | Host | db | Command | Time | State | Info

+----+------+-----------+------+---------+------+----------+------------------+

| 9 | root | localhost | test | Query | 0 | starting | show processlist

+----+------+-----------+------+---------+------+----------+------------------+

1 row in set (0.00 sec)

从返回结果中我们可以了解该线程执行了什么命令/SQL 语句以及执行的时间。实际应用中,查询的返回结果会有 N 条记录。其中,返回的 State 的值是我们判断性能好坏的关键,其值出现如下内容,则该行记录的 SQL 语句需要优化:

Converting HEAP to MyISAM # 查询结果太大时,把结果放到磁盘,严重

Create tmp table #创建临时表,严重

Copying to tmp table on disk #把内存临时表复制到磁盘,严重

locked #被其他查询锁住,严重

loggin slow query #记录慢查询

Sorting result #排序

方式二:开启慢查询日志

在配置文件 my.cnf 中的 [mysqld] 一行下边添加两个参数:

slow_query_log = 1

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

long_query_time = 2

log_queries_not_using_indexes = 1

其中,slow_query_log = 1 表示开启慢查询;

slow_query_log_file 表示慢查询日志存放的位置;

long_query_time = 2 表示查询 >=2 秒才记录日志;

log_queries_not_using_indexes = 1 记录没有使用索引的 SQL 语句。

注意:slow_query_log_file 的路径不能随便写,否则 MySQL 服务器可能没有权限将日志文件写到指定的目录中。建议直接复制上文的路径。

修改保存文件后,重启 MySQL 服务。在 /var/lib/mysql/ 目录下会创建 slow-query.log 日志文件。连接 MySQL 服务端执行如下命令可以查看配置情况。

show variables like 'slow_query%';

show variables like 'long_query_time';

测试慢查询日志:

mysql> select sleep(2);

+----------+

| sleep(2) |

+----------+

| 0 |

+----------+

1 row in set (2.00 sec)

打开慢查询日志文件

[root@localhost mysql]# vim /var/lib/mysql/slow-query.log

/usr/sbin/mysqld, Version: 5.7.19-log (MySQL Community Server (GPL)). started with:

Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock

Time Id Command Argument

# Time: 2017-10-05T04:39:11.408964Z

# User@Host: root[root] @ localhost [] Id: 3

# Query_time: 2.001395 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0

use test;

SET timestamp=1507178351;

select sleep(2);

我们可以看到刚才执行了 2 秒的 SQL 语句被记录下来了。虽然在慢查询日志中记录查询慢的 SQL 信息,但是日志记录的内容密集且不易查阅。因此,我们需要通过工具将 SQL 筛选出来.

MySQL 提供 mysqldumpslow 工具对日志进行分析。我们可以使用 mysqldumpslow --help 查看命令相关用法

常用参数如下:

-s:排序方式,后边接着如下参数

c:访问次数

l:锁定时间

r:返回记录

t:查询时间

al:平均锁定时间

ar:平均返回记录书

at:平均查询时间

-t:返回前面多少条的数据

-g:翻遍搭配一个正则表达式,大小写不敏感

案例:

获取返回记录集最多的10个sql

mysqldumpslow -s r -t 10 /var/lib/mysql/slow-query.log

获取访问次数最多的10个sql

mysqldumpslow -s c -t 10 /var/lib/mysql/slow-query.log

获取按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow-query.log

mysql+性能优化+命令_MySQL性能优化相关推荐

  1. mysql+性能优化+命令_MySQL 性能优化及常用命令

    MYSQL - INNODB 的优化 INNODB 存储引擎实现了行级锁定,虽然在锁定机制的实现方面带来的性能损耗可能比表级锁定要更高一些,但是在整体并发处理能力方面是要远远优于MYISAM的表级锁定 ...

  2. mysql数据库优化命令_MySQL数据库优化总结

    一个:MySQL标准数据库优化注意事项 1.数据库设计(表设计合理)三范式(规范的模式) 三范式包含: 第一范式:1NF是对属性的原子性的约束.要求属性具有原子性,不可再分解.(仅仅要是关系型数据库都 ...

  3. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)

    一 题记 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...

  4. mysql性能优化教程_mysql性能优化教程

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. mysql 性能 比较好_MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  6. mysql+性能+计算列_MYSQL性能优化的最佳20+条经验

    当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去fetch游标,或是你也许会去检查返回的记录数. 在这种情况下,加上 LIMIT 1 可以增加性能.这样一样,MySQL数据库引擎 ...

  7. mysql参数优化步骤_MySQL架构优化实战系列4:SQL优化步骤与常用管理命令2(转)

    MySQL架构优化实战系列4:SQL优化步骤与常用管理命令 原文:http://dbaplus.cn/news-11-649-1.html 一.SQL语句优化步骤 1.查看MySQL状态及配置 sho ...

  8. mysql工具使用意义_MySQL性能分析、及调优工具使用详解

    本文汇总了MySQL DBA日常工作中用到的些工具,方便初学者,也便于自己查阅. 先介绍下基础设施(CPU.IO.网络等)检查的工具: vmstat.sar(sysstat工具包).mpstat.op ...

  9. mysql数据库优化大全_MySQL数据库优化技巧大全

    简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...

最新文章

  1. HDU2552 三足鼎立 【数学推理】
  2. why product overview page could not be displayed in QI2 506
  3. 计数排序vs基数排序vs桶排序
  4. Unity3d导出Lightingmap的方法
  5. [USACO13DEC]牛奶调度Milk Scheduling
  6. 乱码ictclas java_中科院分词系统(NLPIR)JAVA简易教程
  7. win10手动安装打印机驱动
  8. 硅谷之行 (15) Fremont观豪宅
  9. 流量/访客数/曝光量/浏览量/pv/uv
  10. VScode前进和后退按钮,非快捷键
  11. 李政道与冯诺依曼计算机的基本原理,你们知道各个领域的领头人是哪几个?
  12. 关于嵌入式软件开发的一些思考
  13. 东区机房浏览器问题记录排查
  14. 2022中国智慧农业领域最具商业合作价值企业盘点
  15. 推荐7个高质量图片素材网站
  16. 金蝶专业版怎么反过账当月_金蝶kis专业版的反过账是怎么操作的?
  17. 2020中国高校信息化发展论坛圆满落幕
  18. 市面上485转光纤收发器单模单纤FC接口传输距离最远多少
  19. esp8266通过MQTT-AT指令连接阿里云互联网平台并收发数据(保姆级教程)(本文用的型号为esp8266-01s)
  20. 学计算机高中选那三科,想当老师高中如何选科 选哪三科好

热门文章

  1. Codeforces 1205C Palindromic Paths (交互题、DP)
  2. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)
  3. java word添加图片_Java 替换word文档文字并指定位置插入图片
  4. 2019-11-18 自动控制原理的几个基本概念
  5. superset安装配置
  6. 实战ELK(5) Logstash 入门
  7. 《Android虚拟机》----虚拟机概述
  8. iOS app 右滑返回
  9. Linux基础练习题(三)
  10. java中File的使用