2014-10-02 51 views
1

我想确保从只读模式运行查询时服务器的压力最小(用户可以选择数据并创建临时表和变量,但可以'执行SP,写入和其他更高级的东西)。在这种情况下我可以使用哪些数据提示/其他技巧?尽量减少SQL Server对来自只读模式的查询的压力

目前我:

  1. 使用WITH (NOLOCK)提示为每个表
  2. 整个批次-10设置DEADLOCK_PRIORITY(虽然我不知道它真正需要的,因为我使用NOLOCK

我的目标是尽可能少的服务器资源,并允许服务器自由处理其他更重要的事情。我要发送到服务器的查询是本地的(不能保存为SP),并且会有很多来自每个5分钟的不同用户。它们通常很简单,并且很便宜。还有其他方法可以使它们更便宜吗?

编辑: 我不是我连接到的服务器的所有者,所以我只能使用SQL传递到服务器来实现我想要的。

回答

0

您采取的两项措施几乎没有影响。它们主要用于迷信。他们可以在罕见的情况下产生影响。实际上,READ UNCOMMITTED(与NOLOCK完全相同)可以在B树上进行分配顺序扫描。这对于不在内存中的表非常重要。

如果你想最大限度地减少锁定和阻塞,快照隔离可以是一个简单而且非常有效的解决方案。

为了真正减少某些工作负载的影响,您需要使用资源调控器。其他一切都是部分解决方案/解决方法。

考虑限制CPU使用率,内存,IO和并行度。

+0

谢谢,现在我看到它从我的问题中不明显,但问题是,我不是我将连接用户的服务器的所有者。所以我唯一需要做的事情就是嵌入到我发送给服务器的SQL查询中。 – 2014-10-02 13:51:37

+0

在这种情况下,你已经尽力了。删除所有NOLOCK内容并设置TRAN ISOLATION LEVEL RUC。考虑LOCK_TIMEOUT = 0或其他一些低值。当然,这可能会导致零星的故障。 RUC也可能导致零星的查询失败。 – usr 2014-10-02 13:54:27

+0

你可以将它移动到答案中,以便我可以接受它吗?另外,既然你说NOLOCK和RUC一样,你为什么建议交换呢? – 2014-10-02 14:04:16