高老大 ‘SQL Server 优化器特性导致的内存授予相关BUG’ 学习笔记

时间:2022-06-15 10:58:34

今天高老大出了好文章。在这里 自己本来对这一块比较混乱,正好借这个机会学习一下。

就用高老大的脚本。需要的直接去他那里找吧,这里就省了。

加查询优化标记前后对比

高老大 ‘SQL Server 优化器特性导致的内存授予相关BUG’ 学习笔记

可以看到GrantedMemory是504928KB,大约是213096/1024=208.101562MB(这里的那个值好像每次都有差别,但是差距不太大。不影响效果)

加上跟踪标记后

高老大 ‘SQL Server 优化器特性导致的内存授予相关BUG’ 学习笔记

4560/1024大概只有4MB吧。

差别很大吧~

其实这里这些值还可能通过查询计划的XML里看,里面有更详细的信息。

<QueryPlan DegreeOfParallelism="1" MemoryGrant="216568" CachedPlanSize="24" CompileTime="2" CompileCPU="2" CompileMemory="168">
<MemoryGrantInfo SerialRequiredMemory="512" SerialDesiredMemory="504928" RequiredMemory="512" DesiredMemory="504928" RequestedMemory="216568" GrantWaitTime="0" GrantedMemory="216568" MaxUsedMemory="40" />
<OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="196572" EstimatedPagesCached="7482" EstimatedAvailableDegreeOfParallelism="2" />

MemoryGrant这是评估值,以Serial*开头的字段,好像是如果这个query串行化时的评估值(Serial required/desired memory attributes are estimated during query compile itme for serial execution)。

强烈推荐文章:

Understanding SQL server memory grant

Troubleshooting SQL Server RESOURCE_SEMAPHORE Waittype Memory Issues

Memory Grant Execution Plan Statistics

说实话,里面有几个参数还是不太明白确切的意思。在实际工作中如何使用,希望有人能给些指导。