当前位置: 首页 > news >正文

上高县建设局网站合肥专业网站制作设计

上高县建设局网站,合肥专业网站制作设计,如何在百度上做公司做网站,ps网站头部回滚操作#xff0c;除了回滚整个事务#xff0c;还可以部分回滚。部分回滚#xff0c;需要保存点#xff08;savepoint#xff09;的协助。本文我们先看看保存点里面都有什么。 作者#xff1a;操盛春#xff0c;爱可生技术专家#xff0c;公众号『一树一溪』作者除了回滚整个事务还可以部分回滚。部分回滚需要保存点savepoint的协助。本文我们先看看保存点里面都有什么。 作者操盛春爱可生技术专家公众号『一树一溪』作者专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品原创内容未经授权不得随意使用转载请联系小编并注明来源 本文基于 MySQL 8.0.32 源码存储引擎为 InnoDB。 1. undo 日志序号 InnoDB 的事务对象有一个名为 undo_no 的属性。事务每次改变插入、更新、删除某个表的一条记录都会产生一条 undo 日志。这条 undo 日志中会存储它自己的序号。这个序号就来源于事务对象的 undo_no 属性。 也就是说事务对象的 undo_no 属性中保存着事务改变插入、更新、删除某个表中下一条记录产生的 undo 日志的序号。 每个事务都维护着各自独立的 undo 日志序号和其它事务无关。 每个事务的 undo 日志序号都从 0 开始。事务产生的第 1 条 undo 日志的序号为 0第 2 条 undo 日志的序号为 1依此类推。 InnoDB 的 savepoint 结构中会保存创建 savepoint 时事务对象的 undo_no 属性值。 2. savepoint 结构 我们通过 SQL 语句创建一个 savepoint 时server 层、binlog、InnoDB 会各自创建用于保存 savepoint 信息的结构。 server 层的 savepoint 结构是一个 SAVEPOINT 类型的对象主要属性如下 prev指向 server 层的 savepoint 链表中上一次创建的 SAVEPOINT 对象。namesavepoint 的名字。mdl_savepoint创建这个 savepoint 之前事务加了哪些 MDL 锁。 binlog 的 savepoint 结构很简单是一个 8 字节的整数。这个整数的值是创建 savepoint 时事务已经产生的 binlog 日志的字节数也是接下来新产生的 binlog 日志写入 trx_cache 的 offset。 为了方便介绍我们把这个整数值称为 binlog offset。 InnoDB 的 savepoint 结构是一个 trx_named_savept_t 类型的对象主要属性如下 nameInnoDB 的 savepoint 名字。这个名字是 InnoDB 自己生成的和 server 层的 SAVEPOINT 对象中保存的 savepoint 名字不一样。savept也是一个对象类型为 trx_savept_t里面保存着创建 savepoint 时事务对象的 undo_no 属性值。trx_savepointsInnoDB 中多个 trx_named_savept_t 对象形成的链表。 创建 savepoint 时server 层会分配一块 96 字节的内存除了存放它自己的 SAVEPOINT 对象还会存放 binlog offset 和 InnoDB 的 trx_named_savept_t 对象。 server 层的 SAVEPOINT 对象占用这块内存的前 48 字节InnoDB 的 trx_named_savept_t 对象占用中间的 40 字节binlog offset 占用最后的 8 字节。 3. 查找同名 savepoint 客户端连接到 MySQL 之后MySQL 会分配一个专门用于该连接的用户线程。 用户线程中有一个 m_savepoints 链表用户创建的多个 savepoint 通过 prev 属性形成链表m_savepoints 就指向最新创建的 savepoint。 server 层创建 savepoint 之前会按照创建时间从新到老逐个查看链表中是否存在和本次创建的 savepoint 同名的 savepoint。 4. 删除同名 savepoint 如果在用户线程的 m_savepoints 链表中找到了和本次创建的 savepoint 同名的 savepoint需要先删除 m_savepoints 链表中的同名 savepoint。 找到的同名 savepoint是 server 层的 SAVEPOINT 对象它后面的内存区域分别保存着 InnoDB 的 trx_named_savept_t 对象、binlog offset。 binlog 是个老实孩子乖乖的把 binlog offset 写入了 server 层为它分配的内存里。删除同名 savepoint 时不需要单独处理 binlog offset。 InnoDB 就不老实了虽然 server 层也为 InnoDB 的 trx_named_savept_t 对象分配了内存但是 InnoDB 并没有往里面写入内容。 事务执行过程中用户每次创建一个 savepointInnoDB 都会创建一个对应的 trx_named_savept_t 对象并加入 InnoDB 事务对象的 trx_savepoints 链表的末尾。 因为 InnoDB 自己维护了一个存放 savepoint 结构的链表server 层删除同名 savepoint 时InnoDB 需要找到这个链表中对应的 savepoint 结构并删除流程如下 server 层把同名 savepoint 的 SAVEPOINT 对象后面分配给 trx_named_savept_t 对象的内存地址传给 InnoDB。InnoDB 根据自己的算法把内存地址转换为字符串作为 InnoDB 的 savepoint 名字到事务对象的 trx_savepoints 链表中找到对应的 trx_named_savept_t 对象并从链表中删除该对象。 InnoDB 从事务对象的 trx_savepoints 链表中删除 trx_named_savept_t 对象之后server 层接着从用户线程的 m_savepoints 链表中删除 server 层的 SAVEPOINT 对象也就连带着清理了 binlog offset。 5. 保存 savepoint 处理完查找、删除同名 savepoint 之后server 层就正式开始创建 savepoint 了这个过程分为 3 步。 第 1 步binlog 会生成一个 Query_log_event。 以创建名为 test_savept 的 savepoint 为例这个 event 的内容如下 SAVEPOINT test_savept binlog event 写入 trx_cache 之后binlog offset 会写入 server 层为它分配的 8 字节的内存中。 第 2 步InnoDB 创建 trx_named_savept_t 对象并放入事务对象的 trx_savepoints 链表的末尾。 trx_named_savept_t 对象的 name 属性值是 InnoDB 的 savepoint 名字。这个名字是根据 server 层为 InnoDB 的 trx_named_savept_t 对象分配的内存的地址计算得到的。 trx_named_savept_t 对象的 savept 属性是一个 trx_savept_t 类型的对象。这个对象里保存着创建 savepoint 时事务对象中 undo_no 属性的值也就是下一条 undo 日志的序号。 第 3 步把 server 层的 SAVEPOINT 对象加入用户线程的 m_savepoints 链表的尾部。 6. 总结 server 层会创建一个 SAVEPOINT 对象用于存放 savepoint 信息。 binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint 链表里面保存着 trx_named_savept_t 对象。 如果 m_savepoints 链表中存在和本次创建的 savepoint 同名的 savepoint 创建新的 savepoint 之前server 层会从链表中删除这个同名的 savepoint。 server 层创建的 SAVEPOINT 对象会放入 m_savepoints 链表的末尾。 InnoDB 创建的 trx_named_savept_t 对象会放入事务对象的 trx_savepoints 链表的末尾。 本期问题创建 savepoint 时为什么要把 SAVEPOINT xxx 写入 trx_cache 并最终写入 binlog 日志文件呢这个问题我还没有答案欢迎大家在留言区留下你的想法。 下期预告MySQL 核心模块揭秘 | 13 期 | 回滚到 savepoint。 更多技术文章请访问https://opensource.actionsky.com/ 关于 SQLE SQLE 是一款全方位的 SQL 质量管理平台覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库为开发和运维提供流程自动化能力提升上线效率提高数据质量。 SQLE 获取 类型地址版本库https://github.com/actiontech/sqle文档https://actiontech.github.io/sqle-docs/发布信息https://github.com/actiontech/sqle/releases数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
http://www.sczhlp.com/news/180478/

