SSRS ReportServer Database 的Blocking问题

  我们监控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.

时间: 2024-10-29 11:30:08

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

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

SQL Server方面的博客文章也陆陆续续的写了不少了,顺便也将这些知识点整理.归纳一下下.方便自己和他人查看.   MS SQL 数据类型   三大数据库对比研究系列--数据类型   MS SQL 表和视图   数据库表的基本信息,你知道吗? 数据查询表,列名对比 MS SQL 建表SQL的脚本 查看数据库.表.索引的物理存储情况 慎用SELECT INTO复制表   MS SQL 索引约束 [翻译] 聚集索引表 VS 堆表 SQL SERVER 中is null 和 is not null

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

原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信息等等. model 所有新数据库的模型,如果希望新数据库都有某些对象,可以在这里创建. tempdb sql server重启时重建,所以不需要备份 除了以上四种,其实还有一个数据库:Resource 从2005就引入的,一个只读.隐藏的数据库,包含所有在sql server中的系统对象.由于SQL SERV

SSRS的报表版本控制

问题 如今商务智能应用广泛,对我们的商业愈加重要. 对新报表和的各种需求不断攀升. 自 SQL Server 2008 R2的 Reporting Services (SSRS) 开始,微软视图为减轻IT团队的工作量,推出了报表工具 Report Builder 3.0.  在此之前建立复杂的报表必须用BIDS (就是 Visual Studio ,2012以后叫SSDT).现在报表都可以用 BIDS或者Report Builder建立. 因为可以使用两个工具创建修改的关系. 报表的版本控制愈加

SSRS 2008 ReportServerTempDB增长异常分析

  这两天收到一SQL 2008 R2数据库服务器的磁盘空间告警,在检查过程中发现ReportServerTempDB已经暴增到60多GB,其中数据文件接近60G,日志文件9G大小左右.如下截图所示 我 们知道ReportServerTempDB是SSRS使用的临时数据库.这个数据库负责存储中间处理结果,例如报表服务器生成的会话和执行数据.缓存报 表以及工作表.正常情况下,Report Server能够周期性地清除ReportServerTempDB中的到期的和孤立的数据.后台进程定期清理时间间

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

     今天遇到了Reporting Services(SQL SERVER 2008 R2)的报表执行异常情况,报表加载数据很长时间都没有响应,最后报"An error occurred within the report server database.  This may be due to a connection failure, timeout or low disk condition within the database.;". 检查C:\Program Files

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 Server服务器的Reporting Service管理界面时,出现如下错误信息 The report server cannot open a connection to the report server database. A connectio

SSRS入门(八篇) 报表订阅进阶

上一篇介绍如何在SSRS中以共享目录的方式来订阅报表.由于SSRS对于邮件的方式订阅报表有些特殊,所以此篇将介绍如何以变通的方式实现报表邮件订阅. 实现邮件的方式订阅报表,我们将其拆分成三个部分. 我们利用SQL Server Agent生成job来以固定周期触发一个流程.然后在这个流程中,首先实现一个app将报表生成到一个指定目录下,然后再调用另外一个程序,根据配置文件,把报表发送给指定邮件组的用户. 首先,创建生成报表pdf的应用程序. 生成pdf的主要思路是用一个winform应用程序添加

SQL Server BI Step by Step SSRS 1-Reporting Service 2008的新特性

今天我们开始SQL SERVER BI的另外一个重要的部分 --Reporting Service,相对于Integration Service和Analysis Service,Reporing Service在国内的使用者应该多很多.一方面由于Reporing Service费用比较低,直接附属在SQL SERVER中,另外一方面其实SSRS在很大程度上还是满足我们的报表 需求的. 在SQL Server 2008中,SSRS更是在很多方面都有所加强,"如果微软在2008的BI中投入了10美

SSRS Reports 2008性能优化案例

 我们的一个Reporting Service服务上部署了比较多的SSRS报表,其中有一个系统的SSRS报表部署后,执行时间相对较长,加之供应商又在ASP.NET页面里面嵌套了 Reporting Service的报表,使得用户对报表响应速度非常不满,于是和几个同事研究了一番如何定位.优化SSRS报表性能.    案例环境:         操作系统   :   Windows Server 2008 R2 Standard SP1         数据库版本 :   SQL Server 20