MySQL中怎么查看执行状态

46次阅读
没有评论

共计 1627 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

今天就跟大家聊聊有关 MySQL 中怎么查看执行状态,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

当感觉 mysql 性能出现问题时,通常会先看下当前 mysql 的执行状态,使用 show processlist 来查看,例如:

MySQL 中怎么查看执行状态

其中 state 状态列信息非常重要,先看下各列含义,然后看下 state 常用状态

各列的含义

1、id

一个标识,你要 kill 一个语句的时候使用,例如 mysql kill 207;

2、user

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

3、host

显示这个语句是从哪个 ip 的哪个端口上发出的,可用来追踪出问题语句的用户

4、db

显示这个进程目前连接的是哪个数据库

5、command

显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)

6、time

此这个状态持续的时间,单位是秒

7、state

显示使用当前连接的 sql 语句的状态,很重要的列,state 只是语句执行中的某一个状态,例如查询,需要经过 copying to tmp table,Sorting result,Sending data 等状态才可以完成

8、info

显示这个 sql 语句,因为长度有限,所以长的 sql 语句就显示不全,但是一个判断问题语句的重要依据

state 常见状态分析

1、Sleep

通常代表资源未释放,如果是通过连接池,sleep 状态应该恒定在一定数量范围内,例如:

数据查询时间为 0.1 秒,而网络输出需要 1 秒左右,原本数据连接在 0.1 秒即可释放,但是因为前端程序未执行 close 操作,直接输出结果,那么在结果未展现在用户桌面前,该数据库连接一直维持在 sleep 状态

2、Locked

操作被锁定,通常使用 innodb 可以很好的减少 locked 状态的产生

3、Copy to tmp table

索引及现有结构无法涵盖查询条件时,会建立一个临时表来满足查询要求,产生巨大的 i / o 压力 Copy to tmp table 通常与连表查询有关,建议减少关联查询或者深入优化查询语句,如果出现此状态的语句执行时间过长,会严重影响其他操作,此时可以 kill 掉该操作

4、Sending data

Sending data 并不是发送数据,是从物理磁盘获取数据的进程,如果你的影响结果集较多,那么就需要从不同的磁盘碎片去抽取数据,如果 sending data 连接过多,通常是某查询的影响结果集过大,也就是查询的索引项不够优化

5、Storing result to query cache

如果频繁出现此状态,使用 set profiling 分析,如果存在资源开销在 SQL 整体开销的比例过大(即便是非常小的开销,看比例),则说明 query cache 碎片较多,使用 flush query cache 可即时清理,Query cache 参数可适当酌情设置

MySQL 数据库是常见的两个瓶颈是 CPU 和 I / O 的瓶颈,CPU 在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘 I / O 瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上,我们可以用 mpstat, iostat, sar 和 vmstat 来查看系统的性能状态。

除了服务器硬件的性能瓶颈,对于 MySQL 系统本身,我们可以使用工具来优化数据库的性能,通常有三种:使用索引,使用 EXPLAIN 分析查询以及调整 MySQL 的内部配置。

在优化 MySQL 时,通常需要对数据库进行分析,常见的分析手段有慢查询日志,EXPLAIN 分析查询,profiling 分析以及 show 命令查询系统状态及系统变量,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

看完上述内容,你们对 MySQL 中怎么查看执行状态有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1627字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)