通过防止在进程中查询来避免 SSAS 中的死锁

Posted

技术标签:

【中文标题】通过防止在进程中查询来避免 SSAS 中的死锁【英文标题】:Avoid deadlock in SSAS by preventing querying during process 【发布时间】:2016-02-01 10:45:32 【问题描述】:

我有一个 SSAS 多维数据集,它会定期处理以将新可用的数据集成到源表中。

问题在于,有时该进程似乎会干扰一些繁重的查询,从而导致锁定冲突。 (每 2 周一次)

我怎样才能避免这种情况?

有没有办法阻止 SSAS 在处理多维数据集时执行查询?

这不会对性能造成太大影响,因为处理时间通常很短。

此外,重新设计多维数据集以提高性能并降低发生此问题的几率不是一种选择。

【问题讨论】:

【参考方案1】:

您如何通过关闭防火墙来终止与 SSAS 的所有连接。我认为 Disable-NetFirewallRule PowerShell 命令可以做到这一点。然后从本地框中处理立方体。然后再次启用防火墙规则。

另一种不太激进的方法是编写一个“查询管理器”,它会在处理过程中监控正在运行的查询,并取消任何运行超过 30 秒的查询。这篇博文将为您提供一个可以遵循的模式: http://blogs.msdn.com/b/johndesch/archive/2013/05/13/using-dmvs-to-monitor-and-terminate-long-running-mdx-queries.aspx

【讨论】:

感谢您的建议,但 1) 我们无法控制 SSAS 实例 2) 我们知道哪些查询很长并且不想取消它们。我们已经通过移除维度来减轻立方体的重量......【参考方案2】: SSAS 表格模型

ForceCommitTimeOut 属性类似于多维模型中的属性。这些属性以毫秒为单位,因此您可以通过将值降低到 1000ms(这意味着 1 秒)在功能环境中重现此问题。解决这个问题的方法是把这个属性的值增加到0,这意味着等到一个锁被释放。

【讨论】:

以上是关于通过防止在进程中查询来避免 SSAS 中的死锁的主要内容,如果未能解决你的问题,请参考以下文章

比特博文|死锁的产生防止避免检测和解除

死锁处理策略和死锁预防

进程死锁与避免

解决库存扣减及订单创建时防止并发死锁的问题

如何防止成为死锁受害者?

如何防止用餐哲学家c ++中的死锁