相关文章:

  • 网站短信通知设计培训
  • 哪个网站专门做快餐车明天去广州需要隔离吗
  • 兴义市住房城乡建设局网站柳州 网站开发
  • 做图片视频的网站有哪些问题成都网站设计制作价格
  • 部门门户网站建设的目的个人微信公众平台怎么用
  • 网站建设进展推进表中国兰州网pc主站
  • 麻涌企业网站建设做印刷哪个网站好
  • 网站城市切换代码wordpress手机版侧栏导航栏
  • 建视频网站系统吗福建省建设厅网站官网
  • 做视频网站视频建设部规范公布网站
  • 广东模板网站建设报价酒仙网技术开发与网站建设方面
  • 专门做项目代理的网站微信公众号平台官网登陆
  • 建外贸网站费用快站建站教程
  • dede5.7微电影网站模板国家企业信用信息公示系统 填报
  • 网站设计 ipad安徽建工网
  • 买域名做网站有什么wordpress
  • 电子商务网站建设与管理的学后感河津网站建设网站建设
  • 做网站的人会留下啥漏洞吗清远市最新消息
  • 经典网站建设方案网站项目策划书模板
  • 工程项目建设网站山海关建设局网站
  • h5营销型网站suteng网站后台统计怎么启动啊
  • 无锡网站设计网站手机应用商店app下载官方网站下载
  • 手机软件开发和网站开发手工制作大全折纸
  • 东丽区做网站wordpress建博客网站吗
  • 旅游网站有哪些?番禺网站建设系统
  • 贵州网站建设费用成都行业网站
  • 芜湖建设网站新站加快网站收录
  • thinkphp做网站好吗网页编辑框
  • 网站菜单导航电子商务网站建设项目书
  • ecetc商务网站建设工程师长沙做网站好的公司