Está en la página 1de 75

Administracin de PostgreSQL

Jose M. Alarcn Medina (ITI - Formacin)

Resumen

Objetivos

Plan del curso

Metodologa y Materiales

Desarrollo del curso

Prximos pasos

Objetivos

Proporcionar a los profesionales


responsables de las bases de datos los
conocimientos para la instalacin y
administracin de una base de datos
PostgreSQL.
El alumno al finalizar el curso sabr cmo
instalar PostgreSQL, configurar el entorno
as como administrar los recursos que
proporciona la base de datos.

Plan del curso (I)

Dia I:

Presentacin e Introduccin

Estructura fsica y lgica

Da II:

Instalacin y Desinstalacin

Puesta en marcha

Da III:

Seguridad

Procesamiento de instrucciones y transacciones

Plan del curso (y II)

Da IV:

Configuracin

Copias de seguridad y respaldo

Tareas administrativas

Da V:

Rendimiento

Monitorizacin

Afinamiento

Catlogo del Sistema

Otros temas

Metodologa y Materiales

Metodologa:

Las clases terico-prcticas.

Servidor central al que puedan conectarse los alumnos, as como


instalaciones en sus ordenadores.

Se proporcionaran ejercicios para realizar las prcticas.

El alumno al finalizar el curso sabr cmo instalar PostgreSQL,


configurar el entorno as como administrar los recursos que
proporciona la base de datos.

Materiales:

Manual del curso

Boletines de prcticas con soluciones

Scripts de ayuda y ejemplo

http://www.uv.es/alarmedi/iti2007

Desarrollo del Curso

Introduccin

Presentacin

SGBD, Lenguajes

Historia PostgreSQL

Uso de las herramientas

Psql y pgAdmin3

Estructura PostgreSQL (I)

Arquitectura

Procesos Postmaster / Postgres (uso del socket


TCP/IP)

Memoria compartida

Almacenamiento en Disco

Concepto: CLUSTER BASE DE DATOS

Estructura PostgreSQL (II)

Estructura Fsica

Zona Memoria Compartida

Socket de TCP/IP

Almacenamiento en disco

INITDB: Creacin del cluster

Ficheros

Directorios

Estructura PostgreSQL

initdb (III)

Opciones:
[-D, --pgdata=]DATADIR

ubicacin para este cluster de bases de datos

-E, --encoding=CODIFICACION

codificacin por omisin para nuevas bases de datos

--locale=LOCALE

inicializar usando esta configuracin local

-A, --auth=METODO

mtodo de autentificacin por omisin para


conexiones locales

-U, --username=USUARIO

nombre del superusuario del cluster

-?, --help

mostrar esta ayuda y salir

Si el directorio de datos no es especificado, se usa la variable de ambiente PGDATA.

Estructura PostgreSQL (IV)

Estructura Lgica

Bases de Datos

Tablespaces

Roles de grupo

Roles de login

Forman el CLUSTER DE BASE DE DATOS

Estructura Lgica:
Creacin bases de datos (V)
$ createdb [OPCIN]... [NOMBRE] [DESCRIPCIN]
Opciones:
-D, --tablespace=TBLSPC
tablespace por omisin de la base de datos
-E, --encoding=CODIFICACIN
codificacin para la base de datos
-O, --owner=DUEO
usuario que ser dueo de la base de datos
-T, --template=PATRN
base de datos patrn a copiar
-e, --echo
mostrar los comandos enviados al servidor
-q, --quiet
no desplegar mensajes
--help
mostrar esta ayuda y salir
--version
mostrar el nmero de versin y salir
Opciones de conexin:
-h, --host=ANFITRIN
-p, --port=PUERTO
-U, --username=USUARIO
-W, --password

nombre del servidor o directorio del socket


puerto del servidor
nombre de usuario para la conexin
preguntar la contrasea

Si no se especifica, se crear una base de datos con el mismo nombre que el


usuario actual.

Estructura Lgica:
Creacin bases de datos (VI)
Desde SQL:
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] dbowner ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ TABLESPACE [=] tablespace ]
[ CONNECTION LIMIT [=] connlimit ] ];

