第一,通过将内存中的数据移出,转储操作会降低内存中的空间占用,释放出可供新增数据或缓存使用的内存空间。反之,如果转储操作无法被及时地执行,当有新数据持续写入时,内存空间占用会不断上升,直至系统无法存储更多的新数据,带来数据库不可用的风险。
第二,转储操作本身的开销与查询的开销之间存在显著的权衡关系。保证磁盘上的数据始终完全按主键值排序,且同一个层次内各个数据块之间没有主键范围的交叠,可确保主键值在任意范围内的数据记录最多只存在于一个数据块中,这样可以使 得该层次上的点查询操作只需至多读取一个数据块,并将范围查询需要读取的数据块数量减为最少。但是,为了实现并保持这种全排序,每一个转储任务都要将从内存移出的固化内存表中的数据与磁盘上主键范围存在交叠的数据块进行合并,合并操作会消耗很多的CPU 与I/O 资源,且反复合并会带来I/O 写放大导致加剧I/O 消耗。这种现象会造成转储开销大、耗时长,并占用更多的系统资源,影响数据库性能的稳定性。如果弱化对磁盘上数据全排序的要求,转储开销下降,但查询开销就会提高。XEngine 引擎因此对转储操作的开销与查询开销之间的权衡进行了优化。
以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。