查询时SSRS是否锁定表?


9

我的高级DBA告诉我,默认情况下,SQL Query执行不会锁定该表。

我的SQL Server Reporting Services(SSRS)报告存在一些问题,似乎在锁定方面出现了一些问题并出现了一些错误。

我做了一些谷歌搜索,但没有找到任何东西。

SSRS报告是否锁定正在查询的表?

是否有任何MSDN文档专门记录此行为?


我们有同样的问题。尽管从技术上讲,这并不是您的问题的答案,但是我们通过启动数据集查询SET TRANSACTION ISOLATION LEVEL(例如,READ UNCOMMITTED如果您不介意冒一些脏读风险)来进行快速修复。
Jeroen 2012年

正如对未来的音符,你也可以通过AlwaysOn可用性组在SQL重定向报告负荷可读次级2012 msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

Answers:


7

简短答案:否

更长...

SQL Server不知道是SSRS向其发送查询。因此,来自SSRS的查询将像其他任何查询一样运行。

查询优化器更有可能决定对SSRS查询使用表锁。当然,这可能是一个不同的问题,但这是一个不同的问题


mm-那么,SRSS在查询时会尝试锁定表吗?
melaos 2012年

T-SQL语句会导致某种类型的锁或另一种类型的锁,具体取决于T-SQL语句。它不依赖于该语句的来源(SSRS,查询窗口,应用程序等)
Eric Higgins 2012年

4

我的上级告诉我,默认情况下,对于SQL查询执行不会锁定表。

这是真的。但是,这并不意味着查询无法锁定表。

SSRS报告实际上将锁定正在查询的任何表吗?

SSRS通过对数据库运行查询或存储过程来获取用于呈现报告的数据。

此查询由开发人员定义,并且最终可能会锁定一个表(或多个表),具体取决于隔离级别和涉及的行数。(实际上,在某些情况下,您可能故意这样做。)最重要的是,由开发人员决定锁定对于查询如何起作用。SSRS无法为您解决此问题。这就是为什么没有任何文档的原因。

考虑(例如):

  • 使用READ UNCOMMITTED如果脏读都还好
  • 启用和使用快照隔离级别
  • 日志模式为“备用”,并针对只读副本运行查询

2

您怎么知道报表运行时有锁?我建议您检查作为报告来源的查询/存储过程,并确保它本身可以正常工作。

如果您确定源查询工作正常,请尝试使用SQL Server Profiler查明问题。下面的链接可能会有所帮助:https :
//stackoverflow.com/questions/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs


因为我在一些浏览器上运行该报告,并且该报告不断出现错误,表明进程已被锁定并处于死锁状态。
melaos 2012年

在这种情况下,您的报告很可能试图读取被另一个用户锁定的数据(例如,某人正在更新同一记录)。如果可以读取未提交的数据,则可以在所有“选择”语句中添加“无锁”。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.