在MySQL中,可以使用SHOW STATUS语句查询一些MySQL数据库服务器的性能参数、执行频率。
SHOW STATUS语法如下:
1 | SHOW [GLOBAL|SESSION] STATUS LIKE '参数' |
在MySQL中,可以使用SHOW STATUS语句查询一些MySQL数据库服务器的性能参数、执行频率。
SHOW STATUS语法如下:
1 | SHOW [GLOBAL|SESSION] STATUS LIKE '参数' |
show processlist
字段 | 解释 |
---|---|
id | 连接标识符 |
User | 当前用户 |
Host | 操作的主机,指客户端 |
db | 默认数据库(如果已选择);否则为NULL |
Command | 线程正在执行的命令类型 |
Time | 线程处于其当前状态的持续时间(以秒为单位) |
Size | 指示线程正在执行的操作,事件或状态 |
Info | 线程正在执行的语句,如果未执行任何语句,则为NULL。 该语句可能是发送到服务器的那条语句,或者是最内部的语句(如果该语句执行其他语句,比如存储过程中的select语句) |
sleep:正在等待客户端发送新的请求
query:正在执行查询或者正在将结果发送给客户端
locked:在MySQL服务层,线程正在等待表锁
analyzing and statistics:线程正在收集存储引擎的统计信息,并生成查询的执行计划
copying to tmp table:线程正在执行查询,并且将其结果集都复制到一个临时表中
sorting result:正在对结果集进行排序
sending data:线程可能在多个状态之间传送数据,或者在生成结果集或者向客户端返回数据
Show Profile官方文档地址:https://dev.mysql.com/doc/refman/5.7/en/show-profile.html
1 | # 查看是否开启 |
先执行要分析的SQL:select * from t_manage_user tmu ;
执行show profiles;
,会出现以下结果
分析某一条SQL语法
1 | show profile all for query 38 |
show profile返回结果字段含义
converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。
Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。
Copy to tmp table on disk:把内存中临时表复制到磁盘上,警惕!
locked。
如果在show profile诊断结果中出现以上4条结果中的任何一条,则SQL语句需要优化!!!
System lock
Sending data
解释:从server端发送数据到客户端,也有可能是接收存储引擎层返回的数据,再发送给客户端,数据量很大时尤其经常能看见。
备注:Sending Data不是网络发送,是从硬盘读取,发送到网络是Writing to net
建议:通过索引或加上LIMIT,减少需要扫描并且发送给客户端的数据量
Sorting result
Table lock
create sort index
Creating tmp table
converting HEAP to MyISAM
Copying to tmp table on disk
1 | show profile type1,type2… for query Query_ID |
all:显示所有的性能开销信息
block io:显示块 IO 相关的开销信息
context switches: 上下文切换相关开销
cpu:显示 CPU 相关的信息
ipc:显示发送和接收相关的开销信息
memory:显示内存相关的开销信息
page faults:显示页面错误相关开销信息
source:显示和 Source_function、Source_file、Source_line 相关的开销信息
swaps:显示交换次数的相关信息
Show Profile语句已经弃用,并将在以后版本中移除,建议使用 Performance Schema
Performance Schema文档:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profiling.html
nacos配置如下
1 | sdt: |
注入后
1 | @Value("${sdt.areaCode}") |
会有类型转换为浮点型: 574.0
nacos中的值加单引号
1 | sdt: |