Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一条SQL的心路历程

一条SQL的心路历程

作者头像
AsiaYe
发布于 2020-05-18 15:37:48
发布于 2020-05-18 15:37:48
4970
举报
文章被收录于专栏:DBA随笔DBA随笔

一条SQL的心路历程

今天在极客时间上学习丁奇大佬的《MySQL 45讲》的时候,看到了一条高质量的评论,结合我自己的理解,将它分享出来。喜欢的同学可以购买原版课程进行学习,里面的内容很丰富。

当我们在客户端执行一条SQL的时候,例如:

update table set a=a+1 where id=1;

此时在MySQL内部到底发生了哪些事情?

1.首先客户端通过TCP/IP协议发送一条update的SQL语句到Server层的SQL接口组件。该过程会经历连接的三次握手。 2.SQL 接口组件接到该请求后,先对该条语句进行解析,验证权限是否匹配,此处验证的是用户账号的权限。 3.验证通过以后,分析器会对该语句分析,是否语法有错误等,分析过程分为词法分析和语法分析,词法分析包含select关键字解析、字段列名解析等,语义分析则告诉用户输入的语句是否有语法错误。 4.接下来是优化器器生成相应的执行计划,优化器会对比多个执行计划,最后选择最优的执行计划 5.之后会是执行器根据执行计划执行这条语句。在这一步会去open table,如果该table上有MDL锁,则等待。 如果没有,则加在该表上加短暂的MDL锁,如果opend_table太大,表明open_table_cache太小。需要不停的去打开frm文件。 6.进入到innodb引擎层,首先会去innodb_buffer_pool里的data dictionary(元数据信息)得到表信息 7.通过元数据信息,去lock info里查出id=1的记录上是否会有相关的锁信息,如果有的话,需要按照指定的规则进行等待,等待过程完成后把这条update语句需要的锁信息写入到lock info里,执行这条SQL语句 8.然后涉及到的老数据通过快照的方式存储到innodb_buffer_pool里的undo page里,如果data page里有就直接载入到undo page里,如果没有,则需要去磁盘里取出相应page的数据,载入到undo page里,并且记录undo log修改的redo log。

9.在innodb_buffer_pool的data page做update操作。并把操作的物理数据页修改记录到redo log buffer里。由于update这个事务会涉及到多个页面的修改,所以redo log buffer里会记录多条页面的修改信息。 因为group commit的原因,这次事务所产生的redo log buffer可能会跟随其它事务一同flush并且sync到磁盘上 10.同时修改的信息,会按照event的格式,记录到binlog_cache中。这里注意binlog_cache_size是transaction级别的,不是session级别的参数, 一旦commit之后,dump线程会从binlog_cache里把event主动发送给slave的I/O线程 11.之后把这条sql,需要在二级索引上做的修改,写入到change buffer page,等到下次有其他sql需要读取该二级索引时,再去与二级索引做merge,随机I/O变为顺序I/O,但是由于现在的磁盘都是SSD,所以对于寻址来说,随机I/O和顺序I/O差距不大。 12.此时update语句已经完成,需要commit 13.commit操作,由于存储引擎层与server层之间采用的是内部XA(保证两个事务的一致性,这里主要保证redo log和binlog的原子性),所以提交分为prepare阶段与commit阶段 14.prepare阶段,将事务的xid写入,将binlog_cache里的进行flush以及sync操作(大事务的话这步非常耗时) 15.commit阶段,由于之前该事务产生的redo log已经sync到磁盘了。所以这步只是在redo log里标记commit 16.当binlog和redo log都已经落盘以后,如果触发了刷新脏页的操作,使用memcpy函数先把该脏页复制到doublewrite buffer里,把doublewrite buffer里的脏页按照1MB的顺序刷新到共享表空间,然后通过page cleaner线程把脏页写入到磁盘中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
强化学习从基础到进阶–案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
在介绍近端策略优化(proximal policy optimization,PPO) 之前,我们先回顾同策略和异策略这两种训练方法的区别。在强化学习里面,要学习的是一个智能体。如果要学习的智能体和与环境交互的智能体是相同的,我们称之为同策略。如果要学习的智能体和与环境交互的智能体不是相同的,我们称之为异策略。
汀丶人工智能
2023/10/11
1.2K0
强化学习从基础到进阶–案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
强化学习从基础到进阶-常见问题和面试必知必答8:近端策略优化(proximal policy optimization,PPO)算法
经典策略梯度的大部分时间花在数据采样上,即当我们的智能体与环境交互后,我们就要进行策略模型的更新。但是对于一个回合我们仅能更新策略模型一次,更新完后我们就要花时间重新采样数据,然后才能再次进行如上的更新。
汀丶人工智能
2023/06/28
5070
强化学习系列(八)--PPO
回顾上文中的DDPG,DDPG是源于DQN,它使用神经网络替换maxQ(s',a')的功能来解决连续空间问题。也就是说DDPG的Actor网络输出的是一个动作,他的目标是输出一个动作,这个动作输入到Critic后,能过获得最大的Q值。和DQN一样,更新的时候如果更新目标在不断变化会使学习过程困难,所以需要固定目标网络,求target的网络更新后再赋值参数,所以需要四个网络。
languageX
2022/04/01
4.8K0
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
MAPPO 是一种多智能体强化学习算法,基于单智能体的 PPO (Proximal Policy Optimization) 算法进行了扩展,专门设计用于解决多智能体协作和竞争环境中的决策问题。
不去幼儿园
2024/12/03
1.1K0
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
强化学习(十六) 深度确定性策略梯度(DDPG)
    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Critic难收敛的问题,这个算法就是是深度确定性策略梯度(Deep Deterministic Policy Gradient,以下简称DDPG)。
刘建平Pinard
2019/03/05
5.8K0
近端策略优化算法(PPO)
策略梯度迭代,通过计算策略梯度的估计,并利用随机梯度上升算法进行迭代。其常用的梯度估计形式为: E^t[∇θlogπθ(at∣st)A^t] \hat{\mathbb{E}}_t[\nabla_\theta log \pi_\theta(a_t | s_t)\hat{A}_t] E^t​[∇θ​logπθ​(at​∣st​)A^t​] 其中πθ\pi_\thetaπθ​为随机策略,A^t\hat{A}_tA^t​是优势函数在时间步t的估计,其损失函数为: LPG(θ)=E^t[logπθ(at∣st)A^t] L^{PG}(\theta)=\hat{\mathbb{E}}_t[log_{\pi_\theta}(a_t|s_t)\hat{A}_t] LPG(θ)=E^t​[logπθ​​(at​∣st​)A^t​]
Steve Wang
2020/02/18
1.5K0
近端策略优化算法(PPO)
DeepSeek 背后的数学原理:深入探究群体相对策略优化 (GRPO)
群体相对策略优化 (GRPO,Group Relative Policy Optimization) 是一种强化学习 (RL) 算法,专门用于增强大型语言模型 (LLM) 中的推理能力。与严重依赖外部评估模型(价值函数)指导学习的传统 RL 方法不同,GRPO 通过评估彼此相关的响应组来优化模型。这种方法可以提高训练效率,使 GRPO 成为需要复杂问题解决和长链思维的推理任务的理想选择。
致Great
2025/02/12
2.4K0
DeepSeek 背后的数学原理:深入探究群体相对策略优化 (GRPO)
深度强化学习落地方法论算法选择:DQN、DDPG、A3C、PPO、TD3
虽然每年 RL 方向的 paper 满天飞,但真正具有普遍实用价值的突破性工作实在不多,大多数还是在经典框架基础上的改进和扩展。DRL 常规武器库里的存货主要还是老三样:DQN,DDPG 和 A3C,它们是深度学习时代最成熟、最能体现智慧结晶的三个 DRL 框架,你可以在 GitHub 上找到无数相关代码,有 OpenAI,DeepMind 和 Nvidia 这些大公司的,也有个人爱好者的。对于 DRL 初学者,它们是最佳的敲门砖;对于算法研究者,它们是最厚实的 “巨人肩膀”;对于算法工程师,它们是最顺手的试金石。你完全可以把三个框架都放到项目模拟器上跑一跑,看哪个效果好就用哪个。当然,这三个算法框架都有各自的特点和适用 domain,结合对项目的分析,是可以提前评估最合适的算法的。
汀丶人工智能
2023/10/11
6.4K0
深度强化学习落地方法论算法选择:DQN、DDPG、A3C、PPO、TD3
强化学习算法解析:PPO(Proximal Policy Optimization)
PPO(近端策略优化)是OpenAI于2017年提出的一种策略梯度类算法,以其高效性、稳定性和易实现性成为强化学习领域的主流算法。以下从核心原理、数学推导、代码实现到应用场景进行系统解析。
jack.yang
2025/04/05
3.1K0
强化学习算法解析:PPO(Proximal Policy Optimization)
【强化学习】近端策略优化算法(PPO)万字详解(附代码)
近端策略优化、PPO(Proximal Policy Optimization)是一种强化学习算法,设计的目的是在复杂任务中既保证性能提升,又让算法更稳定和高效。以下用通俗易懂的方式介绍其核心概念和流程。
不去幼儿园
2025/01/02
13.2K0
【强化学习】近端策略优化算法(PPO)万字详解(附代码)
强化学习方法小结
在介绍强化学习算法之前先介绍一个比较重要的概念,就是Bellman方程,该方程表示动作价值函数,即在某一个状态下,计算出每种动作所对应的value(或者说预期的reward)。
marsggbo
2019/12/23
7340
强化学习方法小结
强化学习基础篇3:DQN、Actor-Critic详细讲解
在之前的内容中,我们讲解了Q-learning和Sarsa算法。在这两个算法中,需要用一个Q表格来记录不同状态动作对应的价值,即一个大小为 $状态个数,动作个数$ 的二维数组。在一些简单的强化学习环境中,比如迷宫游戏中(图1a),迷宫大小为4*4,因此该游戏存在16个state;而悬崖问题(图1b)的地图大小为 4*12,因此在该问题中状态数量为48,这些都属于数量较少的状态,所以可以用Q表格来记录对应的状态动作价值。但当我们需要应用强化学习来解决实际问题时,比如解决国际象棋问题或围棋问题,那么环境中就会包含 $10^{47}$ 个state或 $10^{170}$ 个state,如此庞大的状态数量已经很难用Q表格来进行存储,更不要说在3D仿真环境中,机器人手脚弯曲的状态是完全不可数的。由此可以看到Q表格在大状态问题和不可数状态问题时的局限性。同时,在一个强化学习环境中,不是所有的状态都会被经常访问,其中有些状态的访问次数很少或几乎为零,这就会导致价值估计并不可靠。
汀丶人工智能
2023/06/03
2.6K0
强化学习基础篇3:DQN、Actor-Critic详细讲解
强化学习笔记6:值函数估计Value function Approximation
\(\delta\) scalar number \(E_t\) 维度和s维度一致
列夫托尔斯昊
2020/08/25
7450
Hands on Reinforcement Learning 09 Policy Gradient Algorithm
本书之前介绍的 Q-learning、DQN 及 DQN 改进算法都是基于价值(value-based)的方法,其中 Q-learning 是处理有限状态的算法,而 DQN 可以用来解决连续状态的问题。在强化学习中,除了基于值函数的方法,还有一支非常经典的方法,那就是基于策略(policy-based)的方法。对比两者,基于值函数的方法主要是学习值函数,然后根据值函数导出一个策略,学习过程中并不存在一个显式的策略;而基于策略的方法则是直接显式地学习一个目标策略。策略梯度是基于策略的方法的基础,本章从策略梯度算法说起。
一只野生彩色铅笔
2023/04/09
4610
Hands on Reinforcement Learning 09 Policy Gradient Algorithm
强化学习(十三) 策略梯度(Policy Gradient)
    在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习。这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很多局限性,因此在另一些场景下我们需要其他的方法,比如本篇讨论的策略梯度(Policy Gradient),它是Policy Based强化学习方法,基于策略来学习。
