远程访问数据库查询数据量一大就Hang
最近刚为客户升级了一套Oracle Database,一切进展顺利,眼看就要顺利验收时,发现有部分客户端软件连接新版本数据库时会Hang,问题非常诡异。
系统环境如下
升级前的环境
OS:Windows Server 2003
DB:Windows Database Enterprise Edition 9.2.0.5
升级后环境
OS:Windows Server 2008 R2 64bit
DB:Oracle Database Enterprise Edition 11.2.0.4 64bit
客户端环境
OS:Windows XP
DB Client:ODAC 11.2 Release 3 and Oracle Developer Tools for Visual Studio (11.2.0.2.1)
问题描述
通过DataPump进行异机升级,升级后的主机和升级前的主机位于同一网段内。升级后发现部分.NET客户端程序访问11.2.0.4版本的数据库时,可以正常登录,
但访问的数量大时就死掉了。升级前所有的.NET客户端应用程序访问9.2.0.5的数据库可以正常工作
The below queries works
-----------------------------------------
select * from all_objects where rownum<60;--Response within 296 Millisecond
select * from all_objects where rownum<70;--Response within 312 Millisecond
select * from all_objects where rownum<80;--Response within 312 Millisecond
select * from all_objects where rownum<90;--Response within 312 Millisecond
select * from all_objects where rownum<100;--Response within 312 Millisecond
select * from all_objects where rownum<110;--Response within 312 Millisecond
select * from all_objects where rownum<120;--Response within 312 Millisecond
select * from all_objects where rownum<130;--Response within 328 Millisecond
The following queries hang
-----------------------------------------------
select * from all_objects where rownum<140;--Hang
而在客户端环境下通过SQL*PLUS访问11.2.0.4数据库,返回大数据量没有问题,在客户端环境下通过.NET程序
访问原来的9.2.0.5数据库也可以返回大数据量。 问题非常奇怪。
如果是新版本数据库的问题,为什么通过SQL*PLUS可以,为什么不是所有的.NET程序都有问题?
如果是.NET程序问题,为什么不是所有的.NET程序都有问题?
如果是网络/防火墙的问题,为什么连接同网段的9i库是可以的?
问题分析
问题非常诡异,通过10046服务器端跟踪,也没有什么有价值的信息,因为客户端采用ODAC驱动,无法进行相关客户端跟踪。
MOS要了adplus hang dump也没分析出原因,只知道在read()时Hang主了。
问题很有规律,到达一定量的数据,会直接Hang,看起来像服务器无法传递数据到客户端。Oracle能设置网络传递数据的参数不多。
首先想到了SDU,根据官方文档描述,服务器端和客户端都设置,取最小的那个。因为改动程序较为麻烦,就直接设置了服务器端。
无论设置512还是65535都没有用。
在试试防火墙的问题,找一台中间机器通过Oracle Connection Manager (CMAN)进行中转下,还是不行,吐血!(注:CMAN在类似有防火墙的地方还是很有用的,安装时候
注意要选择监听一起安装,不然无法安装成功,最好SQL*PLU也安装,这样方便测试)。
能试的都试了,还是不能解决访问,MOS也没有什么说法,郁闷!死马当活马医,预备以下测试方案:
1、客户端设置SDU
2、客户端设置OPD.NET FetchSize等相关参数
3、测试防火墙的TimeOut时间
客户端连接字符串中设置SDU=512,测试OK!OPD.NET/防火墙的问题就不用测试了。
进一步测试发现,SDU设置为4096还是OK的,设置5120就会Hang,不管它什么原因了,总算解决了。
远程访问数据库查询数据量一大就Hang的更多相关文章
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- mongodb基础系列——数据库查询数据返回前台JSP(二)
上篇博客论述了,数据库查询数据返回前台JSP.博客中主要使用Ajax调用来显示JSON串,来获取其中某一个字段,赋给界面中的某一个控件. 那这篇博客中,我们讲解,把后台List传递JSP展示. Lis ...
- sql查询未走索引问题分析之查询数据量过大
前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...
- C#连接Oracle数据库查询数据
C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...
- spring Batch实现数据库大数据量读写
spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理 1. data-source-context.xml <?xml v ...
- [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...
- mongodb基础系列——数据库查询数据返回前台JSP(一)
经过一段时间停顿,终于提笔来重新整理mongodb基础系列博客了. 同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个demo,来演示,mongodb数据库查询的数据在JSP显示问题. 做了一个 ...
- sql 数据库 庞大数据量 需要分表
17:04:05问下 在什么情况下 审核分区啊 ~..大熊..o○ 17:06:53这个要看应用~..大熊..o○ 17:07:37比如数据量很大,查询多是按照时间段查询,就可以用时间段来做分区~.. ...
- python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...
随机推荐
- WPS页面设置
以前使用WPS的时候遇到一些问题: 比如我输入一个英文的时候它总是自动的给我首字母大写,但是某些情况下我不想这样: 从VS中复制代码的时候不希望他吧那些颜色复制下来: 还有我输入1回车后它自动给我输入 ...
- CSS学习笔记——CSS中定位的浮动float
昨天在解决了盒模型的问题之后又出现了新的知识模糊点:浮动和绝对定位?今天先解决浮动相关的问题,首先列举出想要解决的问题: 1.浮动到底是怎么样的? 2.浮动对元素的影响有什么? 3.浮动主要用来干什么 ...
- EF查询数据库框架的搭建
一个简单的EF查询框架除了运行项目外,大概需要5个类库项目,当然这个不是一定要这样做,这可以根据自己的需要设置有多少个项目.这里介绍的方法步骤只适合EF零基础的人看看就是了. 在开始之前,先建立一个运 ...
- SQL-LINQ-Lambda 语法对照
SQL LINQ Lambda SELECT *FROM Employees from e in Employees select e Employees .Select (e => e) ...
- NSDictionary初始化,使用@{}方法,插入nil时会报空指针异常
由于今天在NSDictionary初始化的时候出现Crash异常,故记录一下,避免下次再犯. 在Objective-C中,NSDictionary初始化的方法有很多种 方法1: [NSDictiona ...
- C#之回到了最初的起点----解决方案、项目、程序集、命名空间
C#之回到了最初的起点----解决方案.项目.程序集.命名空间 ——Percy 初学者很容易把这些概念搞混淆.先说说项目(Project),通俗的说,一个项目可以就是你开发的一个软件.在.Net下,一 ...
- SQL子句执行顺序和Join的一点总结
SQL子句执行顺序和Join的一点总结 FROM ON JOIN WHERE GROUP BY WITH CUBE or WITH ROLLUP HAVING SELECT DISTINCT ORDE ...
- git-svn 的使用
从 SVN 克隆代码 git svn clone https://192.168.1.3/svn/project-name git-svn 初始化 git svn init (svn remote ...
- linux 内核开发基础
开发特点 不需要第三方库支持 使用GNU C 没有内存保护机制 杜绝浮点数 栈区固定 必须关注并发及同步 注意可移植性
- 模拟Spring依赖注入
通过读取xml文件,利用反射动态加载类和方法,其实就是spring的注入机制模拟,可以清晰的看出整个运行流程 1.配置文件 applicationContext.xml <beans> & ...