暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DMRAC缓存交换

原创 敬勇 2020-04-22
823

缓存交换
根据目前的硬件发展状况来看,网络的传输速度比磁盘的读、写速度更快,因此,DMRAC集群引入了缓存交换(Buffer Swap)技术,节点间的数据页尽可能通过网络传递,避免通过磁盘的写入、再读出方式在节点间传递数据,从而减少数据库的IO等待时间,提升系统的响应速度。

缓存交换的实现基础是GBS/LBS服务,在GBS/LBS中维护了Buffer数据页的相关信息。包括:1. 闩的封锁权限(LATCH);2. 哪些站点访问过此数据页(Access MAP);3. 最新数据保存在哪一个节点(Fresh EP)中;4. 以及最新数据页的LSN值(Fresh LSN)等信息。这些信息作为LBS封锁、GBS授权和GBS权限回收请求的附加信息进行传递,因此并不会带来额外的通讯开销。

下面,以两节点DMRAC集群(EP0/EP1)访问数据页P1为例子。初始页P1位于共享存储上,P1的GBS控制结构位于节点EP1上。初始页P1还没有被任何一个节点访问过,初始页P1的LSN为10000。通过几种常见场景分析,逐步深入,解析缓存交换的原理。
场景1
节点EP0访问数据页P1。

  1. 节点EP0的本地LBS向EP1的GBS请求数据页P1的S LATCH权限
  2. 节点EP1的GBS修改P1控制结构,记录访问节点EP0的封锁模式为S LATCH(数据分布节点为EP0),并响应EP0的LBS请求
  3. 节点EP0的LBS获得GBS授权后,记录获得的授权模式是S_LATCH,P1数据不在其他节点的Buffer中,发起本地IO请求,从磁盘读取数据。
    IO完成后,修改LBS控制结构,记录数据页上的LSN信息
    1.png

场景2
节点EP1访问数据页P1。

  1. 节点EP1本地LBS向EP1的GBS请求数据页P1的S LATCH权限
  2. 节点EP1的GBS修改控制结构,记录访问节点EP1的封锁模式为S LATCH(数据分布节点为EP0/EP1),并响应EP1的LBS请求
  3. 节点EP1的LBS获得GBS授权后,记录获得的授权模式是S LATCH,根据数据分布情况,EP1向EP0发起P1的读请求,通过内部网络从EP0获取数据,而不是重新从磁盘读取P1数据
    2.png
    场景3
    节点EP0修改数据页P1。
  4. 节点EP0本地LBS向EP1的GBS请求数据页P1的X LATCH权限(附加LSN信息)
  5. 节点EP1的GBS修改控制结构的LSN值,从EP1的LBS回收P1的权限
  6. 修改访问节点EP0的封锁模式为S + X LATCH,并响应EP0的LBS请求
  7. 节点EP0的LBS获得GBS授权后,记录获得的授权模式是S + X LATCH
  8. 节点EP0修改数据页P1,LSN修改为11000
    这个过程中,只有全局Latch请求,数据页并没有在节点间传递。
    3.png
    修改之后,数据页P1的LSN修改为11000。如下所示:
    4.png

场景4
节点EP1修改数据页P1。
1.节点EP1本地LBS向EP1的GBS请求数据页P1的X LATCH权限
2.节点EP1的GBS发现P1被EP0以S + X方式封锁,向EP0发起回收P1权限的请求
3.节点EP0释放P1的全局LATCH,响应GBS,并且在响应消息中附加了最新的PAGE LSN值
4.节点EP1的GBS收到EP0的响应后,修改GBS控制结构,记录最新数据保存在EP0,最新的LSN值信息,记录EP0获得的授权模式是S + X LATCH
(此时,数据分布节点仍然是EP0/EP1),并授权EP1的LBS
5.节点EP1的LBS收到授权信息后,记录获得的授权模式是S + X LATCH,并根据数据分布情况,向节点EP0发起数据页P1的读请求
6.节点EP1修改数据页P1,LSN修改为12000
5.png

修改之后,数据页P1的LSN修改为12000。如下所示:
6.png

这个过程中,数据页P1的最新数据从EP0传递到了EP1,但并没有产生磁盘IO。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论