MYSQL网站制作之冲破oracle for win2K的2G内存限定
当然,或许这并不是我们拒绝MySQL的一个有说服力的MySQL学习教程,但是对于一些比较守旧的IT经理来说,在为一些关键业务选择平台的时候,平台的成熟性却是必须要考虑的一个因素,在这一点上,MySQL无疑毫无优势。oracle冲破oracleforwin2K的2G内存限定尽人皆知,在32位的操纵体系如win2K上,操纵体系能办理的内存为4GB(power(2,32)=4G),oracle利用的总内存有2G限定。今朝年夜多半信息体系都能为数据库服务器配上4G物理内存乃至更多,但不管你为体系设置多年夜的物理内存,一般情形下都不克不及使oracle利用凌驾2G的内存(包括SGA、PGA等),从而形成体系资本华侈。那末,有无甚么举措能使运转在windows体系上的oracle利用凌驾2G的内存呢?windows供应了一种叫4GT(4GTuning)的手艺,使得oracle利用凌驾2G(不凌驾3G)的内存成为大概。而为了让使用程序利用更年夜的内存,另有一种PSE36的手艺,可让oracle利用凌驾3G的内存。这里,只对我们利用4GT特征让oracle利用凌驾2G的内存举行会商。
一利用4GT特征的基础请求:
....只管能够在不凌驾2G物理内存的体系上利用4GT特征,但oracle其实不保举这类做法,由于这将会严峻下降体系功能。以我的履历来说,假如体系未安装4G物理内存,最好也不要利用这类办法来让oracle利用更多的内存。别的,在必要你的oracle利用凌驾2G的内存时,数据库服务器最好不要再运转其他的服务,以减小体系的压力,让oracle事情得更好。
....别的,据MS的文档,4GT只能用于AdvancedServer,Datacenter版本上,Server版和Professional版不克不及利用4GT特征(实践上是否是也没有需要?)
二为何4GT能让使用程序利用凌驾2G的内存
....在一般情形下,windows体系对内存的分派是如许的:在内存地点0x00000000到0x7FFFFFFF之间的空间,交给使用程序利用,操纵体系内核及其撑持则利用内存地点0x80000000到0xFFFFFFFF之间的空间。在利用4GT以后,操纵体系将内核及其撑持程序利用的内存地点空间紧缩到0xC0000000到0xFFFFFFFF之间,从而为使用程序“让”出来1G的空间。可是,仅仅“让”出来了这1G的空间仍是不敷的,还必要指定哪个使用程序来利用这“多出来的”1G空间,和怎样分派份额等。前面将分离详细的参数设置来会商。为便于会商,我们将一般情形下使用程序可使用的2G内存(即地点在0x00000000到0x7FFFFFFF之间的内存)称作一般内存,而将windows“让”出来的1G内存(地点在0x80000000到0xBFFFFFFF之间)称作直接内存。
三oracle利用凌驾2G内存,不凌驾3G内存的详细设置步骤:
1起首应卸载实例,封闭oracle服务。
2翻开操纵体系3G开关:
....修正boot.ini文件,在启动windows项中增加/3G参数。修正事后的boot.ini文件应当相似以下内容:
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)
multi(0)disk(0)rdisk(0)partition(1)="MicrosoftWindows2000AdvancedServer"/3G/fastdetect
注重在启动win2KAdvServer的一栏里,多了一个/3G参数。这个参数的感化,就是让windows启动时,将本人的内核及撑持程序装载到内存地点0xC0000000到0xFFFFFFFF之间,给使用程序留出3G的空间来。
3修正oralce的init.ora文件
..1)断定oracle的缓冲区及共享池巨细,假定作以下界说:
........db_block_size=4096
........db_block_buffers=262144#缓冲区巨细为1G
........share_pool_size=314572800#利用300M共享池
..2)增加以下各项内容:
........use_indirect_data_buffers=true
........#告知oracle可使用直接内存(便可以利用windows让出来的1G内存作为数据缓冲区)
........pre_page_sga=true
........#把oracleSGA锁定到内存中,不发生页面互换文件(8i的参数多是lock_sga=true)
........#关于一个有4G物理内存的体系来说,大概这一个参数并非必需的
4修正注册表,界说oracle的DBbuffer利用惯例内存巨细
....在注册表_Local_Machine中增加一个二进制值,称号为AWE_WINDOW_MEMORY,值的单元为字节,巨细为你必要让oracle利用一般内存作为缓存的巨细(不是windows让出来的1G,而是内存地点在0x00000000到0x7FFFFFFF之间的内存巨细)。假设设为209715200,即200M巨细,那末oracle的数据缓冲区将占用200M的一般内存,其他部分(1G-200M=824M)则利用直接内存。
5从头启动操纵体系,启动数据库。OK,你如今的oracle可使用2G+824M内存了。
四几个增补会商
1windows体系“让”出来的1G直接内存,只能用于数据缓冲区
....在4GT特征测试中发明,直接内存只能用于数据缓冲区,而不克不及用于共享池,也不克不及分派给用户作为PGA。也许有其他的参数能够界说,但我查到的文献中没有任何一篇讲直接内存能够用于哪些中央,而在我们的测试中发明按下面的修正后,直接内存只能用于数据缓冲区。此结论只作为一个履历,不是定论,请列位年夜侠增补修改。
2注册表中AWE_WINDOW_MEMORY参数巨细的界说
....这个参数界说缓冲池利用一般内存的巨细,不克不及太小。在数据块巨细为4K,缓冲池为1G(即便用262144个块作缓冲池)巨细的情形下,此参数界说为100M时,oracle不克不及启动,界说为200M时一般启动。依据我浏览文献后对这个情形的了解,数据缓冲区的每个块的块头信息都将寄存于一般内存中,不克不及寄存于直接内存中。假如此参数界说太小,招致缓冲区块头信息都不克不及寄存,则可招致数据库启动失利。那末,是否是一样巨细的缓冲区,数据库块越年夜,则这个参数就能够界说得越小,因此能够占用更少的一般内存呢?有待考证。
....在详细的使用中,怎样界说此参数,应综合思索最年夜并发毗连数(公用服务器形式下)、用户重用的仓库巨细、排序区、共享池、年夜池等外存参数的设置情形,尽量的将数据缓冲区放到直接内存中,充实使用体系的资本。
3直接内存的功能
....据oracle的文献讲,直接内存的功能(我想次要是指速率和效力吧?)不如间接内存,毫不保举在未安装有4G物理内存的体系上利用4GT特征。我不晓得怎样对照直接内存与间接内存的速率和效力,因此未作测试,临时信之。
....一点小结,希冀能对人人有所启示。还请列位年夜侠增补斧正。
以上内容的测试情况:
IBMX360+4G内存+RAID5阵列
Windows2000AdvacedServerSP3+oracle8.1.6公用服务器形式
DBaaS解决方案既可以解决这些问题,又能为客户节约资金。相反作为解决方案提供商,采用DBaaS模式似乎就并不那么有吸引力了,因为与企业内部署软件的解决方案相比,DBaaS意味着更低的利润。 也可谈一下你是怎么优化存储过程的? XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 所以你总能得到相应的升级版本,来满足你的需求。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
页:
[1]