SHMALL y PAGE_SIZE

Lists: pgsql-es-ayuda
From: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
To: Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: SHMALL y PAGE_SIZE
Date: 2005-11-19 09:06:13
Message-ID: 463a53a40511190106l671ebd19u@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola, he estado revisando tanto el articulo sobre afinación del
postgres (mencionado hace un par de días en un largo thread) y la
nueva documentación de postgres sobre la gestión de recursos del
kernel ( http://developer.postgresql.org/docs/postgres/kernel-resources.html
).

Veo claramente que:
- la documentación ha cambiado: ya no aparece la fórmula que
publicaron en su día para calcular un tamaño razonable para SHMMAX, en
función del número de conexiones y del nº de shared_buffers.
- que el tamaño de SHMALL se mide en páginas, como ya adelantó Alvaro
(al menos, en Linux).
- que el tamaño de SHMALL puede obtenerse con la expresión:
ceil(SHMMAX/PAGE_SIZE)

También tengo algunas dudas:
- ¿Cómo puedo saber exactamente el tamaño de página (PAGE_SIZE) en mi
kernel?. Uso kernel de linux 2.6. Creo que en 2.4 el tamaño era de
4KB, ¿aquí es el mismo tamaño?
- ¿puedo deducirlo planteando esta ecuación?:
DEFAULT_SHMALL=ceil(DEFAULT_SHMMAX/PAGE_SIZE).
(Los valores default se pueden conocer fácilmente a través del
programa sysctl -a)

Con estas aclaraciones, me gustaría modificar el artículo corrigiendo
los errores y de modo que resultara más claro y útil para cualquiera.
Gracias.
--
Juanky Moral - www.juancarlosmoral.es


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
Cc: Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: SHMALL y PAGE_SIZE
Date: 2005-11-19 14:25:26
Message-ID: 20051119142526.GB30067@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Juanky Moral escribió:

> - la documentación ha cambiado: ya no aparece la fórmula que
> publicaron en su día para calcular un tamaño razonable para SHMMAX, en
> función del número de conexiones y del nº de shared_buffers.

Bueno, todavia la formula sigue dependiendo exclusivamente de
max_connections y shared_buffers, pero las constantes han crecido.
Es facil hacer una investigacion modificando esos valores para obtener
varios puntos de la recta y calcular las constantes. Observa que
Postgres te indica cual es el tamaño del segmento que esta pidiendo, si
no logra crearlo (hint: bajar SHMMAX hasta un numero ridiculamente
pequeño)

Hmm, ahora que lo pienso probablemente tambien depende de
max_locks_per_transaction.

> También tengo algunas dudas:
> - ¿Cómo puedo saber exactamente el tamaño de página (PAGE_SIZE) en mi
> kernel?. Uso kernel de linux 2.6. Creo que en 2.4 el tamaño era de
> 4KB, ¿aquí es el mismo tamaño?

Ni idea.

> - ¿puedo deducirlo planteando esta ecuación?:
> DEFAULT_SHMALL=ceil(DEFAULT_SHMMAX/PAGE_SIZE).
> (Los valores default se pueden conocer fácilmente a través del
> programa sysctl -a)

No creo. SHMALL es un limite que aplica al total de procesos, mientras
que SHMMAX aplica a cada proceso individualmente, AFAIK.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


From: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
To: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>, Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: SHMALL y PAGE_SIZE
Date: 2005-11-19 14:34:57
Message-ID: 463a53a40511190634g37640852h@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El 19/11/05, Alvaro Herrera<alvherre(at)commandprompt(dot)com> escribió:
> Juanky Moral escribió:
>
> > - la documentación ha cambiado: ya no aparece la fórmula que
> > publicaron en su día para calcular un tamaño razonable para SHMMAX, en
> > función del número de conexiones y del nº de shared_buffers.
>
> Bueno, todavia la formula sigue dependiendo exclusivamente de
> max_connections y shared_buffers, pero las constantes han crecido.
> Es facil hacer una investigacion modificando esos valores para obtener
> varios puntos de la recta y calcular las constantes. Observa que
> Postgres te indica cual es el tamaño del segmento que esta pidiendo, si
> no logra crearlo (hint: bajar SHMMAX hasta un numero ridiculamente
> pequeño)
Bueno, tengo que confesar que molaba más aquello de la fórmula...
pero en fin, supongo que éso es lo que hay.
>
> Hmm, ahora que lo pienso probablemente tambien depende de
> max_locks_per_transaction.
>
>
> > También tengo algunas dudas:
> > - ¿Cómo puedo saber exactamente el tamaño de página (PAGE_SIZE) en mi
> > kernel?. Uso kernel de linux 2.6. Creo que en 2.4 el tamaño era de
> > 4KB, ¿aquí es el mismo tamaño?
>
> Ni idea.
>
> > - ¿puedo deducirlo planteando esta ecuación?:
> > DEFAULT_SHMALL=ceil(DEFAULT_SHMMAX/PAGE_SIZE).
> > (Los valores default se pueden conocer fácilmente a través del
> > programa sysctl -a)
>
> No creo. SHMALL es un limite que aplica al total de procesos, mientras
> que SHMMAX aplica a cada proceso individualmente, AFAIK.
He probado a mantener SHMALL en su valor original (default) y todo
parece ir bien, incluso guardando un 10% de la memoria para
shared_buffers, como dice Momjian.
Creo que es lo que recomendaré (si no me dices lo contrario).
Gracias.
>
> --
> Alvaro Herrera http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>

--
Juanky Moral - www.juancarlosmoral.es


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
Cc: Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: SHMALL y PAGE_SIZE
Date: 2005-11-19 14:45:01
Message-ID: 20051119144501.GD30067@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Juanky Moral escribió:
> El 19/11/05, Alvaro Herrera<alvherre(at)commandprompt(dot)com> escribió:
> > Juanky Moral escribió:
> >
> > > - la documentación ha cambiado: ya no aparece la fórmula que
> > > publicaron en su día para calcular un tamaño razonable para SHMMAX, en
> > > función del número de conexiones y del nº de shared_buffers.
> >
> > Bueno, todavia la formula sigue dependiendo exclusivamente de
> > max_connections y shared_buffers, pero las constantes han crecido.
> > Es facil hacer una investigacion modificando esos valores para obtener
> > varios puntos de la recta y calcular las constantes. Observa que
> > Postgres te indica cual es el tamaño del segmento que esta pidiendo, si
> > no logra crearlo (hint: bajar SHMMAX hasta un numero ridiculamente
> > pequeño)
> Bueno, tengo que confesar que molaba más aquello de la fórmula...
> pero en fin, supongo que éso es lo que hay.

Bueno, lo que trataba de decirte era que construyeras la fórmula :-)

Claro que la fórmula es dependiente de la versión, por lo que si quieres
hacer investigación periodística te costará un poco :-) Siempre puedes
pedirle a alguien de la lista que contribuya ...

Si quieres ser absolutamente riguroso con el calculo, ve
CreateSharedMemoryAndSemaphores() en src/backend/storage/ipc/ipci.c

> > No creo. SHMALL es un limite que aplica al total de procesos, mientras
> > que SHMMAX aplica a cada proceso individualmente, AFAIK.
> He probado a mantener SHMALL en su valor original (default) y todo
> parece ir bien, incluso guardando un 10% de la memoria para
> shared_buffers, como dice Momjian.
> Creo que es lo que recomendaré (si no me dices lo contrario).

Claro que eso fallará cuando llegue alguien con un servidor con 64 GB de
memoria ...

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


From: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
To: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>, Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: SHMALL y PAGE_SIZE
Date: 2005-11-19 14:59:14
Message-ID: 463a53a40511190659m2605555fi@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El 19/11/05, Alvaro Herrera<alvherre(at)commandprompt(dot)com> escribió:
> Juanky Moral escribió:
> > El 19/11/05, Alvaro Herrera<alvherre(at)commandprompt(dot)com> escribió:
> > > Juanky Moral escribió:
> > >
> > > > - la documentación ha cambiado: ya no aparece la fórmula que
> > > > publicaron en su día para calcular un tamaño razonable para SHMMAX, en
> > > > función del número de conexiones y del nº de shared_buffers.
> > >
> > > Bueno, todavia la formula sigue dependiendo exclusivamente de
> > > max_connections y shared_buffers, pero las constantes han crecido.
> > > Es facil hacer una investigacion modificando esos valores para obtener
> > > varios puntos de la recta y calcular las constantes. Observa que
> > > Postgres te indica cual es el tamaño del segmento que esta pidiendo, si
> > > no logra crearlo (hint: bajar SHMMAX hasta un numero ridiculamente
> > > pequeño)
> > Bueno, tengo que confesar que molaba más aquello de la fórmula...
> > pero en fin, supongo que éso es lo que hay.
>
> Bueno, lo que trataba de decirte era que construyeras la fórmula :-)
>
> Claro que la fórmula es dependiente de la versión, por lo que si quieres
> hacer investigación periodística te costará un poco :-) Siempre puedes
> pedirle a alguien de la lista que contribuya ...
Nunca he dejado de solicitarlo... desde la primera versión.
>
> Si quieres ser absolutamente riguroso con el calculo, ve
> CreateSharedMemoryAndSemaphores() en src/backend/storage/ipc/ipci.c
>
>
> > > No creo. SHMALL es un limite que aplica al total de procesos, mientras
> > > que SHMMAX aplica a cada proceso individualmente, AFAIK.
> > He probado a mantener SHMALL en su valor original (default) y todo
> > parece ir bien, incluso guardando un 10% de la memoria para
> > shared_buffers, como dice Momjian.
> > Creo que es lo que recomendaré (si no me dices lo contrario).
>
> Claro que eso fallará cuando llegue alguien con un servidor con 64 GB de
> memoria ...
Claro. Por eso pido ayuda a esta lista.

La afinación de postgres es crucial para sacar el máximo rendimiento
al servidor. Pero como todos sabemos, no empieza por la afinación de
las querys (índices, y demás), sino por afinar el hardware del
sistema.

Sólo que, para mí y me temo que para muchos, es de lo más críptico que
se puede leer sobre postgres.

Nuevamente, agradeceré cualquier colaboración de la lista que sirva
para ayudarme a escribir un articulo que ayudará a muchos en este
importante objetivo de exprimir postgres.
Gracias.

>
> --
> Alvaro Herrera http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
>

--
Juanky Moral - www.juancarlosmoral.es


From: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
To: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>, Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: SHMALL y PAGE_SIZE
Date: 2005-11-21 18:07:31
Message-ID: 463a53a40511211007g4c8c663fg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Lo encontré :)
El valor de PAGE_SIZE es de 4KB (el mismo para linux 2.6 que para linux 2.4):

/usr/src/linux/include/asm-i386/page.h

/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))

PAGE_SIZE es 4096 ( = 1<<12 ).

--
Juanky Moral - www.juancarlosmoral.es