Oracle 数据库块大小

Jac*_*ack 2 oracle oracle-10g

我们的生产数据库之一具有相当奇特的 16KB 块大小。这个数据库是大约 2 年前创建的,当时数据库的大小只有大约 1TB。
然而,在过去 2 年中,db 大小已增长到大约 5TB。

工作负载是 OLTP(事务)和 OLAP(报告)的混合。

这个数据库块大小导致我们的数据库缓冲池不断被填满(95%~100% 已满)。
数据库在原始设备上使用 ASM。

16KB db 块大小是否次优?
这么大的块大小是否会对我们的存储子系统性能产生不利影响?
如果是这样,可以做些什么来纠正这种情况?

这里值得注意的是,我们实际上为报告和我们的应用程序(业务逻辑)执行了大量的全表扫描。
OLTP 性质源于这样一个事实,即我们的应用程序还具有事务性(金融事务)模块。

Jac*_*las 5

这个数据库块大小导致我们的数据库缓冲池不断被填满(95%~100% 已满)

除非您最近重新启动了服务器,否则您的数据库缓冲池应该始终已满 - Oracle 不会从缓存中清除块,除非它必须为其他块腾出空间。

这本身并不表示改变块大小会改善任何事情。您需要了解更多有关缓存未命中的信息。

如果您的工作负载的 OLTP 端可以查询 5TB 数据的任何部分,那么稍微优化缓冲池可能不会有太大区别(但可能会不必要地减慢您可能已优化的大型顺序扫描)

另一方面,如果有一小部分数据定期命中,并且可以通过减小块大小来显着减少 OLTP 工作负载的缓存未命中(这取决于读取是否真的分散在块中),那么也许好处将是显着的。

最后你将不得不测试并找出:)