2023年1月19日
现代数据库由I/O瓶颈转向了CPU瓶颈,利用多核能力加速全表扫描,但是向量化的能力没能充分发挥。使用向量化包括:内嵌汇编、硬件厂商提供的跨平台库函数、编译器指示符、编译器自动优化,每种都是可用性和可控性之间的权衡。论文中引入了两项优化:使用SIMD方式在寄存器中解压 轻量压缩数据(使用concatenate、shift、shuffle、mark等指令完成);使用SIMD完成等值和范围查找(使用掩码指令,将4个元素加载到寄存器中,再通过min、max比较范围,最后生成索引数组向量位),通过测试结果都有大幅度提升,并且优化实现可以适用各种数据库
阅读全文
2023年1月13日
Oracle12推出了混合行/列的存储格式,磁盘(buffer pool)中按列存储,内存中按列存储加速OLAP场景;而表达式求值在很多场景下是黑盒,不易监控、也占用资源,Oracle捕获了频繁使用的表达式,将表达式物化到内存中,然后在查询计划中,根据代价来改变查询计划,将原始的查询计划的子树,替换为内存中的物化表达式,在OLAP场景中大幅度提升性能,在混合OLTP场景中也非常有效
阅读全文
2023年1月7日
列存数据库会通过物化的方式来重建tuple,包括早期物化EM、延迟物化LM,延迟物化的性能更好,但实现更难,当出现join溢出时会出现,此时会退回到早期物化;论文在早期物化基础上增加了:边信息传递SIP技术,并给出了实现细节,如何创建SIP,如何做push down;使用EM+SIP技术,比原始的EM性能大幅度提升,并且在很多场景下比延迟物化LM性能更好
阅读全文
2023年1月5日
2005年的一篇论文,通过分析MySQL、MonetDB发现这两种没有达到硬件上的预期效果,MySQL是因为经典的火山模型导致编译器没法利用循环流水线,出现大量CPU等待;而MonetDB避免了上述情况但使用了物化,又导致大量的内存带宽拷贝;这篇论文结合了这两者的特点,选择了向量化的执行方式,并配合了合适的cache size,使得执行效率大幅度提升
阅读全文
2023年1月3日
CMU Query Execution & Processing课程的一篇论文,现代分析系统中scan越来越重要,但二级索引依然有用,通过对比硬件参数、数据布局、压缩、并发等综合情况考虑之下,来选择:scan执行 或者index执行;通过性能评估发现,调节scan或者index并不是一个固定的值,而是根据不同的参数以及硬件情况,会动态变化的
阅读全文
2023年1月2日
Databricks 2022年在SIGMOD上发表的论文(最佳工业论文奖),由于I/O方面有很多优化措施,而JVM的对向量化支持较差,之后用C++实现了向量化的执行引擎Photon,来实现进一步的性能提升;首先是从最底层scan开始替换,因为中间替换的代价较高,之后不断往上,直到某个算子Photon不能适配,则由列存转换为Spark的行存,退回到Spark执行,总体看性能可以提升好几倍
阅读全文
2023年1月1日
MVCC的基本概念,读已提交、可重复读隔离级别下的ReadView,MVCC的purage;锁的基本类型,X/S/IX/IS锁;record lock、gap lock、next-key lock、insert intention lock、隐式锁;各种隔离级别下的加锁过程,SHOW ENGINE INNODB STATUS 分析加锁过程,死锁的分析
阅读全文
2022年12月22日
redo log的格式(逻辑+物理混合格式)、Mini-Transaction、redo log写入过程,写入page cache,log_sys结构、redo log的文件格式,如何刷新到磁盘上的,checkpoint过程,恢复过程; undo log的格式(逻辑格式)、undo log的组织、回滚段、系统表空间的5号page,多个回滚段、rollback的过程;以及源码中的redo log定义、undo log定义
阅读全文
2022年12月19日
Buffer Pool、Doublewrite Buffer、Redo相关的Log Buffer,自适应Hash索引、change buffer、以及InnoDB相关的参数汇总
阅读全文
2022年12月15日
一些经典的RBO优化,包括子查询优化;一些CBO优化,统计信息收集,CBO的统计计算方式,常数成本调节;JOIN优化,并详细介绍了EXPLAIN的各个字段含义,其中select_type、type、Extra这几个字段比较重要,另外还有JSON个事的执行计划,optimizer trace
阅读全文