Sybase TEXT与Oracle CLOB性能

时间:2011-07-19 16:58:28

标签: performance oracle jdbc sybase clob

我们正在将数据库从Sybase转换为Oracle,我们遇到了性能问题。在Sybase中,我们有一个TEXT字段,并用Oracle中的CLOB替换它。

这是我们在java代码中访问数据的方式:

while(rs.next()) {
  String clobValue = rs.getString(1);  // This takes 176ms in Oracle!
  .
  .
}

数据库遍布全国各地,但我们在Sybase及其检索TEXT数据方面没有任何性能问题。

我们可以做些什么来提高这种性能吗?

3 个答案:

答案 0 :(得分:4)

默认情况下,LOB不会与表数据一起被提取,并且需要额外往返数据库才能在getString中获取它们。

如果您使用的是Oracle的.NET提供程序,则可以将数据读取器设置中的InitialLOBFetchSize设置为足够大的值,以便在内存中容纳大对象,以便可以全部获取它们。与其他数据。

答案 1 :(得分:3)

其他一些选择:

LOB列是在线存储(在数据行中)还是在线外(在单独的位置)?如果LOB列往往很小(大小不超过4k),则可以使用ENABLE STORAGE IN ROW子句告诉Oracle尽可能在线存储数据。

如果您的LOB较大且经常使用,它们是否存储在缓冲区缓存中? 10g中的默认值是LOB是NOCACHE,这意味着针对它们的每个i / o操作都涉及对数据库的直接读取,这是一个同步磁盘事件,这可能很慢。数据库跟踪将显示direct path read / direct path write事件的重要等待。

Oracle应用程序开发人员指南的

This chapter - 大对象将是有价值的阅读。

答案 2 :(得分:0)

我们决定采取不同的方法,让我们忽略clob的表现。

我们当前的代码(我没有写它!)查询数据库中的一个表并检索表中的所有信息,包括clobs,即使不是必须全部检索它们。相反,我们创建了另一个字段,其中包含varchar中的前4个字符,而是查询。然后,当我们需要完整的clob时,我们会逐个查询它,而不是所有记录的所有clob。