再见西城 发表于 2015-1-16 22:24:51

MSSQL编程:深切SQL SERVER 2000的内存办理机制(二...

闪回的目的是要让数据库在commit之后,还能恢复到之前的某个状态,整库或指定的表。server
深切SQLSERVER2000的内存办理机制(二)





http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnsqldev/html/sqldev_01262004.asp



可会见年夜地点的使用(Large-Address-AwareExecutables)

在Windows增添撑持/3GB参数之前,一个使用程序是没法会见一个带有高位设置的指针.一个32位的指针只要前31位地点空间能够被用户形式的使用程序会见.这残剩的一名不必.因而有一些伶俐的开辟者由于其他的目标不肯意在处置内存地点空间时华侈这一名.(举例来讲:能够用来标记一个指针援用别的使用程序分派的数据范例).如许就/3GB参数就碰到一个困难,由于这类范例的程序不克不及便利的辨别一个正当的指针援用的内存空间在2G的分界限以上与一个内存地点空间在2G以下,但它的高位已被用做它用的指针.基础上假如一台呆板用/3GB的参数启动,这类使用程序是没法运转的.为办理这类情况,微软在WIN32的PE文件Characteristics字段增添了一个新的标记位来暗示一个程序是不是运转在可会见年夜地点的(Large-Address-AwareExecutables)形式.当该标记位被升引(IMAGE_FILE_LARGE_ADDRESS_AWARE),该可实行文件头部Characteristics字段的32位被置位.经由过程这个可实行文件头部的标记位,使用程序能够表示WINDOWS它能够处置带有高位设置的指针,如许就不会带来任何非常了局.当该标记被置位而且撑持这类体例启动的Windows也是经由过程/3GB的参数启动,这时候操纵体系会供应一向扩大的公有用户形式的地点空间给使用程序.你能够经由过程工具,好比:DumpBin和ImageCfg(转储可实行文件的头部)来反省一个可实行文件的该标记位.VisualC++经由过程/LARGEADDRESSAWARE毗连器开关来暗示IMAGE_FILE_LARGE_ADDRESS_AWARE,SQLSERVR已将该标记位激活,以是你能够在撑持/3GB参数的Windows版本中利用该参数,如许操纵体系回主动扩大SQLSERVER的用户内存空间.

正文:Windows在可实行文件启动时反省IMAGE_FILE_LARGE_ADDRESS_AWARE标记位,但疏忽DLL文件.DLL代码必需主动处置高位被置位的指针。



物理内存扩大

Intel处置器自从PentiumPRO入手下手,今后的处置器都撑持一种物理内存扩大(PAE)的内存映照形式。PAE形式供应了能够会见64GB的物理内存空间。在PAE形式中,内存办理单位(MemoryManagementUnit(MMU))仍旧实行:页目次出口pagedirectoryentries(PDEs)和页表出口pagetableentries(PTEs),可是在此之上有一个新的级别:页目次指针表。同时,在PAE形式PDEs和PTEs是64位的(不单单是尺度的32位),如许体系能够映照比尺度转换更多的内存空间,由于PDEs和PTEs形式的寻址宽度是尺度的2倍。这其实不仅仅是增添了页目次指针表。页目次指针表被用来办理这些年夜容量表和索引。一些特别版本的Windows内核必要运转在PAE形式。这中内核集成在Windows2000和今后的版本中,在单处置器的呆板中表现在Ntkrnlpa.exe文件中,在多处置器的呆板中表现在Ntkrnlpamp.exe文件中。你能够向增添/3GB和/USERVA参数一样在BOOT.INI文件中加/PAE参数激活PAE形式。



地点窗口扩大

Windows的地点窗口扩大(AWE)机制能够同意使用程序会见凌驾4GB的物理内存。一个32位的指针是一个整数,只能保留0x00000000到0xFFFFFFFF的值,就是说能够援用4GB之内线性的内存地点空间,AWE同意一个使用程序绕过这些限定,经由过程操纵体系会见一切的内存空间。

从观点上说,AWE并非一个新的事物。在盘算机开展之初,操纵体系和使用程序已利用类似的机制躲避指针的限定。比方:我们发展到DOS年月,32位扩大功效被常常用来同意一个16位的程序会见他自已之外的内存地点空间。一些特别目标办理者和API常常利用扩大内存和扩大内存。你大概记得如许一个好久之前产物QuarterdeckQEMM-386常常用来做如许的事变。典范的机制是同意一个指针能够会见凌驾自己限定的空间,(好比:地点太年夜没法在本人的指针中)经由过程在能够会见的地点空间分派一个窗口或地区来和自己没法会见的内存地点之间传送指针。AWE的事情道理:你能够在能够会见的地点空间供应一块地区(窗口)作为分段传输区,来传送在用户内存空间没法会见的内存地点。

为了利用AWE,一个使用程序必要:

1.分派的物理内存地点能够经由过程AllocateUserPhysicalPagesAPI函数会见。这个函数必要挪用者有LockPagesinMemory的权限。

2.在能够会见的内存空间创建一块地区。经由过程VirtualAllocAPI函数能够作为映照一个物理内存的映照窗口。

3.经由过程MapUserPhysicalPages或MapUserPhysicalPagesScatterWIN32API函数完成物理内存和假造内存的映照。

AWE已存在于一切的Windows2000和今后的操纵体系中,乃至能够用于物理内存低于2GB的操纵体系中,最典范的使用是在2GB或以上物理内存的呆板上,由于这是一个32位处置器会见3GB以下内存空间的独一办法。假如你在一个低于3GB物理内存的SQLServer体系中激活AWE撑持,体系将疏忽这个选项同时转换为假造内存办理器取代。AWE内存有一个风趣的特性就是从反面磁盘互换数据。你大概注重到独有的AWEAPI程序援用能够会见的内存空间是作为物理内存会见。这点切实的说就是:AWE内存是反面体系的假造页面文件交互物理内存空间。

假造内存窗口被用来缓存AWE读写会见物理内存的哀求。因而,当你设置这个窗口是PAGE_READWRITE独一能够回护的特性就是转嫁给了VirtualAllocAPI函数。不要惊异,这也意味你不克不及用VirtualProtectAPI函数来回护这块内存地区的修正和会见。

正文:还没有专门的工具用来查询拜访使用程序AWE内存利用(义务办理器,功能监督器和监督体系等等),显现每个程序AWE内存的利用数目。如许就没有每一个程序利用AWE内存数目的轨迹,同时这些内存也没包含在每一个的程序的事情内存会合。



/3GB和AWE对照

增添用户程序地点空间的才能几近有50%的使用程序是经由过程内存调剂,这是在Windows内存办理机制傍边十分快速和受接待的手腕。并且WindowsAWE内存机制也长短常天真和不乱的。就像我后面所说的,当你增添1G的用户内存空间,这些内存是经由过程削减中心内存空间取得的(从2G减到1G)。由于中心代码的运转对全部内存空间来讲是很局促的一块即便用于2G的空间,压缩这些内存空间意味着外部中心架构也会压缩。个中最主要的是windows用来办理物理内存的表,当你压缩中心内存空间到1G,你就限定了这个表的巨细,如许只能办理最年夜16GB的物理内存。比方:假如你的使用程序运转在有64GB物理内存的SERVER上而且你在启动时加了/3GB的参数。你只能会见全部内存的25%的空间―其他的48GB的内存空间不管时操纵体系仍是使用程序都没法会见。AWE能够同意你会见比加/3GB参数更高的内存空间。明显,你经由过程/3GB的参数只是增添了1GB的用户内存空间,这些增添的内存空间只是对那些年夜地点主动取得的使用程序无效,可是只要1GB。和/3GB参数对照,AWE可使全部的物理内存对操纵体系无效和对利用AWEWIN32API的使用程序无效。因而,AWE利用和操纵起来加倍庞大,也加倍天真和可扩大。

着并非说/3GB比AWE更好是不存在的-不外这的确存在,好比:假如你必要分派更多的内存空间,但不克不及在AWE平分配(线程仓库,内存锁,历程企图),你大概发明/3GB回更好一些。
一个语句分成两个event(实际上不止,其他可以忽略),一个table_mapevent和一个Rows_log_event。Table_mapevent是一样的,主要看Rows_log_event。

蒙在股里 发表于 2015-1-19 11:02:57

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

只想知道 发表于 2015-1-27 23:56:52

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。

若天明 发表于 2015-2-5 14:30:04

所以你总能得到相应的升级版本,来满足你的需求。

精灵巫婆 发表于 2015-2-12 06:54:23

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

冷月葬花魂 发表于 2015-3-2 23:52:55

大家注意一点。如下面的例子:

变相怪杰 发表于 2015-3-11 07:47:44

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

兰色精灵 发表于 2015-3-17 23:16:21

也可谈一下你是怎么优化存储过程的?

不帅 发表于 2015-3-25 07:42:37

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
页: [1]
查看完整版本: MSSQL编程:深切SQL SERVER 2000的内存办理机制(二...