各位,我有这样一个问题,我有几个表,总数据为300M,机器内存为1G。
现在我想将这几个表缓存到内存中,使用这几个表时从内存中读取而不是从硬盘。
同时我也不想操作系统给我放到虚拟内存中(如果无法实现这点也没有关系)。
我该如何配置表属性和数据库参数?
系统为:Windows2000 Server+Oracle 8.1.6

解决方案 »

  1.   

    300M的表放在缓存算是大表了。不合适吧!
    不过可以试一下/alter table x cache;sga约等于1/2的物理内存。
      

  2.   

    缓存表:
    alter table x cache 只是将表被访问的块放在MRU中,还是会被替换出去,只是保留的时间长一些。(nocache的时候放在LRU中,很快被替换).
    将表放在keep pool中,保证表永远在内存中:
      1.在初始化文件设置keep pool
        DB_KEEP_CACHE_SIZE = <size of KEEP pool>
      2.修改表存储参数,使其缓存在keep pool 中
        ALTER TABLE <TABLE NAME> STORAGE (BUFFER_POOL Keep)
       
    不让oracle使用虚拟内存: 
      初始化文件设置:
        lock_sga=true
        (防止OS对oracle的内存进行换页操作)