作者:北京大学杨磊

这篇文章通过机器学习方法预测未来访问来解决LSM-tree存储引擎下的缓存失效问题,目前该论文已经被数据库顶会VLDB2020接收。

问题背景

传统的缓存替换机制,比如LRU、LFU,在应对传统的以表为粒度的统计和访问信息时,能够维持较好的性能。而在LSM-tree下,这些传统的缓存替换机制不再有效。因为后台的操作(比如flush和compaction)会破坏原有的表粒度的统计信息,也因此破坏了根据统计信息预测访问信息的机制,我们将这个问题称为缓存失效问题(cache invalidation)。当出现这个问题时,LSM-tree存储引擎会发生剧烈的性能抖动,破坏了系统运行的稳定性,同时也极大的影响了用户的访问体验。下图是在X-Engine中对缓存失效问题的测试结果。

究其原因,是因为LSM-tree 使用了能够支持快速写入的 copy-on-write (CoW)方式来存储新增数据。而这种方法不可避免的需要后台操作来帮助它合并数据。因此,我们提出了使用机器学习的方法来实现不被后台操作所影响的高速缓存预取机制。设计思路首先我们对缓存失效问题进行形式化定义如下:

根据这个形式化定义,我们发现之所以产生cache invalidation问题,是因为存储引擎中的compaction和flush操作产生的流Mi影响了原有的对block的统计流,从而导致传统的缓存替换机制不再有效。因此我们提出了使用在整体数据流中不会被影响的粒度,也就是key range的粒度作为整体的统计信息采集粒度,并且根据这些统计信息在compaction和flush的过程中使用机器学习方法去预测哪些key range会被访问,从而在他们访问之前提前将系统中对应的数据块预取到缓存中,避免了产生cache invalidation问题。

系统架构

我们将设计的系统方案命名为Leaper(Learned Prefetcher的缩写),它是一个可以集成到LSM架构存储引擎内的可插拔系统。主要由三个主要部分组成,如上图所示。下半部分是Learner模块,该模块负责训练不同时间尺度的预测模型,属于离线部分。上半部分是Collector模块用于产生特征化数据,以及Prefetcher模块与存储引擎的flush和compaction操作交互将合适的数据块填充到缓存中。这部分属于在线部分。架构图中的黑色箭头表示数据流,红色箭头表示控制流。接下来阐述每一块的作用:Learner会从查询日志中提取访问数据,然后将数据转换为训练分类模型的格式。为了减少开销,我们将连续的主键分组为键值范围(key range)。Leaper根据不同的workload选择合适的键值范围大小,以保证良好的模型和系统性能。之后,Learner模块会为Leaper训练多个模型,以预测不同时间尺度下键值范围的未来访问情况。我们使用机器学习中的树模型(GBDT)来进行分类预测以获得最佳的预测效果。Collector以多线程的方式收集在线访问数据。我们实现了优化的锁机制以减少收集过程的开销。此后,Collector将获得不同键值范围的访问模式并最终将这些访问模式转换成预测模型中可以使用的特征输入。Prefetcher首先使用Collector提供的特征输入和Learner提供的预测模型来预测键值范围的未来访问情况。根据预测结果,Prefetcher会找出所有参与合并操作的数据块中将要在未来被访问的块。这部分由交叠检查模块处理。最后,Prefetcher将要被访问的块加入缓存以及将不会被访问的块踢出缓存。

关键技术

  • 键值选取

为了获得分类模型的训练数据,我们需要知道数据块的访问信息。但是由于磁盘上数据块随着合并操作而不断变化,我们无法准确知道各个数据块的详细信息。因此,我们引入了键值范围,该范围由一系列连续的键组成,并且在数据库运行期间不会更改。键值范围主要有三个优点。第一,对减少开销很有帮助。第二,键值范围符合数据在底层结构的分布。第三,键值范围非常适合range query。具体的键值范围选择使用了以下算法,具体步骤及原因可以参考论文,这里不再赘述。

  • 预测模型

