YashanDB的文档里提供了一份《YashanDB 概念手册》,这应该是致敬Oracle的一本手册。虽然说目前这本手册的质量不高,不过有总比没有好。昨天我利用空暇翻阅了一下这本手册,期间也对某些地方写得不够详尽,向崖山的朋友们吐槽了一番。很多朋友说YashanDB和Oracle很像,有些地方足以乱真。现在和Oracle的操作、语法很像的数据库也不少了,不过大多是形似,神还是完全不同的。如果能神似,那才是更好的。
如果去掉右下角的Slice文件(切片文件,列式存储使用)和数据桶,那么上面的图就可以当成Oracle的逻辑存储结构和物理存储结构了。在这方面YashanDB是完全把Oracle的概念拿来了。Slice文件是YashanDB的列存的存储格式,我们暂时先不去考虑,仅仅从行存去分析其存储引擎和块结构的特点。
在缓冲区刷脏方面,YashanDB的概念与Oracle也类似,在CHECKPOINT方面,通过DIRTY QUEUE按照SCN去组织脏块链,用于DBWR写入。从这张示意图中,没有看到类似Oracle的KCBDWS的 结构,多个DBWR分区工作。不过从DBWR_COUNT参数上看,YashanDB是采用多线程刷脏数据的,最多可以设置16个DBWR线程,因此其DB CACHE应该也有类似于Oracle KCBDWS的多分区设计。只是目前YashanDB的CKPT CHAINS还比较简单,这种Dirty Queue设计在DB CACHE比较大的时候,可能会TRUNCATE、DROP大表的时候出现性能问题,另外物理备份某个文件的时候,也会遇到类似性能问题。这个问题在早期的Oracle数据库版本里也是十分常见的。Oracle 8、9、10三个版本一直在CKPT Chains上优化逐渐解决了这个问题。
根据YashanDB的技术人员透露,YashanDB也会模仿Oracle那样在Checkpoint机制中引入Object Checkpoint Queue,从而避免TRUNCATE等操作引发的DB CACHE全量搜索操作引发的性能问题。这方面的问题在PG系的数据库中是普遍存在的。
上面这张图所示的YashanDB 堆表的逻辑结构与Oracle也极为相似,YashanDB也采用类似Oracle的Local space management的方式管理。在段头设计了Extent map,根据MAP中标志的填充比例来确认某个数据块是否可以用来插入新的数据。
YashanDB的Block结构与Oracle也十分相似,不过还是做了调整。Oracle的BLOCK是BLOCK HEAD|ITL|ROW DIR|FREE SPACE|ROW DATA|BLOCK TAIL,YashanDB的布局有点像InnoDB,Block Head后面就是Row Data,Free Space是在Row Dir和Row Data之间,Row Dir后面是XSLOT,也就是Oracle的ITL,其长度与Oracle也一模一样,也是24字节。YashanDB的UNDO也与Oracle十分类似,也是通过XSLOT指向UNDO SEGMENT里的UNDO Record。
在YashanDB中,如果某行数据被修改了,增加了行长度,那么就必须利用Free Space在数据块内重组Block,因此YashanDB也引入了类似Oracle的PCTFREE,而且默认值也是10%。在YashanDB中,对于VACHAR比较多的表,建表时也应该考虑加大PCTFREE,避免出现行迁移和行链。
在YashanDB中,也有一个表的参数INITRANS,与Oracle的作用也是类似的,就是BLOCK格式化时候XSLOT的数量,在YashanDB中无论是表还是索引,INITRANS的默认值都是2,这一点与Oracle略有差别,Oracle的表和索引的 INITRANS默认值是不同的,当BLOCK中还有剩余空间时候,XSLOT会自动扩展,这一点YashanDB与Oracle也是类似的。对于修改十分频繁,经常会出现一个BLOCK中多个数据块中出现多个并发事务修改,那么这样的表建表的时候INITRANS设置大一些,或者PCTFREE设置高一点,这种优化手段与Oracle也是类似的。
从YashanDB的存储结构,特别是块结构、SEGMENT结构等方面来看,YashanDB在针对高并发修改和访问,避免热块冲突,避免行迁移等方面的优化手段十分类似。在数据库巡检中,针对数据表碎片、索引碎片、行迁移等方面的检查也是是类似的。不过YashanDB的DBA_TABLES表里目前还没有关于行链的统计信息,不知道是不是在其他字典里我们能够找到这些数据,否则我们就无法及时掌握这个十分重要的与表访问性能有关的数据。
理解数据库的内部原理是有助于更好地使用某个数据库的 ,对于国产数据库也是一样。通过对YashanDB内部原理的简单解读,一个ORACLE DBA就轻松掌握了YashanDB的一些优化方面的技巧。
评论





