MySQL之SQL优化详解(一)

摘要:
所以今天我就和大家聊一聊慢速SQL挖掘机慢速查询日志慢速查询日志MySQL慢速查询日志是MySQL提供的日志记录,用于记录MySQL中响应时间超过阈值的语句,特别是运行时间超过long_query_time值将记录在慢速查询日志中。

目录

 

序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explain 分析,like 全模糊会导致索引失效 云云,于是我问道:优化之前,需要找出数据库中比如超过2s的慢SQL,你是怎么找的?很多人答不上来,要是找都找不到,怎么去优化呢,一个中大型系统可能成千上万条SQL都不过分,难道要一个个去分析么。

所以今天和大家聊聊 慢SQL的挖掘机-慢查询日志

 

慢查询日志

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过 long_query_time 值的SQL,则会被记录到慢查询日志中。

当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。

 

1. 慢查询日志开启

  • 查看是否开启: show variables like '%slow_query_log%';
  • 开启慢查询日志:set global slow_query_log=1; (重启会失效)

 

开启了慢查询日志后,什么样的SQL才会记录到查询日志里面?

这个是由参数 long_query_time 控制,默认情况下 long_query_time 的值为10秒

查看命令: show variables like 'long_query_time%';

 
MySQL之SQL优化详解(一)第1张

注: 永久设置慢查询日志开启,以及设置慢查询日志时间临界点(不建议)

linux中,mysql配置文件一般默认在 /etc/my.cnf 更改对应参数即可

 

2. 慢查询日志设置与查看

设置阀值命令: set global long_query_time=3 (修改为阀值到3秒钟的就是慢sql)

 

为什么设置后看不出变化:

  • 需要重新连接或新开一个会话才能看到修改值。 show variables like 'long_query_time%';
  • 直接 show global variables like 'long_query_time';

 

查看慢查询日志:

cat -n /data/mysql/mysql-slow.log

MySQL之SQL优化详解(一)第2张

从慢查询日志中,我们可以看到每一条查询时间高于3s 的sql语句,并可以看到执行的时间是多少。

比如上面,就表示 sql语句  select * from comic where comic_id < 1952000;  执行时间为3.902864秒,超出了我们设置的慢查询时间临界点3s,所以被记录下来了

 

MySQL之SQL优化详解(一)第3张

查看有多少条慢查询记录: show global status like '%Slow_queries%';

 

3. 日志分析工具mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具 mysqldumpslow

  • s: 是表示按照何种方式排序
  • c: 访问次数
  • l: 锁定时间
  • r: 返回记录
  • t: 查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间
  • t:即为返回前面多少条的数据
  • g:后边搭配一个正则匹配模式,大小写不敏感的

 

工作常用参考:

  • 得到返回记录集最多的10个SQL: mysqldumpslow -s r -t 10 /var/lib/mysql/mysql-slow.log

  • 得到访问次数最多的10个SQL: mysqldumpslow -s c -t 10 /var/lib/mysql/mysql-slow.log

  • 得到按照时间排序的前10条里面含有左连接的SQL: mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/mysql-slow.log

     

建议:为方便 可以结合 | 和 more 使用,否则可能出现爆屏

mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more

免责声明:文章转载自《MySQL之SQL优化详解(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos7使用yum方式安装node_exporterPython之Pandas应用函数(apply),将多个值返回到Pandas dataframe中的行下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MYSQL的常用命令和增删改查语句和数据类型

连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码]   创建数据库:create database [库名]   显示所有数据库: show databases;   打开数据库:use [库名]   当前选择的库状态:SELECT DATABASE();   创建数据表:CREATE TABLE [表名]([字段名] [字段类型]...

用脚本完成mysql工作

1. 用mysql -e在脚本中执行mysql的sql语句 #!/bin/bash #simple mysql shell usage logtime=`date "+%Y-%m-%d"` LOG=call_sql_${logtime}.log echo "Start execute sql statement at `date`" >>${...

MySQL++:liunx 安装 MySQL

第一步: 1):下载mysql安装包:这里选择下载版本 5.6.33,通用版,linux下64位 http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz 第二步: 2):卸载老版本MySQL 查找并删除mysql有关的文件 find /...

mysql-noinstall.zip免安装版的优化配置和精简

1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.5.25a-win32.zip,解压缩到相关目录,如:d:\ mysql-noinstall-5.1.53-win32。这个就是mysql的根目录了。 http://dev.mysql.com/downloads/mysql/ 2.配置 在根目录下有几个文件如下: my-sm...

25 Zabbix系统数据表结构介绍

点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 25 Zabbix系统数据表结构介绍自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表、Hosts_groups表、Interface表自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表自学Zabbix之...

CentOS6 更改MySQL默认数据库路径,关键在SELINUX

在CentOS中修改MySQL默认数据库路径,网上介绍很多,只需要修改 /etc/my.cnf 和 /etc/init.d/mysqld,将新目录所有者改为mysql:mysql,很简单。但是改后重启mysqld却总是失败,/var/log/mysqld.log 提示mysqld没有权限访问目录,如下:InnoDB: The error means mys...