了解Oracle的一些内部算法是十多年前DBA最为热门的话题,当时外面能看到的资料不多,所以大多数情况下大家都是靠猜测。现在无论开源数据库还是国产数据库,和Oracle相比其在核心算法上还有不小的差距。了解并学习Oracle的一些设计思想和理念对提高国产数据库的水平有着十分重要的意义。前些年和一个国产数据库厂商交流的时候,我希望他们能够提供类似Oracle等待事件接口的功能,以便于我们能够分析数据库存在的问题。当时他们的研发负责人也十分理解我们的需求,不过从他们目前的情况来看,如果要统计每个等待事件的时间,则会严重的影响数据库的执行效率,对SQL执行性能有很大的负面影响。同事他问我,Oracle是如何做到这一点的。于是我把我了解到的Oracle的实现方式和他做了一个交流,他听后很受启发,觉得他可以在他们的数据库产品中试试,这种方法确实比他们现在用的方法的开销要小很多。
想了解oracle具体算法是有困难的,需要进行十分复杂的DEBUG工作,老白也没这个能力做这个事情。不过通过Oracle的一些内部数据结构来了解Oracle的一些算法思想是一种相对简单的方法。今天我们就用kcbwds的结构来分析dbwr中的一些算法方面的改进。
X$KCBWDS,按照Oracle的内部命名规则,可以解释为: [K]ernal [C]ache [B]uffer [W]orki
06-05
2468
