步骤3:

  然后使用DMV:sys.dm_exec_query_memory_grants来获得在等待队列中的查询所需要内存的详细信息。这些查询的grant_time和granted_memory_kb可能为null。也可以从这个DMV中得到plan_handle和sql_handle:

SELECT  *
FROM    sys.dm_exec_query_memory_grants

  我们要关注的是下面3列:

  步骤4:

  现在将要找到集中消耗内存的查询,可以查看所有等待查询中的需求内存。当看到这部分内存太大的时候,然后找到这些查询的plan_handle,并查看它们的执行计划:

SELECT TOP 10
        *
FROM    sys.dm_exec_query_memory_grants

  步骤5:

  把步骤4中查询的plan_handle的数据复制,然后执行:

SELECT * FROM sys.dm_exec_sql_text(sql_handle)

  注意替换括号中的sql_handle。然后查看其执行计划。

  总结:

  通过上面的步骤找到耗费内存的查询后,应该调整语句,使其占用更少的资源。以便解决内存压力。