MySQL数据库:使用show profile命令分析性能

MySQL数据库:使用show profile命令分析性能

1、show profile的作用:

能够查出最近执行的SQL语句的运行状态,包括在运行过程中执行了哪些操作,各占用了多少时间,利用proflie 功能,可以分析一个SQL具体的执行代价是怎么样的,尤其是可以分析它的最大瓶颈在哪里。目前profile 功能可提供除了内存以外的其他资源消耗统计,例如CPU、I/O、CONTEXT、SWAP等。大部分情况下,profile 的结果我们主要关注两列:Status、Duration,前者表示的是profile 里的状态,后者是该状态的耗时。因此,我们最主要的是关注处于哪个状态耗时最久,这些状态中,哪些是可以进一步优化的。

 

2、show profile 语法:

SHOW PROFILE [type [, type] … ]

[FOR QUERY n]

[LIMIT row_count [OFFSET offset]]

 

type参数:

| ALL:显示所有开销信息

| BLOCK IO:阻塞的输入输出次数

| CONTEXT SWITCHES:上下文切换相关开销信息

| CPU:显示CPU的相关开销信息 

| IPC:接收和发送消息的相关开销信息

| MEMORY :显示内存相关的开销,目前无用

| PAGE FAULTS :显示页面错误相关开销信息

| SOURCE :列出相应操作对应的函数名及其在源码中的调用位置(行数) 

| SWAPS:显示swap交换次数的相关开销信息

 

LIMIT row_count子句用于限制输出行数。

 

3、show profile / show profiles的使用:

show profile 以及 show profiles语句可以显示当前会话过程中执行的sql语句的性能(profiling)信息。

(1)profiling功能由MySQL会话变量 : profiling控制,默认是OFF关闭状态,查看当前session是否开启profile功能:

select @@profiling;

show variables like ‘profiling’; 

(2)开启profiling:

set profiling=ON;

(3)运行SQL:

随便运行几条SQL,以便show profiles 的日志分析。

(4)查看结果:

(4.1)show profiles

show profiles 显示最近发给服务器的多条语句,条数根据会话变量profiling_history_size定义,默认是15,最大值为100。设为0等价于关闭profiling 分析功能。除SHOW PROFILE和SHOW PROFILES之外,所有sql语句的性能信息都会被记录,甚至包括有错误的语句。

show profiles;

MySQL数据库:使用show profile命令分析性能

(4.2)show profile

用于单独分析最近一条执行的sql语句的详细资源占用信息和工作状况,默认显示状态以及它们持续的时间。

show profile;

MySQL数据库:使用show profile命令分析性能

可以给show profile 指定一个 for query id 来查看指定 id 的语句,还可以给输出添加新的列。如,查看用户和CPU使用。可以用如下命令。(详细参数请看本文第2点的type参数)

show profile cpu,block io for query id;

id 为 show profiles 查出来的某条记录的Query_ID。

MySQL数据库:使用show profile命令分析性能

 

4、作用范围:

(1)这个命令只是在本会话内起作用,即无法分析本会话外的语句。开启分析功能后,所有本会话中的语句都被分析(甚至包括执行错误的语句),除了SHOW PROFILE和SHOW PROFILES两句本身。

(2)profiling是会话级的,当会话结束,与之相关的profiling信息也会随之消失。

(3)profiling是针对进程(process)而非线程(threads),因此运行在服务器上的其他服务进程可能会影响分析结果.

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100070.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • APP弱网测试[通俗易懂]

    APP弱网测试[通俗易懂]APP弱网测试 一、网络测试的一般流程step1:首先要考虑网络正常的情况① 各个模块的功能正常可用② 页面元素/数据显示正常step2:其次要考虑无网络的情况① APP各个功能在无网络情况下是否可用② APP各个页面之间切换是否正常③ 发送网络请求时是否会导致闪退、卡死等异常情况④ APP各个页面是否显示完整美观,未刷新的页…

    2022年4月19日
    32
  • MS17010(永恒之蓝)漏洞利用与复现

    MS17010(永恒之蓝)漏洞利用与复现一:前言EhernalBlue通过Tcp端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只需要开机上网,攻击者就能在电脑和服务器中植入勒索软件。复现环境:攻击机kaliIP:10.10.10.136…

    2022年6月11日
    109
  • 2020年Android面试题汇总(初级)-简书_android经典面试题

    2020年Android面试题汇总(初级)-简书_android经典面试题Android面试题及答案(2022年最新Android面试题大全带答案),发现网上很多Android面试题整理都没有答案,所以花了很长时间搜集,本套Android面试题大全,Android面试题大汇总,有大量经典的Android面试题以及答案,包含Android语言常见面试题、Android工程师高级面试题及一些大厂Android开发面试宝典,面试经验技巧等,应届生,实习生,企业工作过的,都可参考学习!这套Android面试题汇总大全,希望对大家有帮助哈~此面试题合集分为9个部分:Java基础、And

    2022年8月28日
    0
  • ubuntu下安装python3

    ubuntu下安装python3安装步骤ubuntu本身安装的时候已经自带python了,在终端输入python-V查看当前python版本python-V如上图,当前电脑安装的python版本是2.7.12下载最新的python3sudoapt-getinstallpython3如图,我的电脑本身已经装有python3了,如果没安装有,则应该安装最

    2022年6月23日
    45
  • EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]

    EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]EnterCriticalSection和LeaveCriticalSection是干嘛用的?多个线程操作相同的数据(内存块)时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这两个函数就是实现这种功能的。作用域:不是针对于资源的,而是针对于不同线程间的代码段的什么是临界区:临界区是一种轻量级机制,在某一时…

    2022年9月20日
    0
  • singleTask和startActivityResult「建议收藏」

    singleTask和startActivityResult「建议收藏」在稍微复杂点的项目中都有过singleTask、singleInstance,避免打开同一个Activity返回的时候A返回以后还是A吧,对A在AndroidManifest里面设置android:launchMode=”singleTask”即可避免这个问题,但是发现用startActivityResult的时候A跳转到B,在B里面setResult以后在A里面拿到的resultcode不是自己

    2022年6月26日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号