2011-10-04 63 views
3

如何配置查询(选择查询)在sql server 2008中可以使用的最大内存?每个查询的最大内存

我知道有一种方法来设置最小值,但最大值如何?我想用这个,因为我有很多并行的进程。我知道MAXDOP选项,但这是针对处理器的。

更新:

我实际上试图做的是连续运行一些数据加载。此数据加载位于ETL表单中(提取转换和加载)。数据加载时,我想运行一些查询(选择)。所有这些都是昂贵的查询(包含group by)。 对我来说最重要的过程是数据加载。我获得了10000行/秒的平均速度,当我平行运行查询时,它降至4000行/秒甚至更低。我知道应该提供更多的细节,但这是我工作的更复杂的产品,我无法详细说明。我可以保证的另一件事是我的加载速度不会因为锁定问题而下降,因为我监视并删除了它们。

+1

什么版本的SQL Server 2008是你吗? –

+1

简短的回答是:你可能不应该(如果你试图这样做,那么你可能会做一些根本性错误的事情)。如果您构建了需要结果的查询,则需要花费一切。 –

+2

也许你应该描述你正面临的实际问题... –

回答

3

在我能想到的每个查询级别上没有任何设置最大内存的方法。

如果您使用Enterprise Edition,则可以使用resource governor来设置特定工作负载组可以使用的最大内存量,这可能有所帮助。

+0

不是什么海报正在问,但可能是可行的。 –

+1

@MitchWheat - 是的,我添加了第一行,因为我不知道有什么办法来完成OP要求的内容。 –

+0

yeap。这是我正在寻找的。感谢:D –

0

在SQL 2008中,您可以使用资源调控器来实现此目的。在那里你可以设置request_max_memory_grant_percent来设置内存(这是相对于池的max_memory_percent值指定的池大小的百分比)。这个设置在不查询特定的情况下,它是会话特定的。

+1

不知道这对martin(5分钟)较旧的答案有多大贡献? –

+0

对不起,但是当我打开窗口,几分钟没有碰到它时 - 保存后,我看到了答案 –

0

除了马丁的回答

如果你的查询都是相同或相似的,在相同的数据,那么他们将被共享内存反正。

实施例:

一个繁忙的网站100个的并发连接运行它们之间6个不同的parametrised查询上大致相同范围的数据。

  • 6执行计划
  • 100用户上下文和各类标志和计数器
  • 一个缓冲池,以显示每个数据页

的使用。如果你有100个不同的查询,否则将无法parametrised然后修复代码。每次查询

记忆是我从来没有想过或关心自去年千年

+1

我假设OP正在讨论像sort和hash连接这样的操作符的内存授予。对于这个问题的动机来说,澄清一下会很好。 –