Estructura Lgica:
Creacin usuarios y roles (VII)
createuser [OPCIN]... [ROL]
Opciones:
-s, --superuser
-S, --no-superuser
-d, --createdb
-D, --no-createdb
-r, --createrole
-R, --no-createrole
-l, --login
-L, --no-login
-i, --inherit
-I, --no-inherit
-c, --connection-limit=N
-P, --pwprompt
-E, --encrypted
-N, --unencrypted
-e, --echo
-q, --quiet
--help
--version

el rol ser un superusuario


el rol no ser un superusuario
el rol podr crear bases de datos
el rol no podr crear bases de datos
el rol podr crear otros roles
el rol no podr crear otros roles
el rol podr conectarse (predeterminado)
el rol no podr conectarse
el rol heredar los privilegios de los roles de
los cuales es miembro (predeterminado)
rol no heredar privilegios
lmite de conexiones para el rol
(predeterminado: sin lmite)
asignar una contrasea al nuevo rol
almacenar la constrasea cifrada
almacenar la contrasea sin cifrar
mostrar los comandos a medida que se ejecutan
no escribir ningn mensaje
desplegar esta ayuda y salir
desplegar informacin de versin y salir

Estructura Lgica:
Creacin usuarios y roles (VIII)
... Continuacin
createuser [OPCIN]... [ROL]
Opciones de conexin:
-h, --host=ANFITRIN
-p, --port=PUERTO
-U, --username=NOMBRE
-W, --password

nombre del servidor o directorio del socket


puerto del servidor
nombre de usuario con el cual conectarse
(no el usuario a crear)
pedir contrasea para conectarse

Si no se especifican -s, -S, -d, -D, -r, -R o el ROL, se preguntar


interactivamente.
Desde SQL:
CREATE ROLE name [ [ WITH ] option [ ... ] ]
|
|
|
|
|
|
|

SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
INHERIT | NOINHERIT
| LOGIN | NOLOGIN
CONNECTION LIMIT connlimit
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
IN GROUP rolename [, ...]
| ROLE rolename [, ...]
ADMIN rolename [, ...]
| USER rolename [, ...]
| SYSID uid

Estructura Lgica:
Creacin de tablespaces (y IX)
CREATE TABLESPACE tablespacename
[ OWNER username ]
LOCATION 'directory'

Instalacin / Desinstalacin (I)

Instalacin para Windows

Instalacin para Linux

Desde paquetes

Debian (apt-get)
RedHat SUSE (rpm)

Desde ficheros fuente

Instalacin / Desinstalacin
Desde ficheros fuente (II)

Instalacin

Decisiones iniciales

Requerimientos de instalacin y hardware

Configuracin del entorno

Descarga del software

Compilacin y enlazado

Configuracin del usuario propietario

Instalacin de un cliente

Desinstalacin

Instalacin / Desinstalacin
Migraciones (III)

Migraciones

Sin conservar el cluster

Conservando el cluster

Instalacin de varios PostgreSQL en el


mismo servidor

Instalacin / Desinstalacin
Ms cosas (y IV)

Configuracin:

Parmetros del Kernel

Parmetros de funcionamiento

Instalacin de extensiones

Puesta en Marcha (I)

Puesta en marcha y para del servidor,


existen dos modos:

postmaster -> postgres

pg_ctl

Parada manual (modos)

Puesta en marcha y parada automtica

Puesta en Marcha
postmaster - postgres (II)
postmaster [OPCION]...
Opciones:
-B NBUFFERS
nmero de bfers de memoria compartida
-c VAR=VALOR
definir parmetro de ejecucin
-d 1-5
nivel de depuracin
-D DATADIR
directorio de bases de datos
-e
usar estilo europeo de fechas (DMY)
-F
desactivar fsync
-h NOMBRE
nombre de host o direccin IP en que escuchar
-i
activar conexiones TCP/IP
-k DIRECTORIO
ubicacin del socket Unix
-N MAX-CONN
nmero mximo de conexiones permitidas
-o OPCIONES
pasar OPCIONES a cada proceso servidor (obsoleto)
-p PUERTO
nmero de puerto en el cual escuchar
-s
mostrar estadsticas despus de cada consulta
-S WORK-MEM
mostrar cantidad de memoria para ordenamientos (en kB)
--NOMBRE=VALOR definir parmetro de ejecucin
--describe-config
mostrar parmetros de configuracin y salir
--help
desplegar esta ayuda y salir
--version
desplegar nmero de versin y salir

