De acordo com
a documentação oficial da Oracle, o parâmetro PGA_AGGREGATE_LIMIT é setado como default para o maior valor entre:
- 2 GB (valor default)
- 200% do valor do parâmetro PGA_AGGREGATE_TARGET
- 3 MB multiplicado pelo valor do
parâmetro PROCESSES
Este
parâmetro deve ser menor que o seguinte cálculo:
- Menor que 1.2 X RAM – SGA
Devido a um
problema de interpretação da documentação, alguns DBAs pensavam que o parâmetro
pga_aggregate_target era o limite
máximo de PGA que o banco iria utilizar, mas isso é incorreto.
Também existe
o parâmetro _pga_max_size (parâmetro
oculto) que podia ser usado para limitar a memória de um processo. Mas além de
não limitar da forma esperada, não deve ser utilizado sem a ajuda do suporte da
Oracle.
Antes de
existir o parâmetro PGA_AGGREGATE_LIMIT ,
o banco de dados podia exceder a quantidade real de RAM, causando erros de paginação
e até mesmo RAC node eviction.
O
parâmetro PGA_AGGREGATE_LIMIT é
dinâmico, com isso não é necessário reiniciar o banco de dados ao fazer uma
alteração.
Alguns
detalhes importantes:
- A Oracle não recomendar setar esse
valor abaixo do default
- Se o valor setado for 0, não existirá
limite para utilização de PGA
- O Oracle Database tratará as queries
paralelas como uma única unidade
Verificando o
valor default:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 2G
pga_aggregate_target big integer 100M
Alterando o valor
do parâmetro processes, para
verificar como fica o PGA_AGGREGATE_LIMIT:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 300
SQL> alter system set processes=1000 scope=spfile;
System altered.
Após
alteração do parâmetro processes é
necessário reiniciar o banco de dados.
Verificando o
Alert.log:
Using default pga_aggregate_limit of 3000 MB
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 3G
Tentando
diminuir o valor do parâmetro PGA_AGGREGATE_LIMIT, para um valor menor que o permitido:
SQL> alter system set pga_aggregate_limit=100m; alter system set pga_aggregate_limit=100m * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-00093: pga_aggregate_limit must be between 2048M and 100000G Lembrando que é possível diminuir esse valor diretamente no PFILE ou SPFILE.
Ao executar
um código que exceda o valor máximo permitido:
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_23340.trc (incident=12901):
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
Trecho
retirado da documentação:
Oracle Database aborts or terminates the sessions or
processes that are consuming the most untunable PGA memory in the following
order:
- Calls
for sessions that are consuming the most untunable PGA memory are aborted.
- If PGA
memory usage is still over the PGA_AGGREGATE_LIMIT, then the sessions and
processes that are consuming the most untunable PGA memory are
terminated.
Referências:
Abraço
Alex Zaballa
0 comentários:
Postar um comentário