memory_max_target vs sga_max_size

Dúvidas, dicas e atualizações sobre o Treinamento Oracle Performance Diagnostics & Tuning.
Post Reply
gcomenale

memory_max_target vs sga_max_size

Post by gcomenale » Thu Jun 11, 2015 8:15 pm

Olá pessoal,

Estava lendo um pouco sobre memory_max_target e memory_target e me surgiu uma dúvida.
Qual a diferença entre o memory_max_target e o sga_max_size?
Sempre que eu seto o sga_max_size para zero ele ignora e pega um valor defaul dele.
Segundo a documentação o ele é o valor inicial da SGA.
http://docs.oracle.com/cd/B19306_01/ser ... REFRN10198

Porém, se eu tento subir a instancia sem um memory_target ele não deixa, diz que o memory_target não pode ser menor que o sga_max_size.

Afinal de contas, o sga_max_size é o real valor da sga?
Porque eu não posso então ter um memory_target como 0?

Pelo o que eu entendi o uso do sga_max_size com o sga_target faz com que o Oracle distribua conforme desejar a memória entre os pools da SGA, seria uma administração automática (ASMM).

Já no memory_max_target e memory_target seria o valor entre SGA e PGA, mas você mesmo controla os pools da SGA definindo os valores, seria isso?

Eu acho esses conceitos bem básico, mas a documentação da Oracle está deixando a desejar nessa divisão. Já olhei 3 materiais diferentes e nenhum deles foi realmente consistente.

portilho
Site Admin
Posts: 482
Joined: Wed May 29, 2013 8:51 am

Re: memory_max_target vs sga_max_size

Post by portilho » Mon Jun 22, 2015 7:20 am

Oi !
O ASMM foi lançado no 10gR1, e é a automação do balanceamento entre os componentes da SGA (SGA_MAX_SIZE e SGA_TARGET). Antes disso, era necessário colcoar valores estáticos para DB_CACHE_SIZE, SHARED_POOL_SIZE, etc.

O Automatic Memory Management (AMM) foi lançado no 11gR1, que é controlado pelos parâmetros MEMORY_MAX_TARGET e MEMORY_TARGET, é a automação do balanceamento entre os componentes da SGA e a PGA. Por isso, o parâmetro SGA_MAX_SIZE não pode ser maior que MEMORY_MAX_TARGET (ou não caberia nele). No AMM, o SGA_TARGET fica em 0.

Mesmo utilizando o AMM, terá um valor no SGA_MAX_SIZE sim, que deve ser igual ao MEMORY_MAX_TARGET.
Até o 11gR2, estava um pouco trabalhoso desabilitar o AMM - se você alterar os parâmetros MEMORY_MAX_TARGET e MEMORY_TARGET para 0, a instância não sobe mais, pois o SGA_MAX_SIZE é maior do que 0. A forma que eu encontrei de desabilitar o AMM então deve ser criar um PFILE, retirar os parâmetros MEMORY_MAX_TARGET e MEMORY_TARGET dele, e subir com este PFILE.

Uma grande desvantagem do AMM é que ele impede o uso de Huge Pages.

gcomenale

Re: memory_max_target vs sga_max_size

Post by gcomenale » Wed Jul 01, 2015 10:34 pm

Então eu posso usar ambos? Por exemplo, Balancear os pools da SGA automaticamente (ASMM com SGA_MAX_SIZE e SGA_TARGET) e deixar também que a PGA seja dimensionada em conjunto com a SGA (MEMORY_MAX_TARGET e MEMORY_TARGET) ou deixa a PGA estática em conjunto com a SGA onde apenas os pools serão redimensionados conforme necessidade do Oracle, no caso, fazendo o procedimento que você falou do PFILE, correto?

portilho
Site Admin
Posts: 482
Joined: Wed May 29, 2013 8:51 am

Re: memory_max_target vs sga_max_size

Post by portilho » Thu Jul 02, 2015 6:54 am

Não vejo o porque de utilizar os dois, e nem é possível utilizar AMM e ASMM ao mesmo tempo. Ou é com MEMORY_*, ou não.
Se você utilizar MEMORY_*, SGA e PGA serão balanceados automaticamente entre si, assim como os componentes dentro da SGA.
Se você não utilizar MEMORY_*, SGA e PGA não serão balanceados automaticamente entre si, mas os componentes dentro da SGA sim.
A PGA nunca é estática mesmo, ela possui apenas um TARGET (e um MAX no 12c), mas ela fica alterando seu tamanho conforme a necessidade.

gcomenale

Re: memory_max_target vs sga_max_size

Post by gcomenale » Tue Jul 07, 2015 9:33 pm

Ok, vamos ver se eu realmente entendi:

Cenário 1:

MEMORY_TARGET 800m
MEMORY_MAX_SIZE 1000m

SGA_MAX_SIZE 1000m
SGA_TARGET 0

Irá usar o AMM podendo variar o tamanho entre SGA e PGA conforme sua necessidade mais os seus componentes.

Cenário 2:
MEMORY_TARGET 0
MEMORY_MAX_SIZE 0

SGA_MAX_SIZE 1000m
SGA_TARGET 800m

Irá usar o ASMM onde não irá variar o valor da SGA e da PGA, mas os componentes da SGA sim.

Cenário 3:
MEMORY_TARGET 0
MEMORY_MAX_SIZE 0

SGA_MAX_SIZE 1000m
SGA_TARGET 0

Desabilito tanto o AMM quanto o ASMM e passo a administrar eu mesmo a distribuição da SGA para a PGA e os componentes da SGA, via MANUAL SHARED MEMORY MANAGEMENT (MSMM).


Correto?
Aproveitando o gancho, no material diz o seguinte: "If you’re currently running your instance in Automatic or manual Shared Memory Management mode, then you are by default running Automatic PGA Memory Management." Eu estarei usando o APMM mesmo que o pga_aggregate_target esteja apontando como 0? Pelo o que eu entendi com o pga_aggregate_target para 0 os pools da PGA são setados manualmente e não como diz esse trecho.

portilho
Site Admin
Posts: 482
Joined: Wed May 29, 2013 8:51 am

Re: memory_max_target vs sga_max_size

Post by portilho » Wed Jul 08, 2015 8:38 am

Você está correto nos três cenários, é isto mesmo.

E o que esta parte da documentação parece estar dizendo é que "por padrão" você estará utilizando APMM. O que define se você estará utilizando o APMM é o parâmetro WORKAREA_SIZE_POLICY, que por padrão está em AUTO.

Post Reply