综合考虑准确性,效率和可解释性,我们使用梯度提升决策树(GBDT)作为分类模型。它是由许多弱预测模型(决策树)组成的组合模型。GBDT和相关实现(比如XGBoost和LightGBM)在分类预测任务中应用十分广泛。

在模型的特征选择上,除了使用了比较常见的读写特征以及时间戳特征之外,我们还使用了key range的前置key range访问特征来刻画在底层无法得到的业务和应用特征。举个简单的例子,我们在网购时经常会有组合购买的物品(乒乓球和乒乓球拍),这两个商品所对应的key就会有很大概率一起出现在数据库访问中,那么我们使用相似度算法将这两者联系起来,通过某一个商品的访问来预测另一个商品的访问。

  • 锁机制

在多线程存储引擎中,将统计信息采集到Collector中会导致写入冲突。为了防止这种情况,需要应用锁机制。为了能够最大程度得减少开销,我们主要设计了以下三种策略来优化设计。第一,使用双重验证锁和延迟初始化来初始化键值范围。延迟初始化避免了在第一次访问键值范围之前对其进行初始化,并且在执行延迟初始化时使用双重验证锁来减少锁开销。第二,在统计数据过程中使用原子操作来代替互斥锁。第三,使用采样来进一步减少统计开销。由于第一个策略保证了每一个键值范围的第一次访问必定会被采集到,因此采样对于统计信息的影响不会带入到模型预测中。下表展示了这三种优化策略的应用对于系统性能的影响。全局互斥锁本身会对系统性能产生巨大影响,如果未记录任何统计信息,则平均QPS约为每秒337703。当采用全局互斥锁时,QPS将下降40.61%。但是如果采用上述策略,QPS的下降将减少到3.66%。

  • 交叠检查

在Prefetcher中进行在线推断之后,我们需要确定应该从flush和compaction操作中预取哪些目标数据块。由于Key Range Selection算法生成的键值范围与目标块之间没有一一对应的关系,因此我们需要检查目标块是否包含热键值范围。我们提出了一个交叠检查的算法,以检查目标块是否将被预取。这个算法结合了二分搜索和归并排序的思想,无论我们在何时得到目标数据块的信息(操作过程中或者操作结束后),都能以更小的代价得到热的数据块。具体算法如下:

  • 回填优化

在compaction过程中,我们引入了两阶段回填来解决compaction过程中回填和剔除缓存数据块的矛盾:为了减少Prefetcher对block cache的影响,Prefetcher会从block cache中剔除旧数据块以节省内存。但是,如果在compaction操作结束之前需要访问那些被剔除的块(请求的记录是旧版本),则会导致新的cache miss。因此我们设计了两阶段回填来解决这个问题。在剔除阶段,预测compaction操作过程中的访问,并剔除不会被访问的块。在第二阶段,预测在compaction操作完成后的一段时间内的访问,回填未来会被访问的块。通过这样的方式既解决了缓存失效的问题,也没有引入新的cache miss。

实验验证

我们分别在天猫买家库订单表、钉钉以及sysbench生成的zipf分布的workload下比较了我们的方法和已有方法。实验结果表明,我们的方法相比于传统方法可以多消除70%以上的cache invalidation,同时能消除几乎所有的latency抖动。更多详细的实验比较结果请关注论文。

论文贡献

  1. 我们形式化定义了cache invalidation问题,并且识别出了在LSM-tree问题中产生这个问题的根本原因。同时我们提出了基于机器学习的高速缓存预取策略来解决这个问题。
  2. 我们在选择机器学习方案时,不仅考虑到模型预测的准确度,同时尽可能降低在离线训练和在线推断方面的开销,使得机器学习模型能够有效的应用在对性能要求较高的OLTP存储引擎中。
  3. 我们将我们的方法和已有方法在多种workload上进行了比较,实验结果表明我们的方法明显优于已有的其他方法。

知乎号、微信公众号“图谱学苑”每周发布最新知识图谱动态,专业知识图谱论文导读,欢迎关注投稿。

免责申明:本文全部内容均来源于网络开放信息整理,如有侵权,请联系删除

