这是该系列的第三篇文章(1,2)了。之所以选择并发线程控制着手研究InnoDB的代码有两个原因:第一,这段代码相对独立,不要了解太多的相关代码就可以理解;第二,稍微多看一些代码你会发现,到处都是线程并发控制相关的代码出现,所以这也是一个基础。
在第一篇中,介绍了InnoDB内部排他锁的实现,第二篇则介绍InnoDB内部读写锁的实现原理(这里说的“内部”是为了区别于数据库层面的读写锁)。本篇则将延续第二篇,介绍读写锁相关的代码实现。 (more…)
一个人 背包 走
骑车到黄龙,买了到沈家门的车票
收到了很多关于杭州的旅游传单,发现很多地方都还值得再去
想订青旅,早没房间了。去了住哪儿?
上了汽车,思绪乱飞,很多心底的念想都出来了
耳边又想起了《晓之车》
路上很多车,路边有广告牌
田间,两个人骑着车,太阳很大
玩玩《传颂之物》的游戏吧
太阳很大,云很白、很浓,很清晰
想起了工作,MySQL Q3 Q4 我们要做成怎样
一座小山,像是断了一半,露出石头,山另一侧是全是绿树
水塔、烟囱、白云、乱跑的思绪
烈日下,天边的白云如高贵的展览品
绿树很多,到处是。都在享受着烈日炎炎
白云,还是白云,让我想起了古希腊诸神的雕塑
11:58
路边抛锚的汽车、余姚榨菜、“面朝大湖,春暖花开”…
天边的云,越来越近
“为什么你听不见…” – – -郑智化
五夫大桥
湖 重叠连绵的山 白云 (more…)
前面做了一个开始,沿着路慢慢走下去。
开始之前,这里可以说说这次准备开始研究源代码的一个很大诱因了。前一段时间在生产环境遇到了一个InnoDB报错,这个错误甚至会导致InnoDB Crash:
沿着这里的线索 buf/buf0buf.c line 680 找到了:
继续,就开始看rw_lock_create的实现,然后感觉需要看更多基础的一点的内容,这样就有了前面一片文章,继续研究,就有了现在的这篇文章。 (more…)
作为DBA关心的更多的可能是原理、机制,对于源码一般大家也不是特别关心,也不太用得上。而且对于对于源代码级别的细节也很难用文字表达自己的理解,最终理解必须还是需要自己去看看每一行代码到底是怎样的。也读过《Understanding.MySQL.Internals》的大部分章节,作者也是偏重于从代码的实现目的(原理、机制)来介绍的,国内的《MySQL核心内幕》(个人对于“核心内幕”这个词有莫名的反感)算是更多的从源码开始介绍MySQL了,可是这本书也许是授予篇幅的限制,介绍的东西也并不多。
开始写这篇文章,不能期待自己能写多少,也不能期待自己能研究多少,不过至少走出了自己探索的第一步。文章的宗旨不在于能够多么细致的分析MySQL的源代码,而是希望能给自己,能给他人打开走向源代码的第一道门。
我是BNU数学系毕业的,对C语言知道甚少,C语言的经历大概就是“计算方法”课程中实现的求解各种方程的撇脚程序了。所以虽然我会极力避免错误,但是相信还是会犯一堆错误,希望各位看官能够宽容点,有错误指出来,慢慢改正。
InnoDB的代码通过宏定义考虑很多平台的兼容问题,这里分析的主要是类Unix/Linux平台(POSIX标准)的代码段,所以下面的很多代码段也是删除相关兼容性代码的。本文InnoDB源码是Plugin1.0.6版本。 (more…)