一.主要作用
从Oracle官方文档中看来,CACHEMGR参数主要用于控制存放未提交事务的虚拟内存(virtual memory应该是指的swap/paging space空间)和临时磁盘空间。所有的数据存放在叫做global cache(在报告中显示的是super pool)的虚拟内存池中,当数据库接收到commit/rollback之后这些cache里面的内容才会写到trail文件中。global cache中包含以下子虚拟池(详细内容见统计内容分析):
每个sub-pool中都有用于存放事务信息的buffer,原话:Within each sub-pool, individual buffers are allocated from the globalcache. Each buffer contains information that is relative to a transaction that is being processed by Oracle GoldenGate.1).一个虚拟池用于存放BLOB等大对象的池子;2).每个log reader thread一个虚拟池用于存放其他事务数据.
二.特点
官方文档中 多次提到进程使用的内存不是由OGG自己控制的,而是由操作系统进行控制的,它具有的特点和和限制有:
1).Goldengate的cache manager是内部自动控制和调整的,一般不需要人为调整;2).Goldengate合理调用操作系统内存管理函数,尽量回收old buffer而不将内存page out到磁盘,如果必须要page out的时候也将很少用到的buffer交换到磁盘;3).Goldengate只会在soft limit(cachesize)内按需划分虚拟内存( 不会划分物理内存, 但是实际测试效果是消耗的物理内存,所以想控制GG消耗的内存可以从此入手),且System calls to increase the cache size are made only as a last resort and, when used, are always followed by the release of virtual memory back to the system(意思:提升cache size往往是最终的一种手段,并且在用完之后会及时还到操作系统)。4).如果系统层面有相关的资源限制,cachemgr设置的值同样会受到系统配置的限制;5). GG中page out的规则是:当使用的CACHE超过CACHESIZE时会将超过CACHEPAGEOUTSIZE的事务调换到磁盘,但是当这些事务都被调到磁盘后CACHE使用量还超过CACHESIZEMAX的话,其他任何需要继续申请资源的事务都会调到磁盘。只有当CACHESIZE掉到比CACHESIZEMAX小之后CACHEPAGEOUTSIZE才生效。
三.如何计算所需虚拟内存
计算前我们需要查看goldengate的report文件,检查系统当前运行的报告用于作为计算所需虚拟内存的参考。但是从实际上来看,在未设置CACHEMGR参数时所获取到的值是基于操作系统总资源的一个固定值,不具有参考价值。例如:
某客户的ext进程的rpt文件CACHEMGR virtual memory values (may have been adjusted)
CACHESIZE: 64G(实际系统内存就120GB,cache可用的软限制)
CACHEPAGEOUTSIZE (normal): 8M(当实际CACHE超过CACHESIZE时超过8M的事务会在需要page out到磁盘时优先被page out)
PROCESS VM AVAIL FROM OS (min): 128G(进程可从OS获取的最大VM,系统内存和SWAP经过一定计算后获取)
CACHESIZEMAX (strict force to disk): 96G(由CACHESIZE和PROCESS VM AVAIL FROM OS计算得来的,表示CACHE中最多存放的事务数据量,超过该值则所有申请空间事务写到tmp文件)
同一GG实例上datapump进程的rpt文件CACHEMGR virtual memory values (may have been adjusted)
CACHEBUFFERSIZE: 64K
CACHESIZE: 8G
CACHEBUFFERSIZE (soft max): 4M
CACHEPAGEOUTSIZE (normal): 4M
PROCESS VM AVAIL FROM OS (min): 16G
CACHESIZEMAX (strict force to disk): 13.99G