如果对数据库的自动内存管理效果不满意,如何调整数据库的参数,比如Oracle的SGA/PGA/Data buffer/shared pool/java pool/large pool.
一般我们会把oracle实例的内存用到系统物理内存的80%-60%(4G以上内存用到80%以上,2G内存用到60%-70%)
s=pga+sga_max_size=80%memory(对于OLTP系统pga是sga的4分之1,如果是DSS,则可以各占一半)
db_cache_size=60%sga
shared_pool_size=sga_max_size-db_cache_size-160m也可以设置为35%sga左右
java_pool_size=64m
large_pool_size=16m
log_buffer=2m
当然如果您的物理内存比较大的话 下面几项都可以适当增加
收起我的经验是这样,
1)论证:是否需要保障某个关键场景的性能,要求这个关键场景的性能指标(比如事务的响应时间)到什么程度。如果需要保障,则进行调优(人为干预内存分配策略)
2)试跑:对于oracle内部的这些内存参数,首先采用自动内存管理的方式,跑一跑“关键”场景、峰值的压力,持续比较长的一段时间。在此过程中,打一份awr报告。看看awr报告中各个内存区域的大小是否有变化。
3)猜测:如果某一项的值(比如data buffer)从开始到结束,有明显的增加,说明可能是这一项大一些有助于提高这个关键场景的性能。
4)验证:把这一项的值,人工调大,测试验证是否有效果。
需要注意的是,如果数据库上支撑多个业务场景,这些场景并没有某个关键场景需要保障,则最好不做人为的内存分配。除非碰到了oracle的自动内存管理的bug。
收起