- Este tópico contém 16 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
Peterson.
-
AutorPosts
-
19 de agosto de 2010 às 5:06 pm #95595
Sousa04
ParticipanteBom dia a Todos,
Andei realizando umas pesquisas sobre esses parâmetros do kernel e cheguei a seguinte dúvida:
kernel.shmall – controla o tamanho total do segmento de memória compartilhada
e
kernel.shmmax – controla o tamanho do segmento de memória que uma aplicação pode utilizar. E segundo a documentação, a Oracle sugere definir esse parâmetro como a Metade de memória física.Dúvida:
Se shmall controla o tamanho máximo, então não pode ser menor que shmmax?
Tenho visto várias configurações do tipo
kernel.shmmax = 16865718272
kernel.shmall = 2097152shmmax maior que shmall.
Tenho 3 ambientes onde trabalho e em todos o parâmetro shmmax é maior que shmall isso está certo??
Dei uma lida em outros post aqui no forúm mas não me ficou muito claro. Desde já agradeço a todos
Vlw
🙂
19 de agosto de 2010 às 11:04 pm #95605vieri
Participantekernel.shmmax = 16865718272
kernel.shmall = 2097152Servidores de 32Gb de ram possui essa config, está correto.
Pois a Oracle recomenda que a SGA seja metade da ram disponivel.A sua interpretação que está errada com relação ao conceito de segmento.
Segmento é uma fatia e não uma totalidade, a memoria é dividida em diversos segmentos de 2Mb, e uma plicação só pode alocar
16Gb, ou seja o tamanho máximo da SGA será de 16Gb,
terá centenas de segmentos de tamanho definidos por SHMALL,
até chegar a um total máximo de 16Gb.Kernel.shmall – controla o tamanho total do segmento de memória compartilhada ==> OK
e
kernel.shmmax – controla o tamanho(somátorio) de diversos segmentos de memória que uma aplicação pode utilizar. E segundo a documentação, a Oracle sugere definir esse parâmetro como a Metade de memória física.eclareceu ?
20 de agosto de 2010 às 12:30 am #95606Sousa04
ParticipanteOlá Vieri Blz!!
Achei muito legal sua explicação
Deixa eu ver se saquei a jogada.SHMALL=2097152 defini diversos segmentos cada um com 2mb.
e
SHMMAX=16865718272 vai controlar o somatorio desses segmentos até um limite 16gbbem, se for isso tenho q alterar um dos servidores
veja:
$ ipcs -a—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x00000000 4161539 root 644 80 2
0x00000000 4194309 root 644 16384 2
0x00000000 4227078 root 644 280 2
0x00000000 27983880 oracle 640 16777216 31
0x00000000 28016649 oracle 640 536870912 31
0x00000000 28049418 oracle 640 536870912 31
0x00000000 28082187 oracle 640 536870912 31
0x00000000 28114956 oracle 640 536870912 31
0x00000000 28147725 oracle 640 536870912 31
0x00000000 28180494 oracle 640 536870912 31
0x00000000 28213263 oracle 640 536870912 31
0x5ee5dce0 28246032 oracle 640 522190848 31—— Semaphore Arrays ——–
key semid owner perms nsems
0x651133e8 10813441 oracle 640 154—— Message Queues ——–
key msqid owner perms used-bytes messageso maior segmento alocado para o Oracle é 536870912 pois shmmax=512MB
E somando esses segmentos chego a um total de 4297064448 bytes ou 4Gb
pois meu parâmetro sga_max_size=4Gbporém
meu parâmetro shmall=2097152Está meio confuso né.
A única alteração será no shmmax né?
😀
20 de agosto de 2010 às 7:48 pm #95615vieri
Participanteé isso ai mesmo…
Para você alocar a SGA em apenas uma área contigua de memôria..
que é o ideial vc precisa alterar esse valor de shmmax.cfrme abaixo:
—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x7f231aac 0 oracle 640 2518679552 32
0x790206ce 32769 oracle 666 404 0—— Semaphore Arrays ——–
key semid owner perms nsems
0xb94bd744 98304 oracle 640 125
0xb94bd745 131073 oracle 640 125
0xb94bd746 163842 oracle 640 125
0xb94bd747 196611 oracle 640 125
0xb94bd748 229380 oracle 640 125
0xb94bd749 262149 oracle 640 125
0xb94bd74a 294918 oracle 640 125
0xb94bd74b 327687 oracle 640 125
0xb94bd74c 360456 oracle 640 125
0x790206ce 393225 oracle 666 1—— Message Queues ——–
key msqid owner perms used-bytes messagesSQL> show sga
Total System Global Area 2516582400 bytes
Fixed Size 1263368 bytes
Variable Size 369101048 bytes
Database Buffers 2130706432 bytes
Redo Buffers 15511552 bytesPercebe como minha SGA está contigua, ela está
com apenas um Key definido no output do comando.
Ao contrário da sua congfig que precisou alocar varios semgmentos
de memôria compartilhada.entendeu?
20 de agosto de 2010 às 7:53 pm #95616vieri
Participanteoutro exemplo com uma SGA maior de 7Gb.
[oracle@ ~]$ ipcs -a
—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x59e234d8 131073 oracle 600 132120576 17
0xf8eba608 163842 oracle 600 7568621568 309—— Semaphore Arrays ——–
key semid owner perms nsems
0x615b9f44 98304 oracle 640 44
0xed4397a8 229377 oracle 660 125
0xed4397a9 262146 oracle 660 125
0xed4397aa 294915 oracle 660 125
0xed4397ab 327684 oracle 660 125
0xed4397ac 360453 oracle 660 125
0xed4397ad 393222 oracle 660 125
0xed4397ae 425991 oracle 660 125
0xed4397af 458760 oracle 660 125
0xed4397b0 491529 oracle 660 125—— Message Queues ——–
key msqid owner perms used-bytes messagesKernel sysctl configuration file for Red Hat Linux
#
For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
sysctl.conf(5) for more details.
Controls IP packet forwarding
net.ipv4.ip_forward = 0
Controls source route verification
net.ipv4.conf.default.rp_filter = 1
Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
Controls whether core dumps will append the PID to the core filename.
Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
#Parametros recomendados na documentacao da Rightway para o Oracle Rac
kernel.shmall = 2097152
kernel.shmmax = 8454799360
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 658576
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 1048536
net.core.wmem_max = 1048536
vm.nr_hugepages = 409620 de agosto de 2010 às 8:20 pm #95618vieri
Participantecomplementando para não ficar coisa mal entendida…
O parâmetro SHMMAL ficou extrano para você com um valor
menor que o SHMMAX, porque para saber o valor total dele,
vc precisa multiplicar SHMMAX pelo PAGESIZE do S.O,
ai vc ira obter um valor similar(ou maior) ao SHMMAX.ex:
[oracle@depdata02 ~]$ getconf PAGE_SIZE
4096shmall:2097152
SQL> select 4096*2097152 from dual ;
4096*2097152
8589934592 = > Valor total da memória compartilhada
Ou seja você poderar ter 2097152 páginas de memôria de 4096bytes.
Acho que agora ficou mais claro.
Se tiver algum SA(sys admin) por ai querendo complementar ou até mesmo concertar algo fique a vontade. Mas acho que está tudo OK, nas
definições.
Só pesquisei a minha mente e ela ja está bombardeada de informações …rsrs20 de agosto de 2010 às 8:36 pm #95620vieri
ParticipanteEsses dois parametros são mto parecidos a diferença básica é que o SHMMAX controla o valor máximo de uma aplicação.
E o SHMALL controla a valor máximo dessa área compartilhada.
Oque confunde é que o SHMALL não está em bytes e sim um valor inteiro,
que são as páginas definidas pelo parâmetro hugepages.Acho que a informação que passei no primeito post que ele(SHMALL) controla o tamanho de segmento está errado.
Na verdade ele define que a quantidade de páginas que irão compor a memôria compartilhada e não o tamanho sequencial de diversos segmentos de 2Mb.. isso é falso OK…Aonde entra diversos segmentos nessa história,
quando vc tem o SGMMAX com valor baixo e a SGA com valor alto, ai vc terá vários segmentos em memôria cfrme vc mostrou lá em cima com o comando ipcs.Segmento= Aréa de memória compartilhada alocada para uma aplicação,
pode ser composta por diversos segmentos, ou apenas um segmento pode compor a memôria compartilhada usada por uma aplicação.SHMMAX= Valor máximo de memôria compartilhada alocada para uma aplicação.
SHMALL=Qtd de paginas , que defini o tamanho total de uma memória compartilhada, por N processos.Outro detalhe, vc só conseguiu alocar 4GB de SGA, pq o seu parâmetro
shmall=2097152 multiplicado pelo pagesize, é igual ou maior que 4Gb,
se não vc levaria erro de out of memory.Pronto Acho que para um DBA já está mas que o suficiente, esse assunto é meio confuso pq no doc de instalação do Oracle tem apenas os valores,
mas não tem explicado seu porque nem oque representa.21 de agosto de 2010 às 12:06 am #95622CleitonHanzen
ParticipanteOpá…
Lembrando que a Oracle “Oficialmente” não suporta o SHMMAX > que 4GB. Note: 567506.1 no metalink…. 😉
23 de agosto de 2010 às 9:11 pm #95652Sousa04
ParticipanteBoa tarde Vieri,
Vc aniquilou totalmente a dúvida quando no trecho “E o SHMALL controla a valor máximo dessa área compartilhada.
Oque confunde é que o SHMALL não está em bytes e sim um valor inteiro,
que são as páginas definidas pelo parâmetro hugepages. ”“SHMALL=Qtd de paginas , que defini o tamanho total de uma memória compartilhada, por N processos. ”
Realmente esse é um assunto que confunde mesmo.
fiz o seguinte teste em uma pequena base
Perceba os dados
$ free -mt
total used free shared buffers cached
Mem: 502 215 286 0 12 156
-/+ buffers/cache: 46 456
Swap: 1023 0 1023
Total: 1526 215 1310Total System Global Area 419430400 bytes
Fixed Size 1219760 bytes
Variable Size 96469840 bytes
Database Buffers 318767104 bytes
Redo Buffers 2973696 bytes$ cat /proc/meminfo | grep Huge
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB$ getconf PAGE_SIZE
4096Memória 502 Mb
SGA 400 Mb
PAGE_SIZE 4096kernel.shmmax=263372800
kernel.shmall=103168shmmax 250 MB
shmall 103168 * 4096 = 403 Mb (Superior a SGA)$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Mon Aug 23 07:29:06 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.Total System Global Area 419430400 bytes
Fixed Size 1219760 bytes
Variable Size 96469840 bytes
Database Buffers 318767104 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.iniciado sem problema
BLZ!!!! Agora eu vou diminuir o parâmetro shmall para o mesmo valor da SGAkernel.shmall=102400 * 4096 = 400Mb
eeee tham tham!!!!!
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Mon Aug 23 08:57:10 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-27102: out of memory
Linux Error: 28: No space left on deviceCabuloso!!!! rsrsrs
É como vc disse na documentação não tem explicado nem como funciona e nem para que serve. Aponta apenas valores. Eu tbm tinha em mente que esse valor (kernel.shmall = 2097152 ) era apenas um exemplo. Agora está bem mais claro.Vlw
3 de setembro de 2010 às 9:28 pm #95921vieri
ParticipanteCleitonHanzen,
[oracle@depdata01 ~]$ ipcs -a
—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x00fa5a34 131073 oracle 600 132120576 16
0xccf0a4fc 163842 oracle 600 7585398784 177—— Semaphore Arrays ——–
key semid owner perms nsems
0x57aff660 98304 oracle 640 44
0xa0e11f08 229377 oracle 660 125
0xa0e11f09 262146 oracle 660 125
0xa0e11f0a 294915 oracle 660 125
0xa0e11f0b 327684 oracle 660 125
0xa0e11f0c 360453 oracle 660 125
0xa0e11f0d 393222 oracle 660 125
0xa0e11f0e 425991 oracle 660 125
0xa0e11f0f 458760 oracle 660 125
0xa0e11f10 491529 oracle 660 125—— Message Queues ——–
key msqid owner perms used-bytes messages#Parametros recomendados na documentacao da Rightway para o Oracle Rac
kernel.shmall = 2097152
kernel.shmmax = 8454799360
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128esse lance de 4Gb não seria para ambientes 32bits ?
Estou com meu parâmetro com 8Gb, e está alocando os 8Gb corretamente e não dois de 4Gb, caso o parâmetro só suportasse até 4Gb.
3 de setembro de 2010 às 9:33 pm #95922vieri
ParticipanteSousa04,
seu teste foi perfeito para mostrar o funcionamento do
SHMMAL e aconteceu exatamente como lhe falei.Esse assunto é complicado se ficar alguns meses se tocar nele,
quando vai ler já esqueceu denovo.Mas depois destes post foi pro sangue!
3 de setembro de 2010 às 9:40 pm #95924CleitonHanzen
Participante[quote=”vieri”:3425ibwd]CleitonHanzen,
.
.
.
.esse lance de 4Gb não seria para ambientes 32bits ?
Estou com meu parâmetro com 8Gb, e está alocando os 8Gb corretamente e não dois de 4Gb, caso o parâmetro só suportasse até 4Gb.[/quote]
Vieri,
No começo também achei meio estranho esse note, mas como o mesmo explica:
”
Occasionally, Customers may erroneously think that that setting the SHMMAX as recommended in this NOTE limits the total SGA to just less than 4Gb. That is not true. Setting the SHMMAX as recommended only causes a few more “shared memory segments” to be used for whatever total SGA that you subsequently configure in Oracle.”Outro ponto interessante:
“One last data point for 64-bit Linux systems: A SHMMAX value of 4Gb or greater will lead to coredump limitations.”
3 de setembro de 2010 às 9:41 pm #95925vieri
ParticipanteAcabei de ler a nota… e ela é em clara.
É uma recomendação e não uma limitação!😉
Check Oracle metalink Doc ID:567506.1
“Oracle Global Customer Support officially recommends a ” maximum” for SHMMAX of just less than 4Gb, or 4294967295.
The maximum size of a shared memory segment is limited by the size of the available user address space. On 64-bit systems, this is a theoretical 2^64bytes. So the “theoretical limit” for SHMMAX is the amount of physical RAM that you have. However, to actually attempt to use such a value could potentially lead to a situation where no system memory is available for anything else. Therefore a more realistic “physical limit” for SHMMAX would probably be “physical RAM – 2Gb”.
In an Oracle RDBMS application, this “physical limit” still leaves inadequate system memory for other necessary functions. Therefore, the common “Oracle maximum” for SHMMAX that you will often see is “1/2 of physical RAM”. Many Oracle customers chose a higher fraction, at their discretion.
Occasionally, Customers may erroneously think that that setting the SHMMAX as recommended in this NOTE limits the total SGA to just less than 4Gb. That is not true. Setting the SHMMAX as recommended only causes a few more “shared memory segments” to be used for whatever total SGA that you subsequently configure in Oracle. For additional detail, please see Document 15566.1, “SGA, SHMMAX, Semaphores and Shared Memory Explained”
One last data point for 64-bit Linux systems: A SHMMAX value of 4Gb or greater will lead to coredump limitations. If a customer is willing to forfeit complete and successful core file generation under any and all circumstances, then a SHMMAX value of 4Gb or greater is fine. It is for this reason that Oracle Global Customer Support officially recommends a ” maximum” for SHMMAX of just less than 4Gb, or 4294967295.”
Quero ver me provar que é melhor ter vários segmentos pequenos do que alguns grandes.
Aúnica melhoria são para coredumps…
3 de setembro de 2010 às 9:58 pm #95927CleitonHanzen
Participante[quote=”vieri”:326joli1]Acabei de ler a nota… e ela é em clara.
É uma recomendação e não uma limitação!😉
[/quote]
Exatamente….não me expressei corretamente… 😛
3 de setembro de 2010 às 10:03 pm #95928vieri
ParticipanteTudo claro como o tempo aqui no R.J , espero que continue assim
no feriado!😉
-
AutorPosts
- Você deve fazer login para responder a este tópico.