初始建库SGA该设多大、PGA该设多大的建议

时间:2022-04-03 04:51:52

1.背景情况

非常多新业务系统上线,大部分DBA也不懂业务。就闷着头建库,SGA值设多大,PGA设多大,随便指定一个值就得了,执行一段时间后,或许就由于这个值是随便指定的。比如SGA+PGA大于总物理内存,SGA值或PGA值太小等等,造成DOWN机或性能低下的情况,屡见不鲜。

事实上,SGA初始设置多大,PGA初始设置多大,在OLTP系统上该怎么设,在OLAP系统上又该怎么设。ORACLE是有说法的。

2.ORACLE实例总占用内存规划

2.1以下是ORACLE官方的建议

Assume that an Oracle database
instance
is configured to run on a system with 4 GB of physical memory. Part of that memory should be left for the operating system and other non-Oracle applications running on the same hardware system. You might decide to dedicate only 80% (3.2 GB) of
the available memory to the Oracle database instance.

2.2含义理解:

如果执行ORACLE数据库的机器上。在不考虑执行其他特殊程序的情况下。以及如果仅仅执行一个实例的情况下。能够将总物理内存的80%分配给数据库实例使用,比如总物理内存为4GB。那就能够为数据库配置3.2GB内存(SGA+PGA)

3.SGA和PGA初始值究竟该设置成多大

3.1以下是ORACLE官方的建议

For OLTP systems, the PGA memory typically accounts for a small fraction of the total memory available (for example, 20%), leaving 80% for
the SGA.

For DSS systems running large, memory-intensive queries, PGA memory can typically use up to 70% of the available memory.

Oracle recommends initially dedicating 50% of the available memory to the PGA, and 50% to the SGA. Therefore, the initial value of the PGA_AGGREGATE_TARGET parameter for a DSS system can be calculated as:

3.2含义理解

(1)对于OLTP系统。SGA占数据库使用总内存的80%,PGA占数据库使用内存的20%(比如总物理内存4GB,PGA则须要占用约655MB)

(2)对于OLAP(DSS)系统,对于密集大查询的系统,PGA能够占到数据库使用总内存的70%(比如总物理内存4GB。PGA则须要占用约2.2GB(2.24GB),建议最初设置数据库使用总内存的50%

3.3建议计算公式

(1)OLTP系统:

SGA_TARGET = (total_mem * 0.8) * 0.8

PGA_AGGREGATE_TARGET=(total_mem * 0.8) * 0.2

(2)OLAP(DSS)系统:

SGA_TARGET= (total_mem * 0.8) * 0.5

PGA_AGGREGATE_TARGET =(total_mem * 0.8) * 0.5

4.上线后调整值參考

上面的一切初始建议值,都是在上线前的最佳配置建议值,在上线执行一段时间后,系统执行特性真面目就慢慢的体现出来了,这时,就应该依据执行实际需求及时的调整SGA_TARGET与PGA_AGGREGATE_TARGET的值了。

SGA_TARGET的实际需求建议值。能够參考V$SGA_TARGET_ADVICE

PGA_AGGREGATE_TARGET的实际需求建议值。能够參考V$PGA_TARGET_ADVICE视图

本文作者:黎俊杰(网名:踩点),从事”系统架构、操作系统、存储设备、数据库、中间件、应用程序“六个层面系统性的性能优化工作

欢迎增加 系统性能优化专业群。共同探讨性能优化技术。群号:258187244