作家
登录

透过新硬件环境下的存储技术,看未来数据库系统崛起

作者: 来源: 2017-12-07 11:04:49 阅读 我要评论

这个研究是在2010年卡内基梅隆大年夜学的数据库研究小组,对几个开源数据库的机能测试结不雅。可以看到,在多核处理器下这些数据库体系的机能、扩大性都不克不及够令人知足。这篇论文拉开了数据库体系多核优化的序幕,特别是开源软件,例如MySQL、PG在该时代就开端看重多菏攀扩大性的问题,他们意识到本来在多核情况下,体系会有如斯表示。

时光都去哪儿了呢?

那么,数据库体系的事务履行时光都消费到哪去了?下面是麻省理工大年夜学的研究结论——数据库体系大年夜部分的时光都消费在缓存池治理、日记子体系上,只有12%阁下的时光是消费在真正有效的工作上。

这些模块傍边存在着大年夜量的临界区,这个临界区设计得相当粗拙,下面我们可经由过程分析一个代码片段来进行解析。在体系的设计上,经常是一把大年夜锁,不假思考地加上去保护临界区,几百行的代码。正如刚才看到的,在这种情况下,当体系并发度起来时,数据库体系的机能是相当差的。

现代处理器下的数据库技巧

James Gray大年夜家是否听过呢?在如今数据库体系里,跟事务相干的技巧根本都是James Gray提出来的。但可惜的是,在2007年,他驾着一艘帆船出海,然后消掉了。美国出动了海军陆战队都没有找到他。作为一个神怪杰物,他凭借着对数据库事务的凸起供献获得图灵奖。

为了克服刚才所谓的内存墙技巧,James Gray曾说过这么一句话:RAM Locality Is King,就是说数据和法度榜样行动的局部性才是克服CPU和内存的速度不匹配的最终兵器。

RAM-Locality设计原则

数据库琅绫擎重要采取以下几种技巧优化机能,一种是列存储技巧。列存储技巧,重要用在OLAP,像MySQL、PG等OLTP型数据库都是用行存储技巧。为什么要用列存储技巧呢?是因为进行数据分析的时刻,经常会出现宽表或有几百个字段的表,但平日只须要拜访表中的某一些字段,比如要拜访发卖字段,对发卖字段进行累加,做一个集合操作。采取列存储,可以更好地优化高速缓存的应用率,削减cache miss,克服内存墙问题。

别的就是设计高速缓存友爱的数据构造或算法。像如今的数据库采取一次一元组的萌芽处理方法对法度榜样局部性很不友爱。

什么叫一次一元组呢?数据库体系的萌芽语句,都是翻译成操作树。在树的节点之间,操作符经由过程get_next函数驱动子节点获取一条元组,递归调用下去,叶子节点将数据返回。函数的频繁调用会产生严重的cache miss问题,所以如今新型的OLAP体系都是采取向量化萌芽履行引擎,上层操作符不再是一条一条数据地处理了,而是一批一批数据处理,削减函数调用的开销和高低文的切换以最大年夜化数据和法度榜样指令的局部性。此外,hash join也针对cache大年夜小将hash table进行划分以加强数据与指令的数据性削减cache miss。

 一个例子

他们针对NVRAM提出一个新算法称之为write-behind Logging,就是事务提交的时刻,直接把脏页写入NVRAM(因为NVRAM的随机IO也是相当快的)。脏页刷盘今后,再去写日记。

这是针对Cache友爱而设计算法的例子。在PG 9.5之前,体系断定事务活泼性或获取体系快照时,要用到事务的肇端时光、事务ID等。这些字段都放在PGPROC这个构造体里,这个构造体有25个成员,但做可见性断定时,只须要用到几个成员就够了。是以采取这种设计体系会把其它无关字段读入,污染其它cache line,造成严重的cache miss以及Cache浪费问题。所今后面他们就把用于可见性断定等经常拜访的字段放在另一个构造体琅绫擎叫做PGXACT。打了这个补丁之后,在大年夜并发下这个机能收益是相当客不雅的,机能数据如图中右上红色数据所示。

是以,针对Memory  Wall这个问题,设计cache友爱的数据构造与算法是一个很奏效的办法。

避免热点与简化临界区

针对多核的问题,我们还要避免热点的问题,简化临界区。就像我们经常看到的,并发一大年夜,体系机能就掉落了下来。

这是微软的内存数据库Hekaton的一个实验结不雅。朝长进步了事务在提交时的一个时光戳。这个全局的原子操作都邑导致这个机能的问题。但针对MySQL、PG这两种数据库,机能问题还远远轮不到像类似于这种原子操作来激发。

这就是我刚才所提到的问题,我们的磁盘数据库的设计原则是优化磁盘IO。事务在提交时,不须要刷脏,以避免随机IO。我们有一个专门的术语,叫做No force,也就是说事务提交时,不消去刷脏页,但体系会把日记先刷下去。它这种集中式的设计,很轻易导致机能的问题。针对更新密集型的工作负载,这个模块的机能问题加倍凸起。

传统的先写日记的算法(Write-ahead Logging),PG也好、MySQL也好,一般分为三个步调,起首获取一把大年夜锁,保护shared  Log  Buffer的┞封个数据构造;然后把日记记录拷贝到响应的日记缓冲区;最后释放这把锁。这是最传统的做法。


  推荐阅读

  CIO半月刊第二十五期|企业在网络安全上“裸奔”的5大问题,7招帮你搞定!

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散【编辑推荐】 CIO半月刊第二十期|成都农商行孟小疆:银行灾备中间扶植应看重几个关键环节 CIO半月刊第二十一期|【必看】专家眼>>>详细阅读


本文标题:透过新硬件环境下的存储技术,看未来数据库系统崛起

地址:http://www.17bianji.com/lsqh/39547.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)