SQL SERVER读书笔记:内存
系统先操作地址空间,真正要用的时候才申请物理内存,进行使用。
Reserved Memory 保留内存,虚拟内存
Commited Memory 提交内存,物理内存
【如何判断SQL SERVER 内存不足?】
如果进程的用户态CPU时间比较高,一般说明它没有遇到其他瓶颈,正全力运行。如果内存有瓶颈,一般用户态的CPU时间不会很高,但核心态的CPU时间反而升高,因为系统要做的paging动作(pages/sec计数器)。同时磁盘也会比较繁忙。但磁盘繁忙,而paging不忙,却不能说明内存不足。
process%pressor Time:用户态 + 核心态时间
【如何合理配置SQL SERVER内存】
1、为系统和其他应用程序预留足够的内存。如果可能,数据库服务器应该专供数据库使用
2、安装64位操作系统
3、给SQL SERVER启动账号 Lock pages inmemory的权限
用户修改数据之后,SQL SERVER会在内存中将数据所在页面修改,但不会立刻将这个页面写回硬盘,等到checkpoint 或 lazy write的时候集中处理。如果没有内存压力,则这些页面会一直留在内存中,不必再从硬盘上读取。
【内存使用分类】
一、按用途分
1、DataBase Cache:数据页面缓冲区
2、各类 Consumer
二、按申请方式分
1、DataBase ,先Reserve一大块,再一小块一小块地commit
2、stolen,直接commit
三、按申请大小分类
1、buffer pool,单位<=8kb
2、MemToLeave,单位>8kb
【内存分布及大小限制】
在32位
SQL SERVER可以用2GB的内存,其中默认384M是MemToLeave,而BufferPool = 2GB - 384M = 1.6G
为什么叫MemToLeave?是因为SQL SERVER刚启动的时候,就会把这一块虚拟地址预留出来。
如果开启了AWE,Buffer Pool里的DataBase Cache可以使用AWE扩展出来的内存,而Buffer Pool里的Stolen,则还是用原有的那份虚拟地址空间,最多可用满至1.6G而MemToLeave则不变。
【MemToLeave的使用情况】
SQL SERVER会先用默认的256M,用完了再看看预留给线程的那一块。
MemToLeave = 256 + 线程数 * 0.5 = 256 + 128 = 384M
64位
MemToLeave没有限制。有时候反而会挤占了DataBase Cache。
【增加MemToLeave】
加启动参数 -g 512
【增加内存一定会提高SQL SERVER的性能吗?】
不一定。主要看瓶颈在哪一部分。如果是Buffer Pool,32位系统中,DataBase Cache存在瓶颈,增加内存是对的,但如果是stolen欠缺,即使是应用了AWE,极限值也是1.6GB而已;如果是MemToLeave,就更有限制了,增加内存并无裨益。
【内存动态管理视图(DMV)】
DMV可用于监视SQL SERVER的内存情况,有些信息。使用性能监视器,DBCC语句等传统方法也能得到,但DMV更详细、准确。
【Lazy Writer】
惰性编写器。系统进程,用于成批刷新脏的老化得缓冲区,包括更改、写回磁盘,清理最久没有被重用到的数据页和执行计划。如果经常被触发,内存应该存在瓶颈。
【索引】
索引可以避免查询时将表的全部记录装入内存,从而节约内存使用量。
【stolen Memory】
stolen memory对sql server正常运行不可或缺,一条语句的分析、优化、执行计划缓存、排序、计算等,都需要用到stolen。
stolen不太会因为使用太多而侵占了DataBase Pages一来是因为它不太大,二来也会定期的清除,除非有游标不关,或内存泄露什么的。
【Multi_Page(MemToLeave)】
在32位的SQL SERVER上,Multi-Page的数目是有限制的,默认为384M,这个地址是预留的,Buffer Pool不能占用。
而在64位 SQL SERVER上,Multi-page没有限制,要多少有多少。所谓的MaxServerMemory是对Buffer Pool来讲的。
作用:
1、SQL SERVER 进程
2、超过8K的stolen内存
3、第三方、如CLR、Link Server、COM
如果其配额不足,会出现新用户很难登入SQL 的错误
SQL SERVER读书笔记:内存的更多相关文章
- SQL SERVER读书笔记:TempDB
每次SQL SERVER启动的时候,会重新创建. 用于 0.临时表 1.排序 2.连接(merge join,hash join) 3.行版本控制 临时表与表变量的区别: 1)表变量是存储在内存中的, ...
- SQL SERVER读书笔记:阻塞与死锁
阻塞是事务隔离带来的副作用,而并不是SQL SERVER的错. 死锁则是互相争用资源而引发.由于死锁会选择牺牲者,所以死锁的危害没有阻塞大.但有时为了解决死锁,会采取对资源加锁,导致阻塞的方式来避免.
- SQL SERVER读书笔记:执行计划
执行计划对性能影响甚大. 系统是怎么得出一个号的执行计划的?主要是依赖于准确的统计信息.统计信息准确的前提下,执行语句重用性高,可避免频繁编译,这也有助于提高性能. 但如果怀疑统计信息不够准确,可以强 ...
- SQL SERVER读书笔记:JOIN
nested loop join:适用于小数据集,有索引的情况.不占用内存,不用tempdb. merge join:大数据,要排序,多对多,用tempdb: hash join:对大数据集,少用户使 ...
- SQL SERVER读书笔记:nolock
让查询语句不去申请共享锁,从而消除死锁,效果立竿见影. 缺点: 1.脏读 2.只能解决共享锁(S锁)参与的问题 3.需要修改语句本身才能使用
- SQL SERVER 读书笔记:非聚集索引
对于有聚集索引的表,数据存储在聚集索引的叶子节点,而非聚集索引则存储 索引键值 和 聚集索引键值.对于非聚集索引,如果查找的字段没有包含在索引键值,则还要根据聚集索引键值来查找详细数据,此谓 Book ...
- 《Troubleshooting SQL Server》读书笔记-内存管理
自调整的数据库引擎(Self-tuning Database Engine) 长期以来,微软都致力于自调整(Self-Tuning)的SQL Server数据库引擎,用以降低产品的总拥有成本.从SQL ...
- 释放SQL Server占用的内存
由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多时候,我们会发现运行Sql Server ...
- delphi 精要-读书笔记(内存分配释放)
delphi 精要-读书笔记(内存分配释放) 1.内存分为三个区域:全局变量区,栈区,堆区 全局变量区:专门存放全局变量 栈区:分配在栈上的变量可被栈管理器自动释放 堆区:堆上的变量内存必须人 ...
随机推荐
- BZOJ 4332 FFT+快速幂
思路: 最裸的方程:f[i][j]=Σf[i-1][j-k]*F[k] 诶呦 这不是卷积嘛 f[i]就可以用f[i-1]卷F 求到 但是这样还是很慢 设p[i] 为Σ f[j](1<=j< ...
- File入门及路径名问题
package com.io.file; import java.io.File; /** * @author 王恒 * @datetime 2017年4月20日 下午2:53:29 * @descr ...
- 使用GetInvocationList对委托链进行更多的控制
委托链中所有项都会被调用,因为委托类型的 Invoke 方法包含了对数组中的所有项进行遍历的代码.这是一个很简单的算法.尽管这个简单的算法足以应付很多情形,但也有它的局限性.例如,除了最后一个返回值, ...
- PHP 框架Laravel Eloquent 实现身份验证
PHP自从5.3后似乎又热度又回升, 最近了解了一下PHP框架之一Laravel, 最近最新的版本已经是4.3 基本的结构这里不讲, 要了解可以在这里看文档 http://v4.golaravel. ...
- 如何在Eclipse中创建Web服务器
使用Eclipse开发Web项目时,需要先配置Web服务器,如果已经配置好Web服务器,就不需要再重新配置了.也就是说,本节的内容不是开发每个项目时,都必须经过的步骤.创建Web服务器的具体步骤如下: ...
- 终极解决VS2015 安装失败问题,如 安装包损坏或丢失
1.去微软官网下载完成ISO镜像,最好不要在线安装, 打开官方链接 https://www.visualstudio.com/zh-cn/downloads/download-visual-studi ...
- 安装rails卡住很慢 出现302 Moved Temporarily
在MAC上安装rails的时候,使用命令$ gem install rails 发现一直没响应,使用$ gem install rails-V命令发现,安装会在中间卡住,出现302 Moved Tem ...
- webSphere
WebSphere 是 IBM 的软件平台.它包含了编写.运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台.跨产品解决方案所需要的整个中间件基础设施,如服务器.服务和工具.WebSphe ...
- Ubuntu 更换阿里源
查看新版本信息 lsb_release -c Ubuntu 12.04 (LTS)代号为precise. Ubuntu 14.04 (LTS)代号为trusty. Ubuntu 15.04 代号为vi ...
- class path resource [processes/] cannot be resolved to URL because it does not exist
springboot整合activiti时报以下错误,原因是项目启动时检查流程文件 nested exception is java.io.FileNotFoundException: class p ...