每个查询的最大内存

时间:2011-10-04 14:05:22

标签: sql tsql sql-server-2008

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

我知道有办法设置最小值,但最大值怎么样?我想使用它,因为我有许多并行进程。我知道MAXDOP选项,但这适用于处理器。

更新

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

3 个答案:

答案 0 :(得分:3)

我无法想到在每个查询级别设置最大内存。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

除了马丁的回答

如果您的查询完全相同或类似,处理相同的数据,那么无论如何它们都将共享内存。

示例:

一个拥有100个并发连接的繁忙网站,它们在大致相同的数据范围内运行6个不同的参数化查询。

  • 6个执行计划
  • 100个用户上下文
  • 一个缓冲池,带有各种标志和计数器,用于显示每个数据页的使用情况

如果您有100个不同的查询或未进行参数化,则修复代码

每个查询的内存是我自上次千禧年以来从未想过或不关心的事情