Puesta en Marcha
postmaster - postgres (III)
postmaster [OPCION]...
Opciones de desarrollador:
-f s|i|n|m|h
impedir el uso de algunos tipos de planes
-n
no reinicializar memoria compartida despus de salida anormal
-O
permitir cambios en estructura de tablas de sistema
-P
desactivar ndices de sistema
-t pa|pl|ex
mostrar tiempos despus de cada consulta
-T
enviar SIGSTOP a todos los backends si uno de ellos muere
-W NM
espera NM segundos para permitir acoplar un depurador
Opciones para modo mono-usuario:
--single
selecciona modo mono-usuario (debe ser el primer argumento)
DBNAME
nombre de base de datos (el valor por omisin es el nombre de usuario)
-d 0-5
nivel de depuracin
-E
mostrar las consultas antes de su ejecucin
-j
no usar saltos de lnea como delimitadores de consulta
-r ARCHIVO
enviar salida estndar y de error a ARCHIVO
Opciones para modo de inicio (bootstrapping):
--boot
selecciona modo de inicio (debe ser el primer argumento)
DBNAME
nombre de base de datos (argumento obligatorio en modo de inicio)
-r ARCHIVO
enviar salida estndar y de error a ARCHIVO
-x NUM
uso interno

Puesta en Marcha
pg_ctl (IV)
Empleo:
pg_ctl
pg_ctl
pg_ctl
pg_ctl
pg_ctl
pg_ctl

start
stop
restart
reload
status
kill

[-w] [-D DATADIR] [-s] [-l ARCHIVO] [-o OPCIONES]


[-W] [-D DATADIR] [-s] [-m MODO-DETENCIN]
[-w] [-D DATADIR] [-s] [-m MODO-DETENCIN] [-o OPCIONES]
[-D DATADIR] [-s]
[-D DATADIR]
NOMBRE-SEAL ID-DE-PROCESO

Opciones comunes:
-D, --pgdata DATADIR
ubicacin del rea de almacenamiento de datos
-s, --silent
mostrar slo errores, no mensajes de informacin
-w
esperar hasta que la operacin se haya completado
-W
no esperar hasta que la operacin se haya completado
--help
mostrar este texto y salir
--version
mostrar informacin sobre versin y salir
(Por omisin se espera para las detenciones, pero no los inicios o reinicios)
Si la opcin -D es omitida, se usa la variable de ambiente PGDATA.
Opciones para inicio y reinicio:
-l --log ARCHIVO
guardar el registro del servidor en ARCHIVO.
-o OPCIONES
parmetros de lnea de rdenes a pasar a postgres
(ejecutable del servidor de PostgreSQL)
-p RUTA-A-POSTGRES
normalmente no es necesario

Puesta en Marcha
pg_ctl (V)
--- continuacin
Empleo:
pg_ctl
pg_ctl
pg_ctl
pg_ctl
pg_ctl
pg_ctl

start
stop
restart
reload
status
kill

[-w] [-D DATADIR] [-s] [-l ARCHIVO] [-o OPCIONES]


[-W] [-D DATADIR] [-s] [-m MODO-DETENCIN]
[-w] [-D DATADIR] [-s] [-m MODO-DETENCIN] [-o OPCIONES]
[-D DATADIR] [-s]
[-D DATADIR]
NOMBRE-SEAL ID-DE-PROCESO

Opciones para detencin y reinicio:


-m MODO-DE-DETENCIN
puede ser smart, fast o immediate
Modos de detencin son:
smart
salir despus que todos los clientes se hayan desconectado
fast
salir directamente, con apagado apropiado
immediate
salir sin apagado completo; se ejecutar recuperacin
en el prximo inicio
Nombres de seales permitidos para kill:
HUP INT QUIT ABRT TERM USR1 USR2