mysql8.0其他机器访问_论文导读|基于机器学习的高速缓存预取相关推荐

  1. mysql8.0其他机器访问_量子公司重大突破,量子机器学习实用化进程加速

    编辑:Yan  Ding   校对:Peiyong Wang 近日,著名的量子计算公司QC Ware宣布,其在量子机器学习(QML)方面取得多项重大突破,该突破将以更快的速度推动量子机器学习的发展. ...

  2. 关系查询处理 查询优化 论文_论文导读基于查询负载的分布式RDF图分割和分配...

    Adaptive Distributed RDF Graph Fragmentation and Allocation based on Query Workload PengPeng, Lei Zo ...

  3. retinanet50预训练权重_论文导读|基于注意力机制对齐增强预训练语言模型

    李彦增 这篇文章通过提出了一种注意力机制对齐的方法,为预训练语言模型在 fine-tuning阶段引入了多源分词信息外部知识,从而提升了预训练语言模型在各个子任务上的效果.本文收录于 2020 年 A ...

  4. 论文精读——基于机器学习的越南生活固体废弃物预测

    论文精读--基于机器学习的越南生活固体废弃物预测 Abstract 1. Introduction(partly) 2. ML - based models and applications for ...

  5. MySQL8.0允许外部访问

    1,登进MySQL之后, 2,输入以下语句,进入mysql库: use mysql 3,更新域属性,'%'表示允许外部访问: update user set host='%' where user = ...

  6. MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生

    原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生 背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication) ...

  7. MySQL8.0 物理克隆接口_实战 MySQL 8.0.17 Clone Plugin(转)

    背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication)功能,后者加入了克隆插件(Clone Plugin)功能.今天我们 ...

  8. stm32pid算法控制电机转速_论文推荐 | 基于全阶状态滑模观测器的混合永磁记忆电机磁链观测...

    点击"公众号首页-论文导读-微刊"或页面下端"阅读原文"可在线浏览文章全文,如果你喜欢本文,请分享到朋友圈.2020年第28卷第2期基础研究基本信息 作者: 姜 ...

  9. 手机信令数据怎么获得_论文推荐 | 基于手机信令数据的大规模通勤模式研究(2020-12-01)...

    交通攻城狮,2020-12-01,第 76 期 1. 推荐论文基本信息 论文信息 今天推荐的论文源自期刊<Journal of Transport Geography>2020 年 12 ...

最新文章

  1. SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
  2. sqlldr,将数据批量导入Oracle数据库
  3. 图像孔洞填充与小连通域的删除
  4. Springmvc中提交from之后不跳转不进控制器
  5. centos6.5 rpm安装mysql_CentOS6.5系统下RPM包安装MySQL5.6(转)
  6. (组合数学笔记)Pólya计数理论_Part.2_群及其性质
  7. MySQL之创建表以及数据库增删改操作
  8. 算法----迷宫问题
  9. 1031. 查验身份证(15)-PAT乙级真题
  10. Ubuntu的超宽屏支持2560*1080
  11. 支持macOS Big Sur 11系统 mac系统维护优化OnyX 3.9.1中文版
  12. 2017嵌入式软件行业现状及概述
  13. flask 导出excel
  14. html超链接图标图片,HTML-标签:图片 超链接
  15. 【团队管理系列】团队管理方面的量化数据
  16. 微信小程序的wx:for和vue的v-for
  17. 文本分词并统计出现次数最高的几个词Python
  18. JS——mouseover和mouseenter的区别
  19. cross_entropy中ignore——index
  20. 计算机用户名更改不了,分享简单几步解决win10电脑用户名改不了的问题

热门文章

  1. Git 使用篇一:初步使用GitHub,下载安装git,并上传项目
  2. java基础知识-对象和类
  3. 结对编程:黄金点小游戏
  4. PetShop 4.0 详解之四(PetShop之ASP.NET缓存)
  5. 转载:逻辑思维提升表达
  6. Python学习笔记:‘’AttributeError: NoneType object has no attribute‘’
  7. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解(即c++参数初始)
  8. Android中的音乐播放
  9. 重磅 | 吴恩达新书《Machine Learning Yearning》1-52 最新章节分享
  10. linux用户和群组的作用,linux中的用户、群组和权限