mysql优化探索(2)查看整个mysql的命令执行状态、如何定位慢sql语句(sql优化)

本文介绍了如何使用MySQL的show status命令查看命令执行状态,包括查询、插入、更新和删除的次数,以及事务提交和回滚情况。同时,讲解了通过开启慢查询日志和使用show processlist命令来定位慢查询语句的方法,帮助优化数据库性能。
摘要由CSDN通过智能技术生成

一.查看整个mysql的命令执行状态

show [session | global] status 命令:

可以查看对mysql操作命令的执行次数,session选项是指本次会话对命令的执行次数,global选项是指全部会话对命令的执行次数。

例如show global status like 'Com_%';这条命令会显示以下对以下命令的执行次数:

Com_select:执行SELECT语句的操作次数,一次查询会增加1.

Com_insert:执行INSERT语句的操作次数,一次执行增加1.

Com_update:执行UPDATE操作的次数。

Com_delete:执行DELETE操作的次数。

Com_commit:事物的提交次数

Com_rollback:事物的回滚次数

再例如show global status like 'Innodb_%';这条命令会显示以下对以下命令的执行次数:

Innodb_rows_read:Innodb存储引擎下SELECT的操作次数。

Innodb_rows_insterted:Innodb存储引擎下INSERT的操作次数

Innodb_rows_updated:Innodb存储引擎下UPDATE操作次数

Innodb_rows_deleted:Innodb存储引擎下DELETED的操作次数

再例如show global status like 'Connections';是试图连接mysql的的连接次数

再例如show global status like 'Uptime';是mysql服务器的运行时间

再例如show global status like 'Slow_queries';是慢查询的次数

通过以上的这些显示,我们可以了解到,应用是已查询为主,还是以添加更新为主。知道事物的执行次数和回滚次数,例如如果事物的混滚次数特别多,说明应用程序有可能有bug,慢查询执行的次数太多的话,说明应用程序性能堪忧。

二、怎么定位慢查询语句

定位慢查询语句有两种方法,一种是启用和设置慢查询日志,第二种方法是用show processlist或者show full processlist命令在应用执行sql语句时捕捉慢查询sql,由于当sql执行完毕时才被写入慢查询日志,所以当出现应用性能问题时不一定能定位到真正的问题。但是show processlist或者show full processlis命令会实时反应定位应用出现性能问题时的慢sql。

第一种方法,开启慢查询日志

1.查询慢查询时间 

SHOW VARIABLES LIKE "long_query_time"

2.查询慢查询日志文件地址

SHOW VARIABLES LIKE "%slow%

3.开启慢查询功能

编辑/etc/my.cnf在[mysqld]下添加以下三行:

#是否开启慢查询日志,1为开启

slow_query_log  = 1

#sql请求时间超过多少秒被视为慢查询这里可以根据自己需要配置
long_query_time = 0.00001

#慢查询日志文件位置
slow_query_log_file  = /data/mysql/mysql-slow.log

配置好后重启mysql:

service mysqld start

测试:

进入mysql 执行select  sleep(1);然后查看慢查询日志

cat /data/mysql/mysql-slow.log

如上图显示第一行时记录时间,第二行时用户信息,第三行时执行语句每个步骤都用了多少时间,第四行是语句实体。

第二种方法使用show processlist或者show full processlis确定慢sql

查询显示如下图:

以下是对各个字段的解释:

id:用户登陆mysql时系统分配的connection_id

user:显示当前用户,如果不是root这个命令就只显示用户权限范围的sql语句

host:显示这个语句是从哪个ip和端口发起的,可以用来追踪问题sql的用户

db:显示进程连接的是哪个数据库

command:显示当前连接的执行命令,一般值为sleep休眠状态,query查询状态,connect连接状态。

time:显示这个状态的持续时间单位是秒

state:显示使用当前连接的sql语句的状态,这个字段我们一定要重视。state描述的是语句执行中的某一个状态。一个sql语句,以查询为例,可能需要经过copying to tmp table、sorting result、sending data等状态才可以完成。

info:显示这个sql语句,是判断有问题的sql语句的重要依据,一般记录的是线程执行的sql语句。默认显示语句的前100字符,如果想看全部语句要用show full processlist命令。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值