这段时间遇到一个问题就是ReportService 中采用了远程连接的报表偶尔会断开连接,导致报表导出异常,查阅了很多资料,几天来就是断断续续的终于解决了这个问题,下面把一些解决的点一一展示出来,便于大家将来遇到同样问题无从下手。

首先是报错,接下来我马上去看日志,很多人不知道文件的位置,一般默认就是这个路径(Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\LogFiles)。

主要的错误如下:

1. System.Data.SqlClient.SqlException: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。

2. 偶尔还会连接池已满等错误。

综合一下,问题是时而有,大多数时候没有,那么我将问题集中到两个地方一个是数据量过大导致连接超时,另一个是网络、参数等配置问题。

过滤情况:

1.采用了远程数据库,不是共享数据源(SharePoint),因此排除了更新数据后对数据源的同步问题。(如果是则需要确保每次看之前数据源得到更新)

2.域账户权限问题,虽然是域内访问,当时权限没有问题,因为大多数时候是可以访问的。(否则需要添加访问权限)

3. 远程服务器环境,也没有问题,数据库允许远程连接,且硬盘环境没有问题。(否则会显示low disk condition within the database

接下来是我经过综合分析修改的几个地方:

1.配置设置是在 RSReportServer.config 文件中指定的参数。

a.计划内和计划外回收操作,影响应用程序池的回收。这个在C#部分将来可以详细讨论

<RecycleTime>720</RecycleTime>

<MaxAppDomainUnloadTime>30</MaxAppDomainUnloadTime>这两个值默认即可。

b.<Add Key="DatabaseQueryTimeout" Value=""/> 查询超时时间尽量设置大一些,当然在一些环境下不能这么做比如频繁查询的,数据量较小的时候。对于我的报表系统而言,用的比较少且很多大的报表所以设定为30分钟。

2.修改web.config中的参数

httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。
     executionTimeout:表示允许执行请求的最大时间限制,单位为秒
     maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。

类似于C#中CommandTimeout 这个参数就是我们的执行时间超时值,如果太小就会引发执行失败。

3.接下来就是对RS 的参数修改

a.设置站点设置-》常规

其中在RSDB中也可以设置这个值,参数为默认为600or1800。直接选择不设置。

b.对于数据集的参数设置

首先在开发的时候就可以设置比如timeout时间。一般默认为0.然后这里我做了如下修改

点击出现问题的报表右键,然后选择管理

注意这个地方是关键,对于这种共享数据源的数据集也要设置,选择不对报表时间设置超时,或者指定超时时间。默认值我推测可能是15or30。这样在wait时极有可能造成超时。

当然以上只是我的最后得出的推论,还需要注意一下几点:

1.这期间修改了很多地方比如连接参数修改过connection timeout 参数,maxpool等

2.有一些地方的配置也需要注意,比如远程连接中尽量采用IP地址作为连接对象,尽量不要使用服务器缩写名称,这样在DNS匹配的时候经常会影响,尤其是涉及到服务器迁移的时候会出问题。其次会影响响应速度。有些时候设置需要清洗DNS的匹配。

3.服务器端的防火墙配置,添加出站入站规则,一般默认端口1433,否则需要制定规则。

4.RS报表或者其他的连接方式

对于.net之类的微软程序尽量选择SQLServer 的数据源,这样速度更快尤其是SSRS已经SSIS,如果非微软数据源,可采用oledb等,但是注意升级数据库,使用最新的驱动程序。

总结

由于这个偶尔断开的连接问题,让我断断续续地看了好多资料但是真正解决起来才发现小的知识点很多,这里也不过多展开了。报表这块由于太占资源必须经常性的检查优化。这期间监测网络是否畅通,数据库环境是否出现问题等都是要做好自动化监控的。

补充:

突然想起来一个老问题,是关于网络连接问题引发的数据库访问异常。也会引发类似的问题,涉及到远程链接访问的。

原因是对于SQLServer 的TCP/IP地址而言默认访问IPV4地址。所以当服务器上有IPV6地址时,会去访问IPV6从而引发连接超时等现象。具体的修复步骤如下:

1.不需要用IPv6的话直接在网络连接中将Ipv6的选项勾掉然后应用即可。如图:

2. 如果必须使用IPv6,则需要执行以下步骤:

  • 打开SQLServer 配置管理器
  • 点击网络配置下面的协议
  • 右侧点击TCP/IP,右键属性。

  • 为每一个IP地址的端口号都输入你的默认端口号,然后活动和启用都选择是。应用即可
  • 如有必要还要添加端口或者程序的入站规则(端口),出站规则。

SSRS报表连接超时的问题的更多相关文章

  1. SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表

    这段时间一直在敲rdl报表,在国内的不这么留在,在国外的话,还是挺流行的,国内的话,这方面的资料很少很少,也踏过不少坑 先从SSRS了解起,SSRS全称 SQL Server Reporting Se ...

  2. SSRS 报表 如何加参数

    SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新 ...

  3. 关于MySQL的wait_timeout连接超时问题报错解决方案

    bug回顾 : 想必大家在用MySQL时都会遇到连接超时的问题,如下图所示: ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce ...

  4. Linux Vsftpd 连接超时解决方法(被动模式)

    http://blog.csdn.net/qq_15766181/article/details/46554643 使用 FileZilla FTP Client 连接 Vsftpd FTP,在没有配 ...

  5. 修改tnsnames.ora文件中配置内容中的连接别名后,连接超时解决办法

    1.tnsnames.ora文件中配置内容中的连接别名:由upaydb修改为IP地址 2.连接超时 定位原因: PLSQL登录界面的数据库列表就是读的tnsname.ora中连接的别名,这个文件中连接 ...

  6. Dynamics AX 2012 R2 SSRS报表在VS2010中预览没有数据

    今天,Reinhard 在VS中制作SSRS报表,预览的时候发现显示不出数据. 仔细检查了数据处理环节和临时表里的数据,都发现没有问题. 用同事的账号登陆同样的开发环境,发现他的账号可以在VS中预览到 ...

  7. SQL Server 连接超时案例一则

    上周六,一工厂系统管理员反馈一数据库连接不上,SSMS连接数据库报"连接超时时间已到.在尝试使用预登录握手确认时超过了此超时时间.......", 如下截图所示: 另外远程连接也连 ...

  8. Linux Vsftpd 连接超时解决方法

    Linux Vsftpd 连接超时解决方法 2013-11-13 10:58:34|  分类: 默认分类|举报|字号 订阅     解决方法(http://www.lingdus.com/thread ...

  9. (转)hbase master挂掉-zookeeper连接超时原因

    link:http://www.51testing.com/?uid-445759-action-viewspace-itemid-812467 并行运行hbase删表,建表操作,多个表多个regio ...

随机推荐

  1. 字符串-Alphabet

    在一些应用当中,会对字符串的字母表进行限制,在这些应用中,往往会用到如下的示例所涉及到的几点知识: public static void main(String[] args){ String[] a ...

  2. C#实现WebService服务 项目完整总结

    先说一下这个项目做了什么.先介绍一下背景(备注一下,每次项目发生更改之后,要进行clean 和rebuild两个操作,否则最新的更改保存不到exe文件中,这样上线后的系统还是执行得原有的已编译过的程序 ...

  3. [moka同学笔记]二、Yii2.0课程笔记(魏曦老师教程)

    一.在标签tags的model中 //使用正则表达式,把标签字符串转换成数组 public static function string2array($tags) { return preg_spli ...

  4. EffectiveJava——请不要在代码中使用原生态类型

    先看一个栗子,看看能不能找出来里面的错误: /** * 请不要在新代码中使用原生态类型 * @author weishiyao * */ public class Test { public stat ...

  5. MyEclipse常用插件使用教程

    一.Findbugs 1. 配置 1.1 打开FindBugs视图: Windows => Show View => Other… => FindBugs => Bug Inf ...

  6. ssh架构简单解释和vo po解释

      Struts.spring.Hibernate在各层的作用 1)struts 负责 web层. ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理,再Forwa ...

  7. Gulp-前端进阶A-1

    毕业到转行以来有一年时间了,成为一名程序猿也有大半年了,之前在新浪上随便写写简单的学习过程,感觉不够像那么回事,现在接触前端也有一段时间了,也做过几个项目,认识到可以拓展的实在太多了,希望从这里起步, ...

  8. CodeIgniter_2 路由中定义伪静态 直接映射到相关的控制器

    某些情况下 隐藏路径信息 使用伪静态定义: RewriteRule ^no/torrent(.*)$ /index.php/torrent/doit/$1 CodeIgniter会自动识别到 no 控 ...

  9. [DeviceOne开发]-地区选择

    一.简介 该demo主要通过do_ComboBox和do_Picker的selectChanged事件,实现省市县三级联动的功能 二.效果图 三.源码地址 https://github.com/do- ...

  10. JavaScript中的各种变量提升(Hoisting)

    首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升( ...