Re: ayuda-configuracion-mem-postgresql

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: tgutierrez(at)unipamplona(dot)edu(dot)co
Cc: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: ayuda-configuracion-mem-postgresql
Date: 2004-08-31 23:33:20
Message-ID: 20040831233320.GL6895@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Aug 31, 2004 at 04:21:25PM -0500, tgutierrez(at)unipamplona(dot)edu(dot)co wrote:

> hola Amigos de postgreSQL.
>
> Tengo para asignar de memoria cache 700 MB
> y configure las variables de esta forma:
> echo 268435456 > /proc/sys/kernel/shmall
> echo 268435456 > /proc/sys/kernel/shmmax
> y el en archivo vi /etc/sysctl.conf
> agregue:
>
> kernel.shmall=268435456
> kernel.shmmax=268435456

Perfecto.

> quiero asignarle:
>
> 1. numero de conexiones: -N 200

Olvidate de usar switches en la invocacion de postmaster. Mejor pon la
configuracion en el archivo de configuracion postgresql.conf. En este caso,

max_backends = 200

> 2. Memoria Compartida Usada como cache de consultas: -B 700 MB ?
> ¿Cuanto le asignaria en megas de memoria compartida: 572MB? tengo
> disponible en memoria total de ram y cache: 700 MB.

Pesima idea. Deja unos 80 megas para shared_buffers como maximo, y que
el resto sea usado por el sistema operativo para cache. O sea,

shared_buffers = 10000

Si te pasas de eso el rendimiento empieza a empeorar. Si hubieras hecho
mediciones como te dije hace harto tiempo te habrias dado cuenta de
esto.

> 3. Aumentar la memoria del procesamiento de queries, para que quepa todos
> los datos que se estan procesando en esa memosria y los queries sean
> procesados mas ràpidos.

Estas confundiendo las cosas. Puedes aumentar sort_mem y ganar bastante
en las clausulas que usen ordenamiento, pero algunas consultas pueden
usar mas de un paso de ordenamiento, y tendras estas areas de
ordenamiento por cada consulta que se este ejecutando concurrentemente.

Ej. si tienes una consulta SELECT * FROM ... ORDER BY ... donde no hay
un indice, hay que hacer un paso de ordenamiento. Si le pones 50 megas
a sort_mem, vas a usar 50 megas en esta consulta. Si lanzas dos de
estas consultas simultaneamente, ocuparas 100 mb.

Asi, pon un numero donde ojala quepa la consulta completa, pero no
demasiado grande. Si te pasas del total de memoria, se ira a swap y eso
es muchisimo peor.

sort_mem = 1000 # valor en kilobytes. Quizas 1 MB sea poco, pero
# __mide__ antes de hacer cambios.

Luego de todo esto, lanzas postmaster sin parametros.

Para effective_cache_size, pon un valor cualquiera. Luego lanza el
servidor y ten corriendo tu aplicacion por un par de horas. Luego,
ejecuta el comando free. La primera linea dice

$ free
total used free shared buffers cached
Mem: 451260 447848 3412 0 10828 224596

Mi "effective cache size" aqui es de 224596. En Postgres se mide en
numero de bloques, que es 8 kb, o sea yo pondria

effective_cache_size = 28074

(Mi maquina tiene 440 MB). Ojo, esto no es memoria ocupada, sino
lo siguiente:

"Sets the planner's assumption about the effective size of the disk
cache (that is, the portion of the kernel's disk cache that will be used
for PostgreSQL data files). This is measured in disk pages, which are
normally 8192 bytes each. The default is 1000."

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Los dioses no protegen a los insensatos. Éstos reciben protección de
otros insensatos mejor dotados" (Luis Wu, Mundo Anillo)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message wilhelmtg@cantv.net 2004-08-31 23:45:21 Query Lento
Previous Message wilhelmtg@cantv.net 2004-08-31 23:20:12 Funciona la Lista