mysql 逻辑读_运维日记| MySQL/Oracle深度解析之一:逻辑读

前言THE FIRST比较数据库优劣、异同的文章有很多了,使用压测工具,进行不同压力下的测试,就能大致上比较出来哪种数据库是“最快”的数据库。但从有经验的数据架构、DBA等专业人士角度,仅仅“最快”是不够的,数据库是十分复杂的体系,要考虑方方面面的问题。本文从“竞争”的角度,使用调试技术,在MySQL和Oracle的代码世界中畅游,像使用显微镜一样,以“最近”的距离,分析两种数据库由于代码设计的不...
摘要由CSDN通过智能技术生成

前言

THE FIRST

比较数据库优劣、异同的文章有很多了,使用压测工具,进行不同压力下的测试,就能大致上比较出来哪种数据库是“最快”的数据库。但从有经验的数据架构、DBA等专业人士角度,仅仅“最快”是不够的,数据库是十分复杂的体系,要考虑方方面面的问题。

本文从“竞争”的角度,使用调试技术,在MySQL和Oracle的代码世界中畅游,像使用显微镜一样,以“最近”的距离,分析两种数据库由于代码设计的不同,而造成的竞争与锁机制的异同。

数据库的竞争与锁机制,是数据库最为复杂的部分,不可能在一篇短短的文章中描述完,本文以“逻辑读”为样本,从细枝末节中对比MySQL、Oracle的优劣、异同。逻辑读是数据库最基础的操作,也是最繁忙的操作。

我们先从MySQL入手,这里的研究对象当然是MySQL的InnoDB引擎。其他常用引擎比如Myisam根本没有缓存,没有数据库层面的逻辑读。

再说一下调试技术,它不同于直接一上来就开始的源码阅读,调试技术重点在于要读“活”着的源码。我们不去看磁盘文件中静止的.c、.cpp、.h等文件,而是要把程序运行起来,再结合源码,观察它运行起来的行为,理解源码其中的细枝末节。

有了对细节的探索,可以像他一样:

37ae52321d9b147291c2b2fe65323b3d.gif

否则,只能像他一样:

bf3d57edb52e16b92102da3788725d3f.png

第一节

基础知识介绍:MySQL中的HASH表与CBC Latch

MySQL的逻辑读,网上有相关函数,从buf_page_get_gen函数开始,一直到MySQL8都是这样。不过相比5.7,这个函数在MySQL8中有了很大的改动。我们后面的所有分析,都是针对MySQL 8。

数据页或块的缓存,在MySQL中称为Buffer Pool,在Oracle中称为Buffer Cache,下面统一简称数据缓存。无论MySQL还是Oracle,数据缓存的管理方式类似,如下图:

2565e61cfb6fbd6bcf3d082371d63697.png

其实不只MySQL、Oracle,此图适用于所有主流关系型数据库的数据缓存管理。

在MySQL中,HASH表由hash_cell_t型的结构组成,每一个Bucket,都是一个hash_cell_t型的结构变量。hash_cell_t的定义如下:

de8d5846f251c38f7e430226dd887d49.png

plugin/innodb_memcached/innodb_memcache/include/innodb_utility.h的126行中你可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值