设为首页 收藏本站
查看: 535|回复: 0

[经验分享] SQL SERVER读书笔记:内存

[复制链接]

尚未签到

发表于 2016-10-30 01:26:36 | 显示全部楼层 |阅读模式
  系统先操作地址空间,真正要用的时候才申请物理内存,进行使用。
  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 的错误
  

  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-292931-1-1.html 上篇帖子: SQL Server 2005启用sa账号 下篇帖子: sql server 2005 的pagesize
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表