问题:
Oracle同一个表(含有clob字段),当clob字段的内容小于约10K(看作阀值),查询正常返回。但当某行记录的clob大于该阀值时,查询没有返回,在等待,通过tcpdump抓包发下以下现象:小于阀值正常查询:大于阀值阻塞现象:
从抓包分析,正常查询是有TCP结束(FIN),但异常查询再接收了某个包后就发生阻塞,又不关闭连接。排除1:一摸一样的语句在另一个局域网环境是可以查询的,无论clob多大,那说明数据库是没有问题的。
排除2:根据排除1可以看出,应用是没有问题的,因为在其他局域网上的服务器是可以的。
排除3:我把异常语句修改后:把那个clob字段拆开两部分返回再拼接成原来字段是可以查询的,那也可以证明不会因为整个数据包太大而导致网络传送阻塞。小弟知识浅薄,无从下手,请问各位大牛还有什么查明问题真相的思路?服务器TCP参数设置?网络问题?数据库能监控语句的执行和信息返回吗?

解决方案 »

  1.   

    在数据库服务器上用你认为阻塞的sql验证,看是否正常,再一步步验证其他环节
    另外检查一下你的代码,看是否在操作clob时某个变量有大小限制
      

  2.   

    在数据库上运行该语句是没有问题,另一个应用(代码一样只是不同局域网)是可以正常查询的。应用代码是Java写的,查询返回的变量是String类型,没有什么限制,因为数据只有10来K,也应该不会超过线程栈的大小(JVM默认是1M)。
    应用问题我已经排除过,网络问题也检查过,数据库语句也执行过,到目前还真没什么思路了。