给数据库分配的内存,在topas当中看,是属于计算内存,从内存栈分类上来说是共享内存。如果给数据库分配XX GB内存,那么数据库使用的内存不含超过这个限制。但至于这些内存够不够用,就要看业务系统是否能够接受当前的响应时间等性能指标,能接受就是内存够用。
如果想知道扩大内存后能起到什么效果(SQL的响应时间方面),最好的方法还是扩大内存实测一把。
另外,也可以打出awr报告,查看SGA advisor,PGA advisor等分析建议,awr会给出,当内存配置达到多少时,物理IO能够减少多少。这样能有一个大致的判断。
举几个内存大小对业务响应时间影响的例子。
相同的应用、相同的业务压力(TPS)、相同的CPU等硬件资源的配置,仅仅是内存有差异 64G VS 128G。对比sql查询的响应时间指标(单位:秒)(Oracle内部的SGA PGA等内存参数采用自动分配策略)
不采用In-Memory特性 64G 128G
批量查询1 4.2 1.4
批量查询2 0.53 0.18
批量查询3 12.3 2.6
采用In-Memory特性 64G 128G
批量查询1 0.185 0.08
批量查询2 0.329 0.146
批量查询3 1.907 0.601
另外,在数据库总内存不变的情况下,调节各个内存区域的大小,有时会有惊喜,但一般来讲,oracle11g之后自动内存管理已成为主流,手工设定的参数可能在某个场景下比较快,但换一个场景就可能很差,不如让Oracle自动来做这件事。除非遇到自动内存管理的某个bug。