深入SQL SERVER 2000的内存管理机制(三)
2007-11-11 07:36:53 来源:WEB开发网内存管理者
当SERVER运行时,内存管理者检查物理内存的剩余有效容量,以保证WINDOWS和其他的应用程序可以可以平稳的运行.这个有效内存的大小在4MB和10MB直接变化.(在WINDOWS 2003中更接近10MB)并且这个基于系统内核加载和Bpool (缓冲池区)中的页生命周期.如果SERVER上的有效物理内存空间在这个阀值以下,SERVER会减少提交Bpool (缓冲池区)页来收缩内存物理存储的使用(假设动态内存分配是激活的).内存管理者也保证提交的内存页在指定的时间点后空闲,这样在接受到一个新的分配请求时,就不再需要等待内存分配.通过”空闲”,我的意思是:内存页提交后,但没有被使用.没有使用的提交Bpool (缓冲池区)页可以通过一个空闲页清单来跟踪.这样所有得新得页都来自空闲页清单, 内存管理者从Bpool (缓冲池区)预留区提交更多得页直到全部得预留区被提交.你看:Process:Private Bytes Perfmon 计数器缓慢增长(通常是成直线的)就是这个原因.
在多CPU系统中,没一个都有自己单独的空闲页清单,当一个空闲页被要求响应一个应用程序的请求,首先在当前的CPU的空闲页清单中满足分配的空间被检查,然后是其他CPU的空闲页清单.这样更好的利用每个处理器的本地缓存,提高了在多处理器的SERVER上提高稳定性.你可以通过sql server(WINDOWS平台上强大的数据库平台):Buffer Partition Perform对象监视指定的Bpool (缓冲池区)区,你可以可以通过sql server(WINDOWS平台上强大的数据库平台):Buffer Manager\Free Pages Perform计数器监视所有的Bpool (缓冲池区)区.
因此在sql server(WINDOWS平台上强大的数据库平台)整个运行过程中,sql server(WINDOWS平台上强大的数据库平台)的内存处理器(无论内存线程管理器或同其他的线程服务)监视系统的内存使用状态,确认合理的剩余空闲物理内存的数量给其他的系统和预留合理的空闲页响应新的内存请求.当SERVER使用AWE内存,有些内存状态必需改变. Bpool (缓冲池区)区开始通过SERVER的物理内存中获得和锁定内存,内存锁的数量的变化是根据服务器最大内存是否设置了.如果配置了, Bpool (缓冲池区)区试图根据最大的服务器内存锁住相应数量的内存.如果没有配置, Bpool (缓冲池区)区会锁住接近128MB内存的所有物理内存,只有少量的区域留给其他处理.然后Bpool (缓冲池区)区使用高于3G的物理内存(AWE内存)用作运行数据和索引的页文件. Bpool (缓冲池区)区根据需要映射物理内存和虚拟内存,因此可以被32位的指针引用.
概述
你已经知道了:sql server(WINDOWS平台上强大的数据库平台)内存管理器是一个难点.理解一个程序是如何分配和管理内存是了解一个程序如何工作的基础.内存是非常重要的资源,它的有效利用是一个可靠应用程序设计的基本因素,懂得一个应用程序内存管理机制会是你的程序设计如虎添翼.
一个开发者,他是如何影响你呢?理解SERVER的内存管理机制赋予你如何写一个高效的应用程序和解决一些和内存相关联问题的洞察力. 比如说,在一个提高客户端连接速度的调试中,你提高sql server(WINDOWS平台上强大的数据库平台)的默认网络包的大小为8K., 立即,sql server(WINDOWS平台上强大的数据库平台)立刻开始在ERROR LOG中写错误信息,提示预留虚拟内存在MemToLeave (内存释放区)区有问题.在看到这样的信息后你立刻会知道这个改变至少是问题的一部分,因为你知道分配8K或更多的内存是在MemToLeave (内存释放区)区. 这样sql server(WINDOWS平台上强大的数据库平台)连接相关联的缓存也是来自这个区域,因为你已经配置网络包的大小太高了.配置默认的网络包适合于.NET framework的SQLClinet Provider 8KB.这种情况并不象听起来那么合理.实际上,这是非常常见的问题,由于MemToLeave (内存释放区)缺乏内存空间而引起的,因为网络包的大小太大,至少有些部分是这样的.
同时,了解sql server(WINDOWS平台上强大的数据库平台)划分内存的方法可以帮助你了解你定制在sql server(WINDOWS平台上强大的数据库平台)中运行的代码是否在系统资源的临界值,比如数据缓存. 比如说,你建立一个扩展存储过程调用SRV_PRO()函数来分配内存.假设,暂时你代码中分配的缓存小于8KB.根据我们前面的讨论,我们知道扩展存储过程是从Bpool (缓冲池区)来分配内存.—可以用作数据缓存.
了解sql server(WINDOWS平台上强大的数据库平台)是如何管理内存的,可以帮助我们按大小排列系统的开始顺序.这可以帮助你计算你所需的物理内存的数量和如何分配和分区给sql server(WINDOWS平台上强大的数据库平台).比如:良好的理解AWE内存分配和应用程序的内存调整的相对的优势和缺点,可以帮助确定你的服务器是否需要超过3GB的物理内存和是否需要在启动时加/3GB的参数.
构思和配置sql server(WINDOWS平台上强大的数据库平台)的内存管理机制有一个主要的冲突在于构思和配置在sql server(WINDOWS平台上强大的数据库平台)上运行的应用程序,了解SERVER是如何运行的可以帮助你设计,建立和测试基于sql server(WINDOWS平台上强大的数据库平台)的应用程序.
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接