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

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

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

加查询优化标记前后对比

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

加上跟踪标记后

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

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

时间: 2024-10-28 21:13:08

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

SQL Server 优化器特性导致的内存授予相关BUG

原文:SQL Server 优化器特性导致的内存授予相关BUG 我们有时会遇到一些坑,要不填平,要不绕过.这里为大家介绍一个相关SQL Server优化器方面的特性导致内存授予的相关BUG,及相关解决方式,也顺便回答下邹建同学的相关疑问. 问题描述 一个简单的查询消耗了匪夷所思的内存.(邹建同学发现的) 原文链接 Code create table test_mem ( id int identity(1,1) primary key, itemid int not null, date dat

SQL Server优化器特性-隐式谓词

原文:SQL Server优化器特性-隐式谓词 我们都知道,一条SQL语句提交给优化器会产生相应的执行计划然后执行输出结果,但他的执行计划是如何产生的呢?这可能是关系型数据库最复杂的部分了.这里我为大家介绍一个有关SQL Server优化器的特性-隐式谓词,并简单介绍在此特性下如何根据场景控制优化器的行为. 在这里我通过一个简单的实例来给大家说明下. code CREATE TABLE T1 (A INT, B INT) CREATE TABLE T2 (A INT, B INT) set sh

SQL Server优化器特性-动态检索

前段时间我写的文章SQL Server 隐式转换引发的躺枪死锁 中有的朋友评论回复说在SQL2008R2测试时并未出现死锁,自己一测果然如此,因此给大家带来的疑惑表示抱歉,这里我就解释下其原因. 回顾:SQL2012中发生死锁的原因已经向大家解释了,因为隐式转换造成的表扫描扩大了锁规模.但在SQL2008R2中就未有同样的现象出现,很显然锁规模没有扩大,原因在于SQL Server的优化器为我们做了额外的事情-动态检索 动态检索:基于索引查找的优势,SQL Server(部分版本)会尝试将一些情

SQL Server 优化器+SQL 基础

http://www.cnblogs.com/shanksgao/tag/%E4%BC%98%E5%8C%96%E5%99%A8/ http://www.cnblogs.com/double-K/category/759248.html http://www.cnblogs.com/zhijianliutang/category/636063.html http://www.cnblogs.com/lonelyxmas/p/4685085.html       stack生成          

win10 升级导致找不到SQL Server配置管理器

1.背景 SQL Server配置管理器可用来管理与SQL Server相关联的服务.配置SQL Server使用的网络协议以及从SQL Server客户端计算机管理网络连接配置.但是win10从1709升级到1803,升级成功后发现SQL SERVER配置管理器找不到了,以为又是win10给我删除了文件,搜索了下发现有人与我同样的问题,解决方案如下. 2.解决方案 2.1.可以通过:计算机-->右键-->管理-->服务应用程序,但是我不太喜欢点击这么多次鼠标. 2.2.通过[运行]调出

SQL Server优化

虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决. 查询速度慢的原因很多,常见如下几种: 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) I/O吞吐量小,形成了瓶颈效应. 没有创建计算列导致查询不优化. 内存不足 网络速度慢 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) sp_lock, sp_who, 活动的用户查看,原因是读写竞争资源. 返回了不必要的行和列 查

SQL Server锁分区特性引发死锁解析

原文:SQL Server锁分区特性引发死锁解析 锁分区技术使得SQL Server可以更好地应对并发情形,但也有可能带来负面影响,这里通过实例为大家介绍,分析由于锁分区造成的死锁情形. 前段时间园友@JentleWang在我的博客锁分区提升并发,以及锁等待实例中问及锁分区的一些特性造成死锁的问题,这类死锁并不常见,我们在这里仔细分析下.不了解锁分区技术的朋友请先看下我的锁分区那篇实例. Code(执行测试脚本时请注意执行顺序,说明) 步骤1 创建测试数据 use tempdb go creat

22. SQL -- SQL Server 2005 和SQL Server 2008新特性

SQL SERVER 2005 与SQL SERVER 2008 新特性   SQLSERVER 2005 新特性 Enhanced Data Types:存储最大8K-2G Partitioned Table(分区表):数据拆分管理 背景:一个公司,有目前现存数据以及历史数据,各在一台SER 上,服务器访问方式: SQL 2000 TABLE 1:在一张table 中,对数据进行分区 Enhanced Indexing Features SER 1 SER 2 现存数据 TABLE 1 TAB

SQL Server优化50法

查询速度慢的原因很多,常见如下几种:    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)    2.I/O吞吐量小,形成了瓶颈效应.    3.没有创建计算列导致查询不优化.    4.内存不足    5.网络速度慢    6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)    7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)    8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.    9.返回了不必要的行和列