刘建平Pinard
2018/12/27
1.5K0
强化学习算法TD3论文的翻译与解读:延迟学习、软更新、策略噪声、梯度截取
强化学习算法 TD3 论文:Addressing Function Approximation Error in Actor-Critic Methods 2018.10. ,作者本人的 TD3 代码,PyTroch 实现
汀丶人工智能
2023/10/11
2.4K0
强化学习算法TD3论文的翻译与解读:延迟学习、软更新、策略噪声、梯度截取
强化学习-5:Model-free control
贪婪策略梯度法如果用V(s),需要MDP已知 用Q(s,a),不需要已知MDP
列夫托尔斯昊
2020/08/25
7180
强化学习-5:Model-free control
【万字专栏总结】离线强化学习(OfflineRL)总结(原理、数据集、算法、复杂性分析、超参数调优等)
强化学习发展的特别早,但一直不温不火,其中Sutton老爷子早在1998年就写了强化学习领域的圣经书籍:An Introduction : Reinforcement Learning ,但也并未开启强化学习发展的新局面。直到2012年,深度学习广泛兴起,大规模的神经网络被成功用于解决自然语言处理,计算机视觉等领域,人工智能的各个方向才开始快速发展,强化学习领域最典型的就是2013年DeepMind公司的Volodymyr Mnih发表Playing Atari with Deep Reinforcement Learning(DQN技术),可以说开启了深度强化学习技术发展的新高潮,2015年该论文的加强版Human-level control through deep reinforcement learning 登上Nature, 以及2016年Nature上的AlphaGo: Mastering the game of Go with deep neural networks and tree search 充分证明了深度强化学习技术的发展潜力。
深度强化学习实验室
2022/09/23
11.3K0
【万字专栏总结】离线强化学习(OfflineRL)总结(原理、数据集、算法、复杂性分析、超参数调优等)
Hands on Reinforcement Learning 11 Trust Region Policy Optimization
本书之前介绍的基于策略的方法包括策略梯度算法和 Actor-Critic 算法。这些方法虽然简单、直观,但在实际应用过程中会遇到训练不稳定的情况。回顾一下基于策略的方法:参数化智能体的策略,并设计衡量策略好坏的目标函数,通过梯度上升的方法来最大化这个目标函数,使得策略最优。具体来说,假设
一只野生彩色铅笔
2023/04/09
4260
《深度强化学习》面试题汇总
4. 强化学习的损失函数(loss function)是什么?和深度学习的损失函数有何关系?
深度强化学习实验室
2019/11/21
5.1K0
《深度强化学习》面试题汇总
推荐阅读
相关推荐
强化学习从基础到进阶–案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档