我们监控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. 如何设置SharePoint 2013 的根网站集下的“更改此术语的目标页面”

    起因: 首先看问题截图Figure 1,在术语驱动的页面中设置更改此术语的目标页面,会被警告“该URL 不指向某个页面”,原因是我所找到的这个目标页面是一个非aspx结尾的URL链接. Figure ...

  2. DEBIAN下中文显示

    转:http://www.cppblog.com/colorful/archive/2012/05/28/176516.aspx 一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对 ...

  3. APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例

    前言 继上篇环境篇后,本篇主要对TestNG进行介绍,给出最最基础的两个实例,通过本文后,学会并掌握TestNG测试用例的编写与运行,以及生成美化后的报告.下一篇为HTTP接口实战(国家气象局接口自动 ...

  4. 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

    作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题. [出现频率] [关键考点] MVC的含义 MVC的结构 ...

  5. 关于jsp的内置对象request和response的重定向和转化(待补充)

    请求重定向 1.客户端行为 2.response.sengRedirect(): 3.本质上讲,相当于请求两次 4.URL地址会改变 请求转发 1.服务器行为 2.response.getReques ...

  6. jquery如何判断checkbox(复选框)是否被选中 ...

    <script type="text/javascript" src="../lib/jQuery1.11.1.js"></script> ...

  7. DevExtreme 学习应用[2]

    DevExtreme 学习应用[2] 调用WebService数据 1那么首先建立WebService using System; using System.Collections.Generic; ...

  8. .net登录的一般模式

    思路: 1.检查登录: private string CheckLogin(HttpContext context) { Model.TUser model = (Model.TUser)contex ...

  9. WPF实现无边框窗体拖拽右下角▲ 改变窗体大小【framwork4.0】 谢谢大家关注

    效果图:(右下角拖拽改变窗体大小) 第一步:添加xaml代码: <Border Name="ResizeBottomRight" MouseMove="Resize ...

  10. 【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms

    很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...