我们正在将数据库从Sybase转换为Oracle,并且遇到了性能问题。在Sybase中,我们有一个TEXT字段,并在Oracle中用CLOB替换了它。
这就是我们访问Java代码中数据的方式:
while(rs.next()) {
String clobValue = rs.getString(1); // This takes 176ms in Oracle!
.
.
}
该数据库遍及全国,但Sybase及其对TEXT数据的检索仍然没有任何性能问题。
我们可以采取一些措施来提高性能吗?
最佳答案
其他一些选择:
LOB列是在线存储(在数据行中)还是线外存储(在单独的位置)?如果LOB列较小(小于4k),则可以使用ENABLE STORAGE IN ROW
子句告诉Oracle在可能的情况下在线存储数据。
如果您的LOB较大且经常使用,它们是否存储在缓冲区高速缓存中? 10g中的默认值是LOB为NOCACHE
,这意味着针对它们的每个I/O操作都涉及到对数据库的直接读取,这是一个同步磁盘事件,可能很慢。数据库跟踪将显示对direct path read / direct path write
事件的大量等待。
Oracle Application Developer's Guide-Large Objects的This chapter将是有值(value)的阅读。
关于performance - Sybase TEXT与Oracle CLOB的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6751000/