MySQL中sending data状态包含了什么


这篇文章主要介绍“MySQL中sending data状态包含了什么”,在日常操作中,相信很多人在MySQL中sending data状态包含了什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL中sending data状态包含了什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!原问题如下:数据库发送数据给客户端这个时间算是sql的执行时间嘛?要解决问题我们需要知道MySQL何时将数据传输给了客户端,既然是要传输实际的数据给客户端那么肯定是select语句了,同时我们要明白一个正常select运行到底要经历哪些阶段。实际上整个阶段都算到了语句的实际消耗时间之中的,但是慢查询记录的是:实际执行时间 = (freeing items 末端的时间) 实际消耗时间 – (System lock末端的时间 )比如MDL LOCK等待时间 – (Innodb层锁定的时间)行锁等待消耗时间关于慢查询的详细情况可以参考我的一篇文章,这里不再重述。实际上这个状态是select语句才会有的,如果是DML则不同但是都有等同的阶段如下:select:Sending datainsert语句:Updatedelete/update:Updating这个阶段非常的巨大,它至少包含了:Innodb 层数据开发云主机域名的定位返回给MySQL 层Innodb 层数据的查询返回给MySQL 层Innodb 层数据的修改(如果是MDL)Innodb 层加锁以及等待等待进入Innodb层(innodb_thread_concurrency参数)MySQL 层发送数据给客户端可以看到基本所有和Innodb层打交道的过程都包裹在这个状态下面,当然我只是列举了我想到的一些,其实可能还有很多很多,这里我也把MySQL 层发送数据给客户端包含在 Sending data的答案给出了,下面我们进行分析。之前你可以参考一下我的文章我们建立一个简单的表如下,并且填充数据如下:我们执行如下语句:注意:这里的语句执行时间很长是因为我打了GDB断点所以看起来很久而已
我做了语句的trace,这个语句大概需要如下步骤:首先Innodb定位到索引idxa数据6所在位置这是初次定位调用函数ha_innobase::index_read,返回数据| 10 | 6 | 7 |给MySQL层,但是MySQL层过滤掉不符合条件 a =6 and b=8 不需要返回给客户端。定位完成后再次访问索引idxa的下一条数据,Innodb直接读取就好了调用函数ha_innobase::index_next_same,返回数据| 11 | 6 | 8 |给Mysql层,因为满足条件 a =6 and b=8所以返回给客户端。因为是非唯一索引因此需要再次访问下一条数据来判断已经读取了所有a=6的数据,因此Innodb需要在读取索引idxa的下一条数据调用函数ha_innobase::index_next_same。所以总结整个流程一共经历了一次索引定位,两次索引顺序读取,一共读取了三条数据,但是返回给MySQL层的只有前面两条数据,通过MySQL层的过滤只发送给了客户端一条满足条件的数据。到此,关于“MySQL中sending data状态包含了什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: Mysql 连接数与配置文件不一致问题

mysql> select @@max_connections;+——————-+| @@max_connections |+——————-+| 214 |+——————-+1 ro…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/26 17:32
下一篇 06/26 17:32

相关推荐