【问题标题】:Is there a way to force Report Builder to use "WITH (NOLOCK)" in the queries it generates?有没有办法强制报表生成器在它生成的查询中使用“WITH (NOLOCK)”?
【发布时间】:2010-12-22 19:51:53
【问题描述】:

在工作中,用户非常乐意使用 Reporting Services 的报表生成器生成自己的报表。

但是,遗憾的是,它生成的查询效率非常低,而且它们不使用“WITH (NOLOCK)” - 对每个人来说都减慢了速度。

这些报告确实需要使用最新数据运行 - 无法卸载到报告服务器。而且由于它们查询非常具体、详细的数据,因此超立方体在这里没有用处。

所以问题是:

有没有办法配置报表生成器的数据模型,使其生成的查询在查询表时始终使用“WITH (NOLOCK)”?

【问题讨论】:

    标签: sql-server reporting-services reportbuilder


    【解决方案1】:

    NOLOCK 不是解决方案。脏读是inconsistent reads。您的总数将被取消,您的报告将不平衡,并且您通常会产生垃圾汇总数据。使用快照隔离来防止报告阻止更新并防止更新阻止报告:

    ALTER DATABASE ... SET READ_COMITTED_SNAPSHOT ON;
    

    更多详情请见Row Versioning-based Isolation Levels in the Database Engine

    【讨论】:

    • 因为这是一台 SQL 2000 服务器,所以隔离级别对我没有用处。是的,我提前知道幻象读数和其他危险——它们比我们所拥有的更可取。
    【解决方案2】:

    创建视图作为报表的数据源,并将with (nolock)添加到视图的select语句中的所有表中。

    【讨论】:

    • 我希望有一个 SSRS 配置选项,因为没有(或者我找不到)这似乎是更明智的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多