公司用到的数据库是Oracle.
在设置Oracle内存之前,先复习下有关SGA的知识。
1、sga_max_size、sga_target
SGA_MAX_SIZE指的是可动态分配的最大值﹐而SGA_TARGET是当前已分配的最大sga。
SGA_TARGET是自动管理内存时使用的,这样就不用设置DB_CACHE_SIZE,SHARED_POOL_SIZE等参数,他们会根据需要自动的进行调整的。
SGA_MAX_SIZE是从oracle9i以来一直存在﹐是不可动态修改的。
SGA_TARGET是oracle10g中用于实现自动SGA内存管理而新增加的。
SGA_MAX_SIZE是不可以动态修改的﹔而SGA_TARGET是可动态修改﹐直到等于SGA_MAX_SIZE的值(当然这是在实例启动前已设SGA_MAX_SIZE>SGA_TARGET的情况) 如果在实例启动时﹐SGA_MAX_SIZE < SGA_TARGET 或SGA_MAX_SIZE没设定﹐则启动后SGA_MAX_SIZE的值会等于SGA_TARGET的值。
2、使用SGA_TARGET参数自动管理SGA
在Oracle10g中,不必再如从前一样用下列各个参数分别指定SGA的每个部分的大小.也就是说不需要首先评估SGA各组件的大小,并且在init<SID>.ora初始参数文件中分组件指定.(当然某些组件如果不使用是可以不指定的.比如java_pool_size).
shared_pool_size
java_pool_size
large_pool_size
db_cache_size
在10g中可用一个新参数SGA_TARGET来设定实列所需的SGA最大值,并替代以上参数.假设,将SGA_TARGET设置为152M,则表明SGA最大为152M. 所有SGA组件如shared pool, buffer cache,large pool, java pool都需从其中分配. Oracle会自动为各组件指定初始值,并在运行过程中动态地调整各组件的大小.毋须人工干预.
这样,只要设置了SGA_TARGET, 就毋须显式地定义shared pool,buffer pool,large pool和java pool的大小.
有两点需要注意:
1. 当使用sga_target时, 若未设置sga_max_size,或设置了小于sga_target,则sga_max_size将等于sga_target.
2. 当sga_target是可动态调整的,但其值不能大于sga_max_size.
复习完SGA,下面开始进入正题,因为需要,在本机上跑Oracle数据库,下载精简版OracleXE,当安装完之后占用的内存比还是觉得较大。加上eclipse,webloic服务器,跑起来实在吃力,于是那Oracle数据库开刀,因为开发模式下,类似mysql这个的数据库就够了。调整Oracle的内存。
show parameter sga; ALTER SYSTEM SET sga_target = 81m;
经过测试,发现sga调整为81m,再小点70m,就报错误了。然后再重新启动实例。
shutdown immediate; startup; --或 startup force;
至此,启动Oracle数据库占用的内存不超过100M了。。。