4
respostas

sga_max_size = 1G, não limita o a capacidade da instância?

Eu configurei o meu Oracle da seguinte maneira:

ALTER SYSTEM SET MEMORY_MAX_TARGET = 10000M SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_TARGET = 8000M SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0 SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET = 0 SCOPE=SPFILE;

Porém a minha dúvida está no retorno da consulta:

SQL> show parameter sga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga            boolean     FALSE
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     TRUE
sga_max_size                         big integer 1G
sga_min_size                         big integer 0
sga_target                           big integer 0
unified_audit_sga_queue_size         integer     1048576

O sga_max_size está definido com um Limite de 1G, no caso a instância não estaria muito limitada, entendo que esse é o máximo que a instância poderá crescer apesar do gerenciamento estar no modo AMM, estou errado?

A consulta do PGA t4em o seguinte retorno:

SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 10000M
pga_aggregate_target                 big integer 0
SQL> show parameters sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga            boolean     FALSE
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     TRUE
sga_max_size                         big integer 1G
sga_min_size                         big integer 0
sga_target                           big integer 0
unified_audit_sga_queue_size         integer     1048576
SQL> show parameters target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target                   integer     0
db_big_table_cache_percent_target    string      0
db_flashback_retention_target        integer     1440
fast_start_io_target                 integer     0
fast_start_mttr_target               integer     0
memory_max_target                    big integer 10000M
memory_target                        big integer 8000M
parallel_servers_target              integer     32
pga_aggregate_target                 big integer 0
sga_target                           big integer 0
target_pdbs                          integer     0

E também é possível observar estas "limitações", como eu estou aprendendo talvez não esteja sabendo interpretar da maneira correta, porém essa é minha dúvida, caso eu precise fazer uma alteração, no caso um ALTER SYSTEM SET PGA_MAX_SIZE = X SCOPE=SPFILE, gostaria de saber se isso poderia desativar o AMM, e qual valor seria aconselhável, caso faça sentido. Aguardo qualquer retorno, desde já grato!

4 respostas

Olá! Entendo que você está com dúvidas sobre a configuração do Oracle e como isso afeta o gerenciamento de memória. Vamos lá!

Primeiramente, é importante entender que o parâmetro sga_max_size define o tamanho máximo que a SGA pode atingir. No seu caso, está definido como 1G. No entanto, você também configurou o MEMORY_MAX_TARGET para 10000M, o que significa que o Oracle pode alocar até 10G para a SGA e PGA combinadas.

No caso do gerenciamento automático de memória (AMM), o Oracle gerencia a memória entre a SGA e a PGA conforme necessário, até o limite especificado pelo MEMORY_MAX_TARGET. Portanto, mesmo que o sga_max_size seja 1G, o Oracle pode alocar mais memória para a SGA se necessário, até o limite do MEMORY_MAX_TARGET.

Em relação à sua consulta sobre o PGA, o pga_aggregate_limit é definido como 10000M, o que significa que o Oracle pode alocar até 10G para o PGA. No entanto, o pga_aggregate_target é definido como 0, o que significa que o Oracle está livre para alocar memória para o PGA conforme necessário, até o limite do pga_aggregate_limit.

Quanto à sua pergunta sobre a alteração do PGA_MAX_SIZE, é importante notar que esse parâmetro não existe no Oracle. Em vez disso, você pode alterar o pga_aggregate_target ou o pga_aggregate_limit. Alterar esses parâmetros não desativará o AMM, mas influenciará a quantidade de memória que o Oracle pode alocar para o PGA.

Em relação ao valor a ser definido, isso depende das necessidades do seu sistema. No entanto, uma regra geral é que o pga_aggregate_target deve ser definido para pelo menos 40% do MEMORY_TARGET se você estiver usando o AMM.

Por exemplo, se o MEMORY_TARGET for 8000M, o pga_aggregate_target poderia ser definido para 3200M:

ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 3200M SCOPE=SPFILE;

Espero ter entendido e conseguido ajudar. Qualquer dúvida manda aqui de novo. Bons estudos!

Desculpe, a minha dúvida é sobre alterar o parâmetro SGA_MAX_SIZE, e não PGA_MAX_SIZE, eu confundi o nome, no caso eu entendo que o Parâmetro SGA é responsável por vários processos do Oracle, como Buffer Chache, Shared Pool, Large Pool, Java Pol, Streams Pool, Database Buffer Cache, esses parâmetros são de extrema importância pra a instância, no caso eu acredito que 1G deixaria o tamanho máximo muito limitado, faz sentido?

A minha dúvida mesmo é se posso alterar o SGA_MAX_SIZE? se isso iria de alguma maneira afetar o AMM, pq eu não configurei esse limite, foi o próprio AMM, eu entendo que com a definição de 0 para os outros parâmetro faz com que o SGA e o PGA sejam alocados automaticamente, porém com esse limite de 1G, eu acho que poderia atrapalhar no futuro, apesar dos 10G. Saberia me dizer se posso alterar esse parâmetro? se isso implica em algo mais no contexto do AMM? Agradecido pelo retorno!

Você pode alterar o parâmetro SGA_MAX_SIZE no Oracle Database para controlar o tamanho máximo da Área de Memória Compartilhada (SGA). No entanto, ao usar o Automatic Memory Management (AMM), é aconselhável ajustar os parâmetros MEMORY_TARGET ou MEMORY_MAX_TARGET em vez de SGA_MAX_SIZE. Isso permite que o Oracle ajuste dinamicamente a alocação de memória entre SGA e PGA conforme necessário, proporcionando maior flexibilidade. Definir SGA_MAX_SIZE pode limitar a capacidade do AMM de otimizar a alocação de memória de maneira eficiente para as necessidades do banco de dados. Certifique-se de considerar as demandas específicas do seu banco de dados antes de fazer alterações significativas.

Sim meu amigo, eu já entendi isso, porém, já esta com o MEMORY_TARGET e o MEMORY_MAX_TARGET ajustados conforme o padrão AMM. E quando eu consulto os retornos dos parâmetros o SGA_MAX_SIZE esta definido como 1G. Eu ja perguntei 3 vezes a mesma coisa, e vc ainda não entendeu, ou não tá fazendo questão de entender, se vc não sabe, é só me falar, pq demora entorno de 3 dias pra eu ter um retorno, e quando tem não me diz nada a respeito do que eu estou realmente perguntando. Complicado assim! Eu quero saber se com o parâmetro SGA_MAX_SIZE definido com 1G limita o AMM a esse tamanho total de SGA? Esse é o meu retorno das consultas dos parâmetros:

SQL> show parameters sga;

NAME TYPE VALUE


allow_group_access_to_sga boolean FALSE lock_sga boolean FALSE pre_page_sga boolean TRUE sga_max_size big integer 1G sga_min_size big integer 0 sga_target big integer 0 unified_audit_sga_queue_size integer 1048576 SQL> show parameters pga;

NAME TYPE VALUE


pga_aggregate_limit big integer 10000M pga_aggregate_target big integer 0 SQL> show parameters target;

NAME TYPE VALUE


archive_lag_target integer 0 db_big_table_cache_percent_target string 0 db_flashback_retention_target integer 1440 fast_start_io_target integer 0 fast_start_mttr_target integer 0 memory_max_target big integer 10000M memory_target big integer 8000M parallel_servers_target integer 32 pga_aggregate_target big integer 0 sga_target big integer 0 target_pdbs integer 0