这两天收到一SQL 2008 R2数据库服务器的磁盘空间告警,在检查过程中发现ReportServerTempDB已经暴增到60多GB,其中数据文件接近60G,日志文件9G大小左右。如下截图所示

我们知道ReportServerTempDB是SSRS使用的临时数据库。这个数据库负责存储中间处理结果,例如报表服务器生成的会话和执行数据、缓存报表以及工作表。正常情况下,Report Server能够周期性地清除ReportServerTempDB中的到期的和孤立的数据。后台进程定期清理时间间隔由参数CleanupCycleMinutes控制,这个参数位于

<Installation Drive>\<Program Files or Program Files(x86)>\Microsoft SQL Server\<SSRS Instance>\Reporting Services\ReportServer 下的rsreportserver.config配置文件中。 例如C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\rsreportserver.config ,它指定多少分钟后从报表服务器数据库删除旧会话和过期快照。有效值的范围为 0 到最大整数之间。默认值为 10。如果将值设置为 0,将禁止数据库清除进程。如下所示,此参数值为10分钟

也就是说,如果正常清理ReportServerTempDB的话,ReportServerTempDB应该不会有这么大。检查数据库ReportServerTempDB,发现最大的表是SessionData,有50多G大小。

CREATE TABLE #tablespaceinfo

    (

      nameinfo VARCHAR(500) ,

      rowsinfo BIGINT ,

      reserved VARCHAR(20) ,

      datainfo VARCHAR(20) ,

      index_size VARCHAR(20) ,

      unused VARCHAR(20)

    )  

 

DECLARE @tablename VARCHAR(255);  

 

DECLARE Info_cursor CURSOR

FOR

    SELECT  '[' + [name] + ']'

    FROM    sys.tables

    WHERE   type = 'U';  

 

OPEN Info_cursor  

FETCH NEXT FROM Info_cursor INTO @tablename  

 

WHILE @@FETCH_STATUS = 0

    BEGIN 

        INSERT  INTO #tablespaceinfo

                EXEC sp_spaceused @tablename  

        FETCH NEXT FROM Info_cursor  

    INTO @tablename  

    END 

 

CLOSE Info_cursor  

DEALLOCATE Info_cursor  

 

--创建临时表

CREATE TABLE [#tmptb]

    (

      TableName VARCHAR(50) ,

      DataInfo BIGINT ,

      RowsInfo BIGINT ,

      Spaceperrow  AS ( CASE RowsInfo

                         WHEN 0 THEN 0

                         ELSE CAST(DataInfo AS decimal(18,2))/CAST(RowsInfo AS decimal(18,2))

                       END ) PERSISTED

    )

 

--插入数据到临时表

INSERT  INTO [#tmptb]

        ( [TableName] ,

          [DataInfo] ,

          [RowsInfo]

        )

        SELECT  [nameinfo] ,

                CAST(REPLACE([datainfo], 'KB', '') AS BIGINT) AS 'datainfo' ,

                [rowsinfo]

        FROM    #tablespaceinfo

        ORDER BY CAST(REPLACE(reserved, 'KB', '') AS INT) DESC  

 

 

--汇总记录

SELECT  [tbspinfo].* ,

        [tmptb].[Spaceperrow] AS '每行记录大概占用空间(KB)'

FROM    [#tablespaceinfo] AS tbspinfo ,

        [#tmptb] AS tmptb

WHERE   [tbspinfo].[nameinfo] = [tmptb].[TableName]

ORDER BY CAST(REPLACE([tbspinfo].[reserved], 'KB', '') AS INT) DESC  

 

DROP TABLE [#tablespaceinfo]

DROP TABLE [#tmptb]

检查C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\LogFiles 下的日志文件,搜索“Call to CleanBatch”,会看到clean session都是0,部分如下所示

library!WindowsService_0!df8!04/20/2016-12:38:44:: i INFO: Call to CleanBatch()

library!WindowsService_0!df8!04/20/2016-12:38:45:: i INFO: Cleaned 0 batch records, 0 policies, 0 sessions, 0 cache entries, 49 snapshots, 289 chunks, 0 running jobs, 0 persisted streams, 244 segments, 244 segment mappings, 0 edit sessions.

library!WindowsService_0!df8!04/20/2016-12:38:45:: i INFO: Call to CleanBatch() ends

不清楚为什么出现这种情况,在网上也能看到很多关于reportservertempdb 不能清理历史数据或快照的帖子,如下所示,

http://www.sqlservercentral.com/Forums/Topic1183933-1550-1.aspx

ReportServerTempDB not cleaning itself up in SSRS 2008

ReportserverTempDB Grows unexpected

可以判断SSRS清理历史数据或快照的后台进程出现异常或存在bug(The ReportServerTempDB sessiondata table is not being purged according to the 10 minute default setting),但是具体情况,没有相关文档或资料佐证。所以仅仅从上面日志,我们还不能分析出具体原因。我倒是很想知道这个数据库ReportServerTempDB是什么时候出现暴增的,幸亏我在这台服务器部署了一个作业监控数据库文件增长情况,如下所示

可以看出这个数据库在2016-1-1号,只有22G大小(已经运行了一两年了),此后的几个月,几乎每个月增长了10G左右。

查看表SessionData的记录,发现居然还有2015年就已经过期的会话数据,更加深信这个是SSRS的一些bug造成的。

USE ReportServerTempDB;

 

GO

 

SELECT MIN(Expiration) FROM SessionData WITH(NOLOCK)


那么如何处理这个案例呢,我们可以在业务非常少的时间段,按照下面步骤进行操作

1: 首先停止SSRS服务

2: 删除SessionDate表的数据

USE ReportServerTempDB;

GO

 

TRUNCATE TABLE dbo.SessionData;

3: 然后启动SSRS服务

4: 收缩ReportServerTempDB数据库

如果磁盘空间足够的情况下,就不要收缩ReportServerTempDB数据库了。如果磁盘空间实在紧张,那么收缩也是必须的。

 

如果还存在dbo.SessionData不断增长的情况,最好创建做一个作业,每天定期清理那些过期的会话信息。另外还有一个问题,很多人会有疑惑:ReportServerTempDB数据库里面的表能否清理? 答案是可以,具体参考官方文档https://technet.microsoft.com/en-us/library/ms156016.aspx

If you back up the temporary database and subsequently restore it, you should delete the contents. Generally, it is safe to delete the contents of the temporary database at any time. However, you must restart the Report Server Windows service after you delete the contents.

SSRS 2008 ReportServerTempDB增长异常分析的更多相关文章

  1. SSRS 2008 R2 错误:Timeout expired. The timeout period

    今天遇到了Reporting Services(SQL SERVER 2008 R2)的报表执行异常情况,报表加载数据很长时间都没有响应,最后报"An error occurred with ...

  2. Linux Kernel Oops异常分析

    1.PowerPC小系统内核异常分析 1.1  异常打印 Unable to handle kernel paging request for data at address 0x36fef31eFa ...

  3. MySQL 外键异常分析

    外键约束异常现象 如下测例中,没有违反引用约束的插入失败. create database `a-b`; use `a-b`; SET FOREIGN_KEY_CHECKS=0; create tab ...

  4. java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

    java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...

  5. Canal 同步异常分析:Could not find first log file name in binary log index file

    文章首发于[博客园-陈树义],点击跳转到原文Canal同步异常分析:Could not find first log file name in binary log index file. 公司搜索相 ...

  6. Android异常分析(转)

    关于异常 异常? 异常就是一种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象.比如:android系统常见异常现象有应用无响应. ...

  7. “基于数据仓库的广东省高速公路一张网过渡期通行数据及异常分析系统"已被《计算机时代》录用

       今天收到<计算机时代>编辑部寄来的稿件录用通知,本人撰写的论文"基于数据仓库的广东省高速公路一张网过渡期通行数据及异常分析系统",已被<计算机时代>录 ...

  8. 【STM32H7教程】第11章 STM32H7移植SEGGER的硬件异常分析

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第11章       STM32H7移植SEGGER的硬 ...

  9. LCD显示异常分析——撕裂(tear effect)【转】

    转自:LCD显示异常分析--撕裂(tear effect) 概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear e ...

随机推荐

  1. 制作动画或小游戏——CreateJS事件(二)

    在Canvas中如果要添加事件,就需要计算坐标来模拟各种事件,而EaselJS中已经封装好了多个事件,只需调用即可. 一.事件 1)点击 事件是绑定在Shape类中的,click事件与DOM中的意思是 ...

  2. 浅谈2D游戏设计模式3 - 冒险地图之美(1)

    冒险岛之所以能长久的存在,很大一部分原因是因为它的美工设计的非常的精细,以及独特,那么独特以及美究竟体现在哪些方面呢? 今天我就带大家来分析几幅地图吧. 好吧,我们就拿上面这幅美景来分析吧. 1.阳光 ...

  3. 微信浏览器是移动端的IE6?微信升级内核后Html5和CSS3兼容性总结

    今年4月,自从微信浏览器X5 升级Blink内核之后,各前端社区一片高潮,仿佛看到了前端er,眼含热泪进而抱头痛头的说:终于可以不用兼容这"移动端的IE6 "了,可以早点回家了!! ...

  4. 【原创】Kafka console consumer源代码分析(一)

    上一篇中分析了Scala版的console producer代码,这篇文章为读者带来一篇console consumer工作原理分析的随笔.其实不论是哪个consumer,大部分的工作原理都是类似的. ...

  5. React Native文件介绍

    一.index.ios.js文件中的东西 index.ios.js文件,是js代码的入口文件,所有的代码编写从这开始,可以定义自己的模块和引入第三方模块. import React, { Compon ...

  6. C#播放wav文件

    C#使用HWQPlayer类播放wav文件 类的代码: using System.IO; using System.Runtime.InteropServices; namespace HoverTr ...

  7. Redis 详解 (一) StackExchange.Redis Client

    这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务.目前有不少人在使用ServiceS ...

  8. c# asp.net4.0尚未在web服务器上注册

    辗转无数论坛,感谢http://bbs.csdn.net/topics/390992746 microsoft官方文档: https://blogs.msdn.microsoft.com/webdev ...

  9. Debian 7 安装配置总结

    最近几天折腾了一下Debian 7 (gnome桌面DVD版,KDE桌面CD版最后会提到),总的来说收获还是挺大的,对比以前使用ubuntu,debian 7给我的感觉像是一个新生婴儿,不带多余的花俏 ...

  10. 企业管理咨询Interview Checklist

    企业管理咨询Interview Checklist 一. 企业战略 1. 您对公司所处行业的看法如何? 2. 请您介绍一下公司的发展历程,主要业务开展状况及核心竞争力.关键成功因素有哪些? 3. 在您 ...