- Este tópico contém 12 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 3 meses atrás por
David Siqueira.
-
AutorPosts
-
23 de novembro de 2010 às 4:49 pm #96964
DBA_LUCAS
ParticipanteBom dia Amigos !
Tenho uma nova duvida , na verdade ja tem um bom tempo que estou com esse problema ,
ORA-04031: unable to allocate 16 bytes of shared memory (“shared pool”,”select increment$,minvalue,m…”,”sql area”,”kglhin: temp” )
Eu coloquei meu SGA_MAX_SIZE = 1000M
Eu coloquei meu SGA_TARGET = 160Mmas mesmo assim o problema persisti , eu ja tentei colocar o SGA_MAX_SIZE com 2000M ,mas assim o banco nao subiu mais , ja não sei o que eu faço mais … alguem tem alguma ideia ? tenho duvida se eu setando valores para o MAX e para o TARGET o oracle ja gerencia automatico a memoria ?
23 de novembro de 2010 às 8:00 pm #96977VitorLeandro
ParticipanteFala Lucas,
Posta a versão do Oracle, Sistema operacional e o Hardware…
23 de novembro de 2010 às 8:38 pm #96978vieri
Participantefaz um teste pra mim.
coloca o SGA_TARGET e o SGA_MAX_SIZE ambos com 500M
e ve se a base sobe.depois explico o pq caso não entenda.
23 de novembro de 2010 às 8:45 pm #96979DBA_LUCAS
ParticipanteXeon QuadCore 2.4Ghz, Memória de 4Gb, HD de 250gb distribuição FEDORA
23 de novembro de 2010 às 8:46 pm #96980DBA_LUCAS
ParticipanteMe explica isso vieri ? pq 500 em kda , num intendi …
23 de novembro de 2010 às 10:31 pm #96984vieri
Participanteexistem duas possibilidades, ou sua sga_target está pequena demais e a shared_pool não está conseguindo chegar no valor que ela precisa alcançar ou seu sga_max_size está grande, a ponto de não ser possível ser alocado. com esse teste vc mata os dois coelhos com uma paulada só.
capitche?
23 de novembro de 2010 às 10:34 pm #96985vieri
Participantesetando ao SGA_MAX_SIZE e SGA_TARGET o oracle assume a distribuição entre as áreas de memória.
mesmo com o oracle assumindo vc também pode fixar um valor minimo,
ou um valor para alocar inicialmente mais é um pouco mais complicado.entende esse 2 parâmetros basicos primeiro e elimina esse erro com a config que te falei de 500M pra cada um.
23 de novembro de 2010 às 11:01 pm #96986DBA_LUCAS
Participantesim , mas se minha TARGET = 160 e MAX = 1G pq eu DIMINUINDO a MAX e AUMENTANDO a TARGET possa resolver ?
como vc disse é um valor que vai do min ao max , ou seja ,o oracle ira usar no caso de 160M ate 1G do jeito que precisar , pq se eu diminuir o valor de max possa resolver ?
24 de novembro de 2010 às 2:12 pm #96988CleitonHanzen
ParticipanteCara,
Sugiro que vocë dë uma lida na documentação da Oracle sobre isso. Lá você vai encontrar a seguinte informação:
“SGA_TARGET specifies the total size of all SGA components. If SGA_TARGET is specified, then the following memory pools are automatically sized…… ”
Ou seja, não importa se o teu SGA_MAX_SIZE está com 1g ou 2g, se o teu SGA_TARGET está setado para 160m, a instance irá utilizar somente este 160m para “distribuir” entre os pools (shared pool, buffer cache, large e java).
Inclusive, um dos engenheiros da Oracle uma vez comentou que uma boa prática, é que o SGA_TARGET seja correspondente a 80% do SGA_MAX_SIZE. Caso ocorra alguma falha de alocação de memória, o próprio DBA pode “brincar” com o redimensionamento das áreas.
[]s
25 de novembro de 2010 às 11:23 pm #97024vieri
ParticipanteEntão, seguindo a linha lógica do problema,
coloque a SGA_TARGET para 500M e a SGA_MAX_SIZE para 700M,
e as chances do problema ser solucionado são grandes, não adianta vc questionar nossas alterações sem dominar a tecnologia , estamos te dando dicas baseado na documentação.
Vc precisa ler ela, se não vai ficar igual cego em tiroteio…
só na tentativa e erro sem embasamento.verifique também se tem algum parametro fixando algum pool.
show parameters shared ;
show parameters large;
show parameters cache;No seu caso é melhor deixar com 0 .
25 de novembro de 2010 às 11:32 pm #97025vieri
ParticipantePara ficar mais claro..
O oracle só vai alocar a memória setada no SGA_TARGET,
o parametro SGA_MAX_SIZE, existe para que vc possa extender
o valor da SGA_TARGET “on the fly” com a base no ar, até o teto
setado pelo sga_max_size, mas isso manualmente via alter system.
Quem define a qtd de memoria alocada é o sga_target,
ele não está nem ai para o sga_max_size, somente quando vc tenta aumentar a sga_target on-line. vc irá esbarra no valor do sga_max_size.Imagine um velocimetro do seu carro que vai até 200KM
e vc está andando a 60KM.200Km é seu sga_max_size, aonde vc pode chegar se vc pisar no acelerador, sga_target é sua velocidade atual que vc pode ir de
1Km até 200Km.O SGA_max_size é o seu velocimentro diz até aonde você pode chegar de alocação de memoria sem restartar a instancia, lembrnado que manualmente sosinho ele só vai chegar até o SGA_TARGET.
Acho que agora ficou molinho de entender… 😆
26 de novembro de 2010 às 3:31 pm #97029DBA_LUCAS
ParticipanteIntendi sim , hehehehehe …
Estou aperfeiçoando meus conhecimentos para no semestre que vem fazer um curso de oracle para tentar me certificar !!!
Vlw dmais galera pela força !!!30 de novembro de 2010 às 2:43 pm #97067David Siqueira
ParticipanteBoa Lucas,
Uma dica é você usar gerenciamento manual até pegar o jeito com o gerenciamento automatico, pois o comportamento da SGA muda muito, e pra quem já tem mais experiencia em lidar com isso fica muito mais fácil.
Eu mesmo apanhei bastante com essa novidade quando usei a algum tempo atrás, pois estava acostumado a usar gerenciamento manual.
Vieri, mandou bem como sempre.
Abraço
-
AutorPosts
- Você deve fazer login para responder a este tópico.