Show Profile 是 MySQL 提供的可以用来分析当前查询 SQL 语句执行的资源消耗情况的工具,可用于 SQL 调优的测量。默认情况下处于关闭状态,开启会消耗一定的性能,一般在 SQL 分析和优化的时候使用,只保存最近15次的运行结果。
默认该功能是关闭的,使用前需提前开启Show Profile功能。
show variables like 'profiling';
这个开启状态是session级别,意思就是你如果没有使用过一会会自动关闭
set profiling=on;
show profiles;
查询语句
select o.*,oi.collect_time collectTime,oi.deliver_time deliverTime,oi.fee_confirm_time feeConfirmTime,
oi.fee_delivered_time feeDeliveredTime,oi.sender_contact senderContact,oi.receiver_contact receiverContact,
oi.collect_sign signUrl,oi.arrival_sign arrivalSignUrl,concat(sa.province,sa.city,sa.district) senderAddress,
concat(ra.province,ra.city,ra.district) receiverAddress,sa.province senderProvince,sa.city senderCity,
sa.district senderCounty,ra.province receiverProvince,ra.city receiverCity,ra.district receiverCounty,co.driver_name driverName,
co.driver_phone driverPhone,co.vehicle_serial vehicleSerial,ciq.tms_bid_id tmsBidId,tr.vehicle_type_code,
tr.vehicle_type_name,tr.weight_type_code from ( select o.* from tl_order o where 1=1 and o.order_status!= 'ORDER_STATUS_CANCEL' and o.create_time>= '2023-01-30 00:00:00'
and o.create_time <= '2023-03-01 23:59:59' and o.capacity_type = 'tms' and ( o.dept_tree like concat('001|','%') )
and IFNULL(o.business_type,'') <> "CARTRANSPORT"
and (o.client_code is null or o.client_code not in ('SP616-JNC','SHENZHENAIRLINES'))
and o.order_status not in ('ORDER_STATUS_TODO','ORDER_STATUS_REJECT')
order by o.create_time desc limit 0,20 ) o left join tl_order_info oi on o.order_id = oi.order_id
left join tl_address sa on sa.order_id = o.order_id and sa.addresss_type = '1'
left join tl_address ra on ra.order_id = o.order_id and ra.addresss_type = '3'
left join tl_capacity_order co on co.order_id = o.order_id
left join ci_inquiry ciq on ciq.inquiry_no = o.inquiry_no
left join tl_require_vehicle tr on tr.order_id = o.order_id;
通过 Show Profiles查看结果
使用 Show Profile对sql语句进行诊断
此处的Query_ID就是show profiles 查询到的Query_ID
show profile cpu,block io for query 3;
Show Profile的常用查询参数
①ALL:显示所有的开销信息。
②BLOCK IO:显示块IO开销。
③CONTEXT SWITCHES:上下文切换开销。
④CPU:显示CPU开销信息。
⑤IPC:显示发送和接收开销信息。
⑥MEMORY:显示内存开销信息。
⑦PAGE FAULTS:显示页面错误开销信息。
⑧SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息。
日常开发需注意的结论
①Converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。
②Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。
③Copying to tmp table on disk:把内存中临时表复制到磁盘上,危险!!!
④locked。
如果在Show Profile诊断结果中出现了以上4条结果中的任何一条,则SQL语句需要优化。
注意
1.Show Profile默认是关闭的,并且开启后只存活于当前会话,也就说每次使用前都需要开启。也可修改MYSQL配置文件来修改。
2.通过Show Profiles查看sql语句的耗时时间,然后通过Show Profile命令对耗时时间长的sql语句进行诊断。
3.注意Show Profile诊断结果中出现相关字段的含义,判断是否需要优化SQL语句。
参考
https://blog.csdn.net/weixin_42480750/article/details/123599994