在工作中,用户非常乐意使用 Reporting Services 的报表生成器生成自己的报表。
但是,唉,它生成的查询效率非常低,而且它们不使用“WITH (NOLOCK)”——这会减慢每个人的速度。
这些报告确实需要使用最新数据运行 - 无法卸载到报告服务器。而且由于它们查询非常具体、详细的数据,因此超立方体在这里毫无用处。
所以问题是:
有没有办法配置报表生成器的数据模型,以便它生成的查询在查询表时始终使用“WITH (NOLOCK)”?
在工作中,用户非常乐意使用 Reporting Services 的报表生成器生成自己的报表。
但是,唉,它生成的查询效率非常低,而且它们不使用“WITH (NOLOCK)”——这会减慢每个人的速度。
这些报告确实需要使用最新数据运行 - 无法卸载到报告服务器。而且由于它们查询非常具体、详细的数据,因此超立方体在这里毫无用处。
所以问题是:
有没有办法配置报表生成器的数据模型,以便它生成的查询在查询表时始终使用“WITH (NOLOCK)”?
NOLOCK 不是解决方案。脏读是不一致的读。您的总数将被取消,您的报告将不平衡,并且您通常会产生垃圾汇总数据。使用快照隔离来防止报告阻止更新并防止更新阻止报告:
ALTER DATABASE ... SET READ_COMITTED_SNAPSHOT ON;
有关详细信息,请参阅数据库引擎中基于行版本控制的隔离级别。
创建视图作为报表的数据源,并添加with (nolock)
到视图的 select 语句中的所有表中。