数据共享问题里的麻烦,尤其是在多实例的 Oracle 环境下,最常见的就是你查的时候别人正好也在改,结果卡得一塌糊涂。Oracle 的Cache Fusion就蛮聪明,能让不同实例之间直接在内存里传数据块,减少磁盘 IO,速度快不少。
面向查询的读共享,其实就是多个实例读同一个数据块不会互相打架。查询一来,如果那块数据已经在别人的缓存里,Cache Fusion 直接“搬”过来就行,响应也快,数据也一致。
写共享麻烦点——你要改的数据被别人读了,或者别人也要改,怎么办?Oracle 会得比较细,确保你拿到的是最新且可更新的数据块,再做修改。背后同步机制蛮复杂,但对开发来说,能保证一致性就够了。
如果你对事务一致性感兴趣,下面几个资源还挺值得一看,像是 事务的四大特性 这篇,讲得就比较清楚,读起来没那么晦涩。
建议你在使用 Oracle 做数据仓库的时候,尽量熟悉下块传输机制,是在 RAC(Real Application Clusters)架构下,Cache Fusion 效率高、但调优也关键。
如果你经常遇到一致性相关的问题,可以翻下这些文章:
如果你是做分布式数据的,或者正好在搞 Oracle RAC,那这个思路你可以好好研究下,真的能帮你省不少排查 bug 的时间。