Seguridad en PostgreSQL

Seguridad en la gestin de ficheros

Seguridad en el acceso de los clientes

Seguridad lgica: privilegios

Seguridad: Gestin de ficheros

Ficheros binarios

Ficheros $PGDATA (cluster)

Ficheros de tablespaces

Ficheros de configuracin

Socket para conexiones locales

Seguridad: Acceso clientes (I)

Ficheros de configuracin:

pg_hba.conf

pg_ident.conf

Fichero pg_hba.conf: configuracin de


autenticacin
TIPO
LOCAL
HOST
HOSTSSL
HOSTNOSSL

BASE DATOS
<base datos>
<base datos>
<base datos>
<base datos>

USUARIO DIRECCION
<usuario>
<usuario> <direccionCIDR>
<usuario> <direccionCIDR>
<usuario> <direccionCIDR>

METODO
<metodo-autenticacion [opcin]
<metodo-autenticacion [opcin]
<metodo-autenticacion [opcin]
<metodo-autenticacion [opcin]

Seguridad: Acceso clientes (II)

Mtodos de autenticacin:

Trust
Reject
Password
Crypt
MD5
KRB5
Ident (sameuser / mapeo usuario -> pg_ident.conf)
PAM
LDAP

Seguridad: Nivel lgico

Creacin de roles (superuser, createuser,


createdb)
GRANT y REVOKE:

Bases de datos
Tablespaces
Lenguajes
Esquemas
Tablas y vistas
Procedimientos y funciones

Procesamiento de Instrucciones (I)

Ejecucin de sentencias (envio, anlisis,


preparacin, ejecucin y recuperacin)
Elementos que intervienen:

Shared Buffers (lista sucia)

Discos

Buffers WAL

Ficheros WAL

Procesamiento de Instrucciones (y II)

Gestin de transacciones (I)

Cumplimiento reglas ACID:

Atomicidad (atomicity)

Consistencia (consistency)

Aislamiento (isolatio)

Persistencia (durability)

Gestin transacciones: Atomicidad (II)

Todo o nada

BEGIN / COMMIT / ROLLBACK

Restricciones inmediatas o diferidas

Modo autoconfirmacin

SAVEPOINT
BEGIN;
operaciones1
SAVEPOINT paso2;
operaciones2
si error => ROLLBACK paso2;
operaciones3
COMMIT;

Gestin transacciones: Consistencia (III)

Reglas de integridad:

Not null

Check

Unique

Primary Key

Foreign Key: nicas que son diferibles:

[DEFERRABLE]
[INITIALLY {INMEDIATE | DEFERRED}]

Gestin transacciones: Consistencia (IV)

Foreign Key:
[DEFERRABLE]
[INITIALLY {INMEDIATE | DEFERRED}]

Deferrable: el punto de comprobacin se puede


cambiar dinmicamente

Inmediate: se comprueba despus de cada


sentencia SQL

Deferred: la comprobacin se realiza al final de


la transaccin.

Gestin transacciones: Aislamiento (IV)

Control de concurrencia:

No se basa en el uso bloqueos

Se basa en el uso de MVCC (multiversion


Concurrency Control)

MVCC: cada transaccin ve una


instantnea de la BD tal como era al
empezar la transaccin.
Lectores y escritores no necesitan
esperarse.

Gestin transacciones: Aislamiento (V)

Niveles Aislamiento SQL92:

Nivel
Lectura no confirmada
Lectura confirmada
Lectura repetible
Serializable

Lectura sucia
Posible
No Posible
No Posible
No Posible

Lectura no repetible Lectura Fantasma


Posible
Posible
Posible
Posible
No Posible
Posible
No Posible
No Posible

Bloqueos sobre tablas


a nivel de tabla
a nivel de fila

Bloqueos
Nunca
Si hay actualizaciones
Si hay consultas
Siempre (fcil deadlock)

Gestin transacciones: Persistencia (y VI)

Ficheros WAL (Write-ahead loggin):


ficheros de escritura adelantada.

Ficheros de 16Mb

Procesos REDO / UNDO

Configuracin entorno de ejecucin (I)

Gestin de recursos del Kernel, parmetros:

SHMMAX, SHMMIN, SHMALL, SHMSEG,


SHMNI

SEMMNI, SEMMNS, SEMMSL, SEMMAP,


SEMVMX

Configuracin entorno de ejecucin (II)

Fichero postgresql.conf

Activacin de la modificacin de valores:

Con el servidor en marcha (SET)

Recargando el fichero (pg_ctl reload)

Reiniciando el servidor (pg_ctl restart)

Configuracin entorno - postgresql.conf (III)

Ubicacin de ficheros

Conexin

listen_adresses
Port
max_connections
superuser_reserved_connections
unix_socket_directory

Seguridad y autenticado

ssl

Configuracin entorno - postgresql.conf (IV)

Uso de recursos

shared_buffers
work_mem
max_prepared_transaction
max_fsm_relations
max_fsm_pages
max_lock_per_transaction
Retraso de vacuum
Proceso de fondo writer

WAL

wal_buffers
checkpoints_segments
checkpoint_timeout

Configuracin entorno - postgresql.conf (V)

Ajuste de rendimiento de consultas

Errores / fichero de seguimiento

Lugar de seguimiento
Cundo se efecta
Qu se registra

Estadsticas (recoleccin)

Vacuum

Conexin cliente

search_path
default_transaction_isolation
datestyle
client_encoding

Configuracin entorno - postgresql.conf (y VI)

Gestin de bloqueos

deadlock_timeout

Opciones predefinidas

slo se pueden cambiar en la instalacin

block_size
integer_datetime
lc_collate, lc_ctype
max_identifier_length
max_ident_keys
server_encoding

Internacionalizacin y localizacin (I)

Mensajes en varios idiomas

Mensajes en varios juegos de caracteres

Diversos tipos de ordenaciones

Clasificacin de caracteres

Formatos de monedas, fechas, etc.

<idioma>_<ubicacion>.<cjto_caracteres>@<modificadores>

Codificacin: Responsabilidades (II)

Juego de caracteres en la base de datos =


Administrador de base de datos
Juego de caracteres en las aplicaciones =
Responsable de las aplicaciones
En el proceso de migracin es posible que
estos dos juegos sean distintos. Ejemplo
estado actual: base de datos en UTF8 y
aplicaciones en ISO-8859-1/15

Codificacin: ejemplos problemas (III)

Error al usar codificaciones distintas:

Espaa (UTF8) --> Espaa (Latin1)

Jess Prez (Latin1) --> Jes?s P?ez (UTF8)

Cundo se puede dar este problema?:

Terminales distintas
Uso de editores incorrectos
Transmisiones de ficheros: FTP, CVS ...

Copias de seguridad y Recuperacin (I)

Copias de seguridad

Recuperacin de datos

Migracin de versiones

Copias de seguridad(II)

Copia de seguridad de ficheros del S.O.

Base de datos parada

No se pueden recuperar partes

Volcado SQL

pg_dump

pg_dumpall

Volcado en lnea y recuperacin PITR

Conviene automatizar: cron, scripts ...

Copias de seguridad pg_dump (III)

Volcar una bd o parte de ella.

En texto plano:

Fichero de texto con instrucciones SQL

Uso de psql para restaurar

Portable a servidores SQL

En formato propio de PostgreSQL

Se usa pg_restore para restaurar

Ms flexible

Con pg_restore se puede crear archivo SQL.

Copias de seguridad pg_dump (IV)


Uso:

pg_dump [OPCIN]... [NOMBREDB]

Opciones generales:
-f, --file=ARCHIVO
-F, --format=c|t|p
-i, --ignore-version
-Z, --compress=0-9

nombre del archivo de salida


Formato del archivo de salida
(personalizado, tar, slo texto)
procede an cuando las versiones del servidor
y pg_dump no coinciden
nivel de compresin para formatos comprimidos

Opciones que controlan el contenido de la salida:


-a, --data-only
extrae slo los datos, no el esquema
-b, --blobs
incluye objetos grandes en la extraccin
-C, --create
incluye comandos para crear la base de datos
en la extraccin
-d, --inserts
extrae los datos usando INSERT, en vez de COPY
-D, --column-inserts
extrae los datos usando INSERT con nombres
de columnas
-E, --encoding=CODIFIC extrae los datos con la codificacin CODIFIC
-n, --schema=ESQUEMA
extrae slo el esquema nombrado
-N, --exclude-schema=ESQUEMA
NO extrae el o los esquemas listados
-o, --oids
incluye OIDs en la extraccin
-O, --no-owner
en formato de slo texto, no reestablecer
los dueos de los objetos
-s, --schema-only
extrae slo el esquema, no los datos
-t, --table=TABLE
extrae slo la tabla nombrada
-x, --no-privileges
no extrae los privilegios (grant/revoke)
--use-set-session-authorization
usa comandos SESSION AUTHORIZATION en lugar de
comandos OWNER TO

Copias de seguridad pg_dump (V)


Uso: pg_dump [OPCIN]... [NOMBREDB]
Opciones de la conexin:
-h, --host=ANFITRIN
-p, --port=PUERTO
-U, --username=USUARIO
-W, --password

anfitrin de la base de datos o el


directorio del enchufe (socket)
nmero del puerto de la base de datos
nombre de usuario con el cual conectarse
fuerza un prompt para la contrasea
(debera ser automtico)

Si no se especifica un nombre de base de datos entonces el valor de la variable de


ambiente PGDATABASE es usado.

Copias de seguridad pg_dumpall (VI)

Diferencias con pg_dump


No permite fichero de salida: uso de
redireccin

No permite formatos: siempre texto plano

Opcin '-g': exportar objetos globales

Copias de seguridad pg_dumpall (VII)


Uso: pg_dumpall [OPCIN]...
Opciones que controlan el contenido de la salida:
-a, --data-only
extrae slo los datos, no el esquema
-c, --clean
tira la base de datos antes de crearla
-d, --inserts
extrae los datos usando INSERT, en vez de COPY
-D, --column-inserts extrae los datos usando INSERT con nombres de columnas
-g, --globals-only
extrae slo los objetos globales, no bases de datos
-o, --oids
incluye OIDs en la extraccin
-O, --no-owner
no reestablece los dueos de los objetos
-s, --schema-only
extrae slo el esquema, no los datos
-S, --superuser=NAME especifica el nombre del superusuario a usar en el guin
-x, --no-privileges
no extrae los privilegios (grant/revoke)
-X use-set-session-authorization,
--use-set-session-authorization usa comandos SESSION AUTHORIZATION en lugar de comandos OWNER TO
Opciones de la conexin:
-h, --host=ANFITRIN anfitrin de la base de datos o el directorio del enchufe (socket)
-p, --port=PUERTO
nmero del puerto de la base de datos
-U, --username=USUARIO nombre de usuario con el cual conectarse
-W, --password
fuerza un prompt para la contrasea (debera ser automtico)

Recuperacin de Datos (I)

Con psql a partir de un fichero SQL

Con pg_restore

Directamente a una base de datos

Volcando a fichero SQL

Volcado en lnea y recuperacin PITR

Habilitar archivado WAL

Copias de seguridad en lnea

Recuperacin PITR

Recuperacin Datos: Volcado Lnea + PITR (y II)

Habilitar archivado WAL

Copias de seguridad en lnea

Parmetro archive_command
Select pg_start_backup('nombre_backup');
Copia fsica
Select pg_stop_backup();

Recuperacin PITR

Parar base datos


Recuperar copia fsica
Copiar ficheros WAL de la copia
Fichero recovery.conf
Arrancar base datos

COPY TO / COPY FROM


Copiar datos de una consulta
a un fichero

Copiar datos de un fichero a


una tabla

COPY tablename [ ( column [, ...] ) ]


FROM { 'filename' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ]
[ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ];

COPY { tablename [ ( column [, ...] ) ] | ( query ) }


TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ HEADER ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ HEADER ] [ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE column [, ...] ];

VACUUM (I)

Funciones:

Recuperar espacio en disco (filas modificadas


o borradas)

Actualizar estadsticas

Evitar prdidas de datos antiguos por reuso de


identificador de transacciones

Ejecutar

desde S.O. o desde SQL

Sobre una tabla o sobre la base de datos

VACUUM (y II)

Opciones

FULL: libera y reorganiza

No FULL: solo libera

ANALYZE

FREEZE: inicializa XID (identif. transacciones)

Estrategias

Autovacuum

REINDEX

Desde S.O.

Desde SQL

De tablas, ndices, base de datos y sistema

Cuidado con los archivos WAL

Fichero de Seguimiento

Formas de seguimiento

Conveniencia de rotacin de logs:

Salida estandar
Fichero indicado al iniciar
Usar syslog del sistema
Mejor informacin
Mejor rendimiento

Parmetros en postgresql.conf

Dnde y cmo
Cundo
Qu

Catlogo del Sistema

Conjunto de tablas y vistas: constituyen un


diccionario con metadatos
Catlogo compartido (todo el cluster):

Pocas tablas: pg_databases, pg_shadow,


pg_group ...

Catlogo de cada base de datos: la mayora


de tablas y vistas. Esquemas:

pg_catalog

pg_toast

Monitorizacin (I)

De la actividad de la base de datos

Por comandos del sistema operativo

Usando el recolector de estadsticas

Consultado pg_locks

Compilarlo con traza dinmica

Del uso de los discos

Monitorizacin: actividad base datos (II)

Por comandos del sistema operativo

ps

top

vmstat

iostat

free

Monitorizacin: actividad base de datos (III)

Uso del recolector de estadsticas:

Informacin de:

Acceso a las tablas e ndices


Instrucciones ejecutadas
Lecturas de disco
Uso de la cach, etc.

postgresql.conf: start_stat_collector

Tipos:

pg_stat*: frecuencias y tipos de accesos


pg_statio*: entrada/salida fsica
pg_locks: bloqueos y transacciones

Monitorizacin: uso de los discos (IV)

Controlado por postgresql: el dba no tiene


control
Fichero inicial (heap) y fichero de desborde
(toast)
Formas de contro:

Vistas del catlogo

Extensiones contrib:

dbsize
oid2name

Afinamiento, mejora del rendimiento (I)

Gestin del diario (WAL)

checkpoint_segments

checkpoint_timeout

Buffers de diario (cach WAL)

wal_buffers

fsync / wal_sync_method

commit_delay

Afinamiento, mejora del rendimiento (II)

Cach de base de datos

Minimizar acceso a disco

Aumentar shared_buffers (shmmax, shmmni,


shmall)

Uso de vistas pg_statio*

Acceso a discos

Reindex, vacuum, autovacuum

Uso de tablespaces

Control de toast

Afinamiento, mejora del rendimiento (III)

Optimizacin de consultas

Elementos:

Analizador (anlisis sintctico y semntico)


Planificador (generacin planes ejecucin)
Optimizador (bsqueda plan ms econmico)

Uso de ndices (btree, rtree, hash, GiST) para


bsquedas y ordenaciones

Uso de EXPLAIN para ver el plan de ejecucin

Otros aspectos

Pseudo-columnas del sistema: oid, ctid,


tableoid ...
Secuencias para Pks
Tipos bsicos especiales: point, polygon,
cidr, macaddr, etc.
Tipos compuestos
Herencia de tablas: de datos, no de
estructura.

Prximos pasos

Consultar documentacin de PostgreSQL

Buscar en proyectos de PostgreSQL

Curso para Desarrolladores (programacin


con PostgreSQL)
Curso de optimizacin SQL
Cluster, alta disponibilidad, balanceo de
carga, etc.

Resumen

Objetivos

Plan del curso

Metodologa y Materiales

Desarrollo del curso

Prximos pasos

FIN

Conclusiones
Opiniones del curso a alarcon_jos@gva.es

Muchas gracias
Jos M. Alarcn Medina