这篇文章是08年SIGMOD的文章。
OLTP系统各组件开销
很多OLTP数据库的架构扔延续了70年代面向当时的硬件的设计,但30年来,现代CPU、内存、网络等等已经有了很大的变化。这篇论文分析了一个OLTP数据库的各个组件的开销。
!http://loopjump.com/wp-content/uploads/2021/08/image-20210822160910562-300x221.png
OLTP系统设计趋势
Cluster Computing
从单机多线程的架构,在80年代有了shared disk的架构,最近20年又有shared nothing的架构。再以后的数据库必须要考虑面向集群。
Memory Resident Databases
内存越来越便宜,面向全内存的系统可能会更广泛应用。
单线程执行
磁盘IO需要多线程来overlap:全内存数据库执行存储过程的场景,基本上就是内存索引结构的读写,实际上不需要多线程overlap磁盘等待。
现代CPU是多核的:但是数据库可以用shared nothing的架构充分利用CPU的能力。
网络成为新的瓶颈:分布式事务的延迟确实不行,但很多场景实际上也很少有跨机事务。
高可用vs日志
日志是实现高可用standby节点的方法,但高可用不一定非要REDO日志,甚至Recovery也可以通过复制其他副本来实现,这样的话,Recovery相关的逻辑以及为支持Recovery儿带来的开销都是可以省掉的。
事务变体
业务场景可能并不需要完整严格的事务,比如允许最终一致性,隔离级别使用SI,或者如果事务是先完成所有读再执行所有写,那么UNDO也不是必须的。
OLTP优化
!http://loopjump.com/wp-content/uploads/2021/08/image-20210822164256315-300x230.png
扫描二维码,分享此文章