SQL Server资源管理之内存管理篇(上)

发表于:2011-2-28 10:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hjq19851202    来源:51Testing软件测试网采编

分享:

  分析Windows系统自身的内存使用情况的计数器:

  Memory:Cache Bytes:系统的Working Set,也就是Windows系统使用的物理内存数。

  对于每个进程的内存使用情况的计数器:

  Process:Private Bytes:进程提交的地址空间中非共享的部分。

  Process:Working Set:进程的地址空间中存放在物理内存中的那部分。

  从这些计数器中,我们可以看到系统中是否还有空闲内存,哪个进程使用的内存最多,在发生问题的时候是否有内存使用量突变等情况。这为接下来分析SQL Server的使用提供一个前提条件。

  二、SQL Server内部的内存管理

  1、内存使用分类

  按用途分类

  1)Database cache(数据页面)。SQL Server中的页面都是以8KB为一个页面存储的。当SQL Server需要用到某个页面时,它会将该页面读到内存中,使用完后会缓存在内存中。在内存没有压力的情况下,SQL Server不会将页面从内存中删除。如果SQL Server感觉到内存的压力时,会将最长时间没有使用的页面从内存中删除来空出内存。

  2)各类Consumer(功能组件)

  Connection的连接信息

  General:一组大杂烩。语句的编译、范式化、每个锁数据结构、事务上下文、表格和索引的元数据等

  Query Plan:语句和存储过程的执行计划。和Database cache类似,SQL Server也会将执行计划缓存以供将来使用,减少编译时间。

  Optimizer:生成执行计划的过程中消耗的内存。

  Utilities:像BCP、Log Manager、Backup等比较特殊的操作消耗的内存。

  3)线程内存:存放进程内每个线程的数据结构和相关信息消耗的内存,每个线程需0.5MB的内存。

  4)第三方代码消耗的内存:SQL Server的进程里,会运行一些非SQL Server自身的代码。例如:用户定义的CLR或Extended Stored Procedure代码。

  按申请方式分类

  1)预先Reserve一块大的内存,然后在使用的时候一块一块的Commit。Database Page是按这种方式申请的。

  2)直接用Commit方式申请的内存,成为Stolen方式。除了Database Page之外其他内存基本都是按这种方式申请的。

  按申请内存的大小分类

  1)申请小于等于8KB为一个单位的内存,这些内存称为Buffer Pool

  2)申请大于8KB为一个单位的内存,这些内存称为Multi-Page(或MemToLeave)

52/5<12345>
重磅发布,2022软件测试行业现状调查报告~

精彩评论

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号