我们监控SQL SERVER数据库的阻塞情况时,老是收到在SSRS 里面出现SQL阻塞情况,刚开始由于事情多,没有太关注ReportServerTempDB里面的会话阻塞情况,但是老是出现这种频繁阻塞情况,不得不仔细研究一下SSRS的Blocking问题。

 

Blocking SQL Text

CREATE PROCEDURE [dbo].[Writelocksession] @SessionID        AS VARCHAR(32), 

                                          @Persisted        BIT, 

                                          @CheckLockVersion BIT = 0, 

                                          @LockVersion      INT 

AS 

    SET nocount OFF; 

 

    IF @Persisted = 1 

      BEGIN 

          IF @CheckLockVersion = 0 

            BEGIN 

                UPDATE [ReportServerTempDB].dbo.sessionlock WITH (rowlock) 

                SET    sessionid = sessionid 

                WHERE  sessionid = @SessionID; 

            END 

          ELSE 

            BEGIN 

                DECLARE @ActualLockVersion AS INT 

 

                UPDATE [ReportServerTempDB].dbo.sessionlock WITH (rowlock) 

                SET    sessionid = sessionid, 

                       lockversion = lockversion + 1 

                WHERE  sessionid = @SessionID 

                       AND lockversion = @LockVersion; 

 

                IF ( @@ROWCOUNT = 0 ) 

                  BEGIN 

                      SELECT @ActualLockVersion = lockversion 

                      FROM   [ReportServerTempDB].dbo.sessionlock WITH (rowlock) 

                      WHERE  sessionid = @SessionID; 

 

                      IF ( @ActualLockVersion <> @LockVersion ) 

                        RAISERROR ('Invalid version locked',16,1) 

                  END 

            END 

      END 

    ELSE 

      BEGIN 

          INSERT INTO [ReportServerTempDB].dbo.sessionlock WITH (rowlock) 

                      (sessionid) 

          VALUES      (@SessionID) 

      END 

Blocked SQL Text

CREATE PROCEDURE [dbo].[Checksessionlock] @SessionID   AS VARCHAR(32), 

                                          @LockVersion INT output 

AS 

    DECLARE @Selected NVARCHAR(32) 

 

    SELECT @Selected = sessionid, 

           @LockVersion = lockversion 

    FROM   [ReportServerTempDB].dbo.sessionlock WITH (rowlock) 

    WHERE  sessionid = @SessionID 

如上所示,在存储过程WriteLockSession中更新[ReportServerTempDB].dbo.SessionLock的时候使用行锁WITH(ROWLOCK),它阻塞了存储过程[dbo].[CheckSessionLock]查询表[ReportServerTempDB].dbo.SessionLock,这个是因为SSRS通过SessionLock表来实现多线程机制,一旦没有线程访问这些报表时,锁才会移除。比较慢、耗时长的查询会导致这类blocking出现。

SSRS issues these locks to provide a multithreading mechanism.Once all threads running the report that YOU wrote, end, the lock is removed.So if you see these, normally, it is a slow query on a different server causing the problem.
Some issues may happen on heavy load (or so they say), and some report that collation issues prevent CleanExpiredSessions from running.

I have the same problem. MSDN says the locking/blocking is to ensure consistency, and is normal behavior. The only thing you can do is to reduce report data or run it at quiet time. I am sure MSDN understands why it was set this way originally. You are editing a blackbox at your own risk.

微软给出的解释是: SSRS 数据库的架构设计,在高负荷的时候导致blocking出现,你应该注意采纳一些 Reporting Services Performance Optimization的建议。减小报表的数据量等…

Thank you for filing this issue. The RS database architecture can lead to blocking under heavly load. Best practices for how to address this issue are documented here: http://sqlcat.com/search/searchresults.aspx?q=reporting+services&ctypes=blog We will consider this issue for a future version of Reporting Services.

参考资料

https://connect.microsoft.com/SQLServer/feedback/details/698388/blocking-in-ssrs-reportserver-database

http://blogs.msdn.com/b/sqlcat/archive/2013/09/20/report-server-catalog-best-practices.aspx

http://blogs.msdn.com/b/sqlcat/archive/2013/10/30/reporting-services-performance-and-optimization.aspx

SSRS ReportServer Database 的Blocking问题的更多相关文章

  1. SQL Sever 博客文章目录(2016-07-06更新)

    SQL Server方面的博客文章也陆陆续续的写了不少了,顺便也将这些知识点整理.归纳一下下.方便自己和他人查看. MS SQL 数据类型 三大数据库对比研究系列--数据类型 MS SQL 表和视图 ...

  2. Report launcher to run SSRS report subscriptions on demand

    http://www.mssqltips.com/sqlservertip/3078/report-launcher-to-run-ssrs-report-subscriptions-on-deman ...

  3. Enabling Remote Errors in SSRS

    January 18, 2011 By default the remote errors property in SQL Server Reporting Services is set to fa ...

  4. SQL Server系统数据库备份最佳实践

    原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信 ...

  5. vue中v-on支持的事件总结

    资源事件 事件名称 何时触发 error 资源加载失败时. abort 正在加载资源已经被中止时. load 资源及其相关资源已完成加载. beforeunload window,document 及 ...

  6. SSRS ----环境配置,没有 ReportServer DB 怎么办?

    今天项目进入报表开发阶段,按照习惯,打开报表管理器,发现提示下面的错误: 错误:报表服务器无法打开与报表服务器数据库的连接.所有请求和处理都要求与数据库建立连接. 这是怎么回事儿呢,经过排查,发现数据 ...

  7. Step by step Install a Local Report Server and Remote Report Server Database

    原创地址:http://www.cnblogs.com/jfzhu/p/4012097.html 转载请注明出处 前面的文章<Step by step SQL Server 2012的安装 &g ...

  8. SQL Server 2012 The report server cannot open a connection to the report server database

    案例环境: 操作系统版本:    Windows Server 2012 R2 Standard 数据库版本  :    SQL SERVER 2012 SP2 案例介绍: 今天进入一台新安装的SQL ...

  9. SSRS 2008 ReportServerTempDB增长异常分析

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

随机推荐

  1. JavaScrict中的断言调试

    今天在看忍者秘籍的时候,看到一个断言方法.查阅了一下资料,原来javascript中的console也包含这个方法.具体用法如下: <script type="text/javascr ...

  2. 1Z0-053 争议题目解析502

    1Z0-053 争议题目解析502 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 502.A database is running In ARCHIVBXXMS mode. It ...

  3. JavaWeb路径问题打包总结--小心出门右转404

    话说,培训和自学就不是一个回事,两周讲完java基础,两天讲完jsp,两节课讲完servlet,还真不是一般人能受得了的,这两天学习jsp和servlet频繁被路径问题困扰,倒不是出错,只是各种act ...

  4. SQL SERVER四舍五入你除了用ROUND还有其他方法吗?

    引言 今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1))  我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四 ...

  5. Solr与Cassandra二级缓存实践

    额达到数十亿美元.在Newegg,每天有数以千万计的用户浏览商品,并产生下单交易等后续操作.我们构建的数据系统,必须应对日益增大的数据量,具备健壮性.可靠性.目前,我们采用Cassandra来构建Ne ...

  6. 开源网站.NETMVC+ Layui+SqlSugar+RestSharp

    SugarSite一个前端支持移动端的企业网站,目前只支持了简单功能,后续还会加上论坛等. 源码GIT地址: https://github.com/sunkaixuan/SugarSite 技术介绍 ...

  7. C# Winform 拦截关闭按钮触发的事件

    用户关闭软件时,软件一般会给“是否确认关闭”的提示. 通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭:否则把FormClosingEventArgs 的 Cancel 属性设置 ...

  8. MSSQL 2012安装报错之0x858C001B

    之前安装 Microsoft Sql Server 2012 R2 的时候总是报这样的错误: SQL Server Setup has encountered the following error: ...

  9. de4dot3.14更新文件打包下载

    刚发现de4dot更新了,虽然只是10月份的文件更新,并未发布新的release,但好多人还不会编译... 关于de4dot有何功能就不再讲了. 本文主要提供编译通过后的打包文件下载. 首先下载de4 ...

  10. function的name属性

    name属性是函数的一个非标准的属性. 通过这个属性,我们可以访问给定函数的名字.属性name的值永远等于跟在function关键字后的标识符.   eg: function jenny(arg1,a ...