
# Arquitectura Básica PostgreSQL

---

<img src='img/arch_overview.png' />

.notes: Diagrama cortesía de: http://raghavt.blogspot.in/2011/04/postgresql-90-architecture.html

.fx: imageslide

---

# Arquitectura Básica PostgreSQL

* Una instancia PostgreSQL consta de una serie de procesos y memoria.
* Arquitectura **cliente/servidor**, tipo *process per-user*
    * **postmaster**: *daemon* supervisor. Controla acceso a segmento *shmmem*
    * **utility porcesses**:  bgwriter, walriter, syslogger, archiver,
      statscollector, autovacuum launcher.
    * **user Backend process**: Proceso postgres dedicado a usuario. *Server process*.

Cuando un cliente abre nueva conexión, *Postmaster* autentifica y autoriza, y 
pasa el control a un proceso *backend server*. 

PostgreSQL usa multiprocesos en vez de multihilos para garantizar la
estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto 

Cada proceso puede relaizar una sola *query* en un momento dado, y comparte con
el resto una serie de zonas de memoria *shmmem*

---

# Arquitectura PostgreSQL · Procesos
## Utility Process:

* Obligatorios: No tienen opción habilitar/deshabilitar
    * bgwriter
    * wal writer
    * checkpointer
* Opcionales
    * stats collector
    * autovacuum launcher
    * archiver
    * syslogger
    * wal sender,  wal reciver

---

# Arquitectura PostgreSQL · Procesos

`ps -u postgres o pid,stat,cmd`

    !bash
    bercab@kiwi7:~$ ps -u postgres o pid,stat,cmd
    PID STAT CMD
    15997 Ss   postgres: spusr spokenpic [local] idle in transaction                                                                       
    16033 Ss   postgres: spusr spokenpic [local] idle                                                                                      
    19350 S    /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf
    19352 Ss   postgres: checkpointer process                                                                                              
    19353 Ss   postgres: writer process                                                                                                    
    19354 Ss   postgres: wal writer process                                                                                                
    19355 Ss   postgres: autovacuum launcher process                                                                                       
    19356 Ss   postgres: archiver process   last was 00000001000000150000009F                                                              
    19357 Ss   postgres: stats collector process                                                                                           
    24088 Ss   postgres: uaploy aploy 127.0.0.1(48948) idle                                                                                
    29196 S    /usr/sbin/pgbouncer -R -d /etc/pgbouncer/pgbouncer.ini

---

<img src='img/Process_memory_view.png' />

.fx: imageslide
