WEB开发网
开发学院数据库MSSQL Server SQL Server 2000内存管理内幕 阅读

SQL Server 2000内存管理内幕

 2007-05-19 09:40:34 来源:WEB开发网   
核心提示: 并不是说任何情况下AWE都比/3GB好,只是通常状况下是这样,SQL Server 2000内存管理内幕(6),比如说当你需要很多空间以分配内存,而又不能放在AWE内存中(例如象线程栈Thread Stacks、锁内存Lock Memory、存储过程计划Procedure Plans等),

并不是说任何情况下AWE都比/3GB好,只是通常状况下是这样。比如说当你需要很多空间以分配内存,而又不能放在AWE内存中(例如象线程栈Thread Stacks、锁内存Lock Memory、存储过程计划Procedure Plans等),你也许会发现/3GB更合适。

Memory Regions

SQL Server将分配的内存组织成两个独立的区域:BPool和MemToLeave。实际上如果你使用AWE模式,还有另外一个区域:在Windows AWE支持下可以存取的3GB以上的物理内存。

BPool在这三个区域中是比较突出的一个,它是SQL Server主要的分配池,主要用于数据和索引页的缓存,也用于小于8K的内存分配。MemToLeave包含user mode地址空间中BPool没有使用的那部分虚拟内存空间。3GB之上的AWE内存作为BPool的扩展,为数据和索引页缓存提供额外的空间。

当你启动SQL Server的时候,SQL Server基于机器的物理内存和user mode地址空间的大小计算BPool的上限。在计算出这个值后,MemToLeave区域被保留,这有利于防止BPool随后的预留造成内存碎片。接下来,BPool被保留,它可以分成多达32个独立预留块,用于满足在BPool保留时SQL Server进程中那些正在请求虚拟地址空间的dll及其它分配请求。在保留BPool区域之后,MemToLeave区域被释放。MemToLeave用于SQL Server内部超过8KB的连续空间分配请求,以及象OLEDB Provider、进程内COM对象等外部客户(指SQL Server主要引擎之外,驻留在SQL Server进程中的那些内存请求者)分配请求。

因此,一旦SQL Server启动,BPool就被保留,但未被提交,MemToLeave基本就是进程的虚拟内存地址空间中的空闲部分。如果你在SQL Server启动之后查看SQL Server进程的Virtual Bytes Perfmon计数器,你将发现它反映的是BPool的预留。我曾经看到人们因为这个数字经常很高而惊慌,毕竟,它通常是机器总的物理内存或者是最大user mode地址空间,减去MemToLeave区域大小。这没什么担心的,因为它仅仅是保留但没有提交的空间。之前提到过,保留的空间仅仅是一个地址空间,直到被提交时才会真正的和物理存储单元关联。在这些之后,被提交到BPool中的内存将会增加,直到达到SQL Server启动时计算出的BPool上限值。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:SQL Server 内存

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接