mysql语句性能分析工具之profiling用法

 更新时间:2023年12月13日 15:36:54   作者:zyjzyjjyzjyz  
这篇文章主要介绍了mysql语句性能分析工具之profiling用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

以往我们已经介绍了一个mysql的分析工具:mysql慢查询日志分析工具(pt-query-digest),可以看我的文章:mysql慢查询日志分析工具(pt-query-digest)

一、profiling的介绍

sql查询慢的情况很常见,对于慢sql的优化有三个步骤,又称优化三板斧。

  • 板斧一:查看执行计划explain
  • 板斧二:建立合适索引
  • 板斧三:使用合适的连接关系和过滤条件来实现sql语句的优化

如果执行计划正确sql语句的性能还很慢,可以通过mysql的profiling工具进行定位分析。

为了更精准的定位一条sql语句的性能问题,需要清楚的直到这条sql语句运行时消耗多少系统资源。

mysql中profiling工具可以满足此需求,通过该工具可以获取一条sql语句在执行过程中多种资源的消耗情况——比如cpu,io,ipc,swap等资源消耗情况。

二、profiling使用方法

2.1、启用命令

set profiling = 1;

2.2、启动命令后,运行想要查询性能的sql语句

select * from xiatui where name like '0%' and age = '9803' and sex =0;

2.3、查询上述sql语句信息

show profiles;

 说明:

  • Query_ID:sql语句的id编号,这个编号会在步骤4、5用到
  • Duration:sql语句执行时长
  • Query:具体的sql语句

2.4、查询资源消耗情况

SHOW PROFILE CPU, BLOCK IO FOR QUERY 360;

上述360就是第三步骤的Query_ID值,想要查询哪条sql语句,就输入哪条sql语句对应的id值。

2.5、查询某条sql语句的具体执行时间

SHOW PROFILE FOR QUERY 391;

优化建议:

如果想要优化某条sql语句,可以关注一下该条sql语句的show profile结果中每个阶段的耗时,分析耗时最长的阶段。

如果status列出现下面的信息就可以考虑对sql语句进行优化:

  • converting heap to  MyISAM:查询结果太大,内存不够用
  • creating tmp table:创建了临时表。先拷贝数据到临时表,用完后再删除临时表。
  • copying to tmp table on disk:把内存中临时表复制到磁盘上
  • locked:发生了死锁行为。                

2.6、关闭

set profiling = 0;

三、整体使用过程

set profiling = 1;
select /*+ no_icp(xiatui) */ * from xiatui where name like '0%' and age = '9803' and sex =0;
select * from xiatui where name like '0%' and age = '9803' and sex =0;
show profiles;
set profiling = 0;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于MySql的扩展功能生成全局ID

    基于MySql的扩展功能生成全局ID

    本文借用 MySQL的扩展功能 REPLACE INTO 来生成全局id,REPLACE INTO和INSERT的功能一样,但是当使用REPLACE INTO插入新数据行时,如果新插入的行的主键或唯一键(UNIQUE Key)已有的行重复时,已有的行会先被删除,然后再将新数据行插入
    2015-12-12
  • ADODB 入门

    ADODB 入门

    ADODB 入门...
    2006-12-12
  • 一键安装mysql5.7及密码策略修改方法

    一键安装mysql5.7及密码策略修改方法

    这篇文章主要介绍了一键安装mysql5.7及密码策略修改方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • MySQL学习之完整性约束详解

    MySQL学习之完整性约束详解

    数据完整性指的是数据的一致性和正确性。完整性约束是指数据库的内容必须随时遵守的规则。本文就来为大家讲讲MySQL中的完整性约束,需要的可以参考一下
    2022-08-08
  • mysql字符串的‘123’转换为数字的123的实例

    mysql字符串的‘123’转换为数字的123的实例

    下面小编就为大家带来一篇mysql字符串的‘123’转换为数字的123的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Mysql select in 按id排序实现方法

    Mysql select in 按id排序实现方法

    有时候我们在后台选择了一系列的id,我们想安装填写id的顺序进行排序,那么就需要下面的order by方法,测试通过
    2013-03-03
  • SQL中两列合并为一列的技巧总结(推荐!)

    SQL中两列合并为一列的技巧总结(推荐!)

    在SQL中,拼接多个数据列成为一列是很常见的需求,在SQL中有很多函数可以实现这个需求,这篇文章主要介绍了SQL中两列合并为一列技巧的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-08-08
  • 安装mysql noinstall zip版

    安装mysql noinstall zip版

    没用过mysql, 这几天折腾django ,发现连接mssql好像还是有些小bug,为了防止日后项目有些莫名的db故障,故选择django推荐之一的mysql
    2011-12-12
  • MySQL 8.0.18给数据库添加用户和赋权问题

    MySQL 8.0.18给数据库添加用户和赋权问题

    这篇文章主要介绍了MySQL 8.0.18给数据库添加用户和赋权问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • MySql 存储引擎和索引相关知识总结

    MySql 存储引擎和索引相关知识总结

    这篇文章主要介绍了MySql 存储引擎和索引相关知识总结,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06

最新评论