欢迎来到天天文库
浏览记录
ID:9511776
大小:58.00 KB
页数:9页
时间:2018-05-02
《sql server 2000内存管理内幕--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、SQLServer2000内存管理内幕>> Introduction 在这篇专栏里,我们将从开发者的角度来探讨SQLServer内存管理内幕。就是说,我们将讨论SQLServer使用API和操作系统功能管理内存的方式及其工作原理。通过这种方式探讨一个产品,将有助于我们理解产品开发者的思路,以及他们所设计的使用方法。理解一个产品的工作原理和它的设计用途,是掌握这个产品的关键。 我们将从一些基础的emory 在x86系列处理器上,内存的系统上,每个应用程序都有一个4GB的虚拟内存地址空间--它不是真正的内存,但对应用程序来说可
2、以理解为内存。emoryTuning 3GB启动选项(emoryTuning。通常情况下,人们通过设置BOOT.INI文件的[OperatingSystems]部分,将系统配置为可以使用3GB或者不使用3GB启动,以使在系统启动时可以进行选择。 警告:你也可以在ode的空间。换句话说,你减小了kernalmode的空间但并没有获得任何好处。 注意:doe配置2.5G的空间,剩余的1.5G用于kernalmode。上面的警告信息在使用/USERVA选项时同样适用。 Large-Address-Aode的应用程序只能够对32位
3、指针的前31位表示的地址空间进行存取。对于剩下的1位,一些聪明的开发者不希望浪费进程空间里的这1个位,把它用于了其它的目的,例如用于标识那些应用程序特定的地址分配类型的指针。这在引入/3GB后带来一个难题,因为这种类型的应用程序无法区分引用2GB以上内存的指针,和那些引用2GB以下内存但是最高位由于其它原因而被设置的指针。基本上,使用/3GB启动机器,会使这样的应用程序崩溃。为了解决这个问题,微软在pBin、ImageCfg等可以分析可执行文件头的工具,查看应用程序是否启用了这个标识位。VisualC++通过/LARG1234下一
4、页>>>>这篇文章来自..,。EADDRESSAAGE_FILE_LARGE_ADDRESS_AemoryManagementUnit-MMU)仍然实现了页目录条目(PageDirectoryEntries-PDEs)和页表条目(PageTableEntries-PTEs),但是在这个之上有一个新的层级:页目录指针表(PageDirectoryPointerTable)。PAE模式下系统能够寻址更大的内存,因为PDEs和PTEs为64位宽,是之前标准宽度的两倍,而并不是通过PAE模式下的页目录指针表实现。页目录指针表把这些高存储容
5、量的表和索引管理起来。使用PAE模式需要一个特殊版本的apUserPhysicalPages或者MapUserPhysicalPagesScatterAPI函数,将需要存取的物理内存映射到这个虚拟内存窗口中。 on等,都无法显示各个进程Aode的地址空间,kernalmode地址空间也由2GB被压缩到1GB。对于kernalmode代码,完整2GB的工作空间已经显得狭窄,压缩这部分空间意味着某些内部核心结构也必须要压缩。这些结构中主要有机器上用于管理内存的表窗口(tableWindoode部分压缩到1GB后,这个表最大就只能管理
6、16GB的物理内存了。例如你在一台具有64GB物理内存的机器上运行Windows2000DataCenter,启动时使用了/3GB选项,你就只能够存取这台机器25%的内存,剩余的48BG将无法被操作系统和应用程序使用。AWE允许你访问超过3GB的内存,而通过/3GB,你仅仅为私有进程空间获得额外的1GB。LargeAddressAware自动透明的使得这个额外空间对应用程序可用,但它被限制在1GB之内。理论上,AWE通过Win32AWEAPI函数,使得所有对操作系统可用的物理内存对应用程序可用。尽管AWE更难于使用和存取,但它更具
7、弹性和扩展。 并不是说任何情况下AWE都比/3GB好,只是通常状况下是这样。比如说当你需要很多空间以分配内存,而又不能放在AWE内存中(例如象线程栈Th上一页1234下一页>>>>这篇文章来自..,。readStacks、锁内存LockMemory、存储过程计划ProcedurePlans等),你也许会发现/3GB更合适。 MemoryRegions SQLServer将分配的内存组织成两个独立的区域:BPool和MemToLeave。实际上如果你使用AemToLeave区域被保留,这有利于防止BPool随后的预留造成内存碎
8、片。接下来,BPool被保留,它可以分成多达32个独立预留块,用于满足在BPool保留时SQLServer进程中那些正在请求虚拟地址空间的dll及其它分配请求。在保留BPool区域之后,MemToLeave区域被释放。MemToLeave用于SQL
此文档下载收益归作者所有