Administración de PostgreSQL

Jose M. Alarcón Medina (ITI - Formación)

Resumen
● Objetivos
● Plan del curso
● Metodología y Materiales
● Desarrollo del curso
● Próximos pasos

Objetivos
● Proporcionar a los profesionales
responsables de las bases de datos los
conocimientos para la instalación y
administración de una base de datos
PostgreSQL.
● El alumno al finalizar el curso sabrá cómo
instalar PostgreSQL, configurar el entorno
así como administrar los recursos que
proporciona la base de datos.

Plan del curso (I) ● Dia I: – Presentación e Introducción – Estructura física y lógica ● Día II: – Instalación y Desinstalación – Puesta en marcha ● Día III: – Seguridad – Procesamiento de instrucciones y transacciones .

Plan del curso (y II) ● Día IV: – Configuración – Copias de seguridad y respaldo – Tareas administrativas ● Día V: – Rendimiento – Monitorización – Afinamiento – Catálogo del Sistema – Otros temas .

es/alarmedi/iti2007 . – Se proporcionaran ejercicios para realizar las prácticas. ● Materiales: – Manual del curso – Boletines de prácticas con soluciones – Scripts de ayuda y ejemplo – http://www. Metodología y Materiales ● Metodología: – Las clases teórico-prácticas. – El alumno al finalizar el curso sabrá cómo instalar PostgreSQL. así como instalaciones en sus ordenadores. configurar el entorno así como administrar los recursos que proporciona la base de datos.uv. – Servidor central al que puedan conectarse los alumnos.

Desarrollo del Curso .

Lenguajes ● Historia PostgreSQL ● Uso de las herramientas ● Psql y pgAdmin3 . Introducción ● Presentación ● SGBD.

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 Física – Zona Memoria Compartida – Socket de TCP/IP – Almacenamiento en disco ● INITDB: Creación del cluster – Ficheros – Directorios .

--encoding=CODIFICACION codificación por omisión para nuevas bases de datos ● --locale=LOCALE inicializar usando esta configuración local ● -A. Estructura PostgreSQL – initdb (III) ● Opciones: ● [-D. --help mostrar esta ayuda y salir Si el directorio de datos no es especificado. --pgdata=]DATADIR ubicación para este cluster de bases de datos ● -E. --username=USUARIO nombre del superusuario del cluster ● -?. se usa la variable de ambiente PGDATA. . --auth=METODO método de autentificación por omisión para conexiones locales ● -U.

Estructura PostgreSQL (IV) ● Estructura Lógica – Bases de Datos – Tablespaces – Roles de grupo – Roles de login ● Forman el CLUSTER DE BASE DE DATOS .

. --username=USUARIO nombre de usuario para la conexión -W. --echo mostrar los comandos enviados al servidor -q. se creará una base de datos con el mismo nombre que el usuario actual. --port=PUERTO puerto del servidor -U. --quiet no desplegar mensajes --help mostrar esta ayuda y salir --version mostrar el n·mero de versión y salir Opciones de conexión: -h. --password preguntar la contraseña Si no se especifica. --encoding=CODIFICACIÓN codificación para la base de datos -O. Estructura Lógica: Creación bases de datos (V) $ createdb [OPCIÓN]. --template=PATRÓN base de datos patrón a copiar -e. [NOMBRE] [DESCRIPCIÓN] Opciones: -D.. --tablespace=TBLSPC tablespace por omisión de la base de datos -E.. --host=ANFITRIÓN nombre del servidor o directorio del socket -p. --owner=DUEÑO usuario que será dueño de la base de datos -T.

Estructura Lógica: Creación bases de datos (VI) Desde SQL: CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ]. .

--no-createdb el rol no podrá crear bases de datos -r. --createdb el rol podrá crear bases de datos -D. --login el rol podrá conectarse (predeterminado) -L.. --no-login el rol no podrá conectarse -i. --no-superuser el rol no será un superusuario -d. --echo mostrar los comandos a medida que se ejecutan -q. --connection-limit=N límite de conexiones para el rol (predeterminado: sin límite) -P. --unencrypted almacenar la contraseña sin cifrar -e. --encrypted almacenar la constraseña cifrada -N. --pwprompt asignar una contraseña al nuevo rol -E. [ROL] Opciones: -s. Estructura Lógica: Creación usuarios y roles (VII) createuser [OPCIÓN]. --superuser el rol será un superusuario -S. --inherit el rol heredará los privilegios de los roles de los cuales es miembro (predeterminado) -I.. --no-inherit rol no heredará privilegios -c. --quiet no escribir ningún mensaje --help desplegar esta ayuda y salir --version desplegar información de versión y salir . --createrole el rol podrá crear otros roles -R. --no-createrole el rol no podrá crear otros roles -l.

. .. Estructura Lógica: Creación usuarios y roles (VIII) .] | ROLE rolename [. -d.. --username=NOMBRE nombre de usuario con el cual conectarse (no el usuario a crear) -W.. --password pedir contraseña para conectarse Si no se especifican -s. ...] | ADMIN rolename [.. --port=PUERTO puerto del servidor -U.] | USER rolename [. se preguntará interactivamente.] | IN GROUP rolename [. --host=ANFITRIÓN nombre del servidor o directorio del socket -p. -S. ..... . ..] | SYSID uid . -D.. Desde SQL: CREATE ROLE name [ [ WITH ] option [ .. [ROL] Opciones de conexión: -h. ] ] 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 [.. -R o el ROL.. Continuación createuser [OPCIÓN]. -r.

Estructura Lógica: Creación de tablespaces (y IX) CREATE TABLESPACE tablespacename [ OWNER username ] LOCATION 'directory' .

Instalación / Desinstalación (I) ● Instalación para Windows ● Instalación para Linux – Desde paquetes ● Debian (apt-get) ● RedHat – SUSE (rpm) – Desde ficheros fuente .

Instalación / Desinstalación Desde ficheros fuente (II) ● Instalación – Decisiones iniciales – Requerimientos de instalación y hardware – Configuración del entorno – Descarga del software – Compilación y enlazado – Configuración del usuario propietario ● Instalación de un cliente ● Desinstalación .

Instalación / Desinstalación Migraciones (III) ● Migraciones – Sin conservar el cluster – Conservando el cluster ● Instalación de varios PostgreSQL en el mismo servidor .

Instalación / Desinstalación Más cosas (y IV) ● Configuración: – Parámetros del Kernel – Parámetros de funcionamiento ● Instalación 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 automática .

Puesta en Marcha
postmaster - postgres (II)
postmaster [OPCION]...

Opciones:

-B NBUFFERS número de búfers de memoria compartida
-c VAR=VALOR definir parámetro de ejecución
-d 1-5 nivel de depuración
-D DATADIR directorio de bases de datos
-e usar estilo europeo de fechas (DMY)
-F desactivar fsync
-h NOMBRE nombre de host o dirección IP en que escuchar
-i activar conexiones TCP/IP
-k DIRECTORIO ubicación del socket Unix
-N MAX-CONN número máximo de conexiones permitidas
-o OPCIONES pasar «OPCIONES» a cada proceso servidor (obsoleto)
-p PUERTO número de puerto en el cual escuchar
-s mostrar estadísticas después de cada consulta
-S WORK-MEM mostrar cantidad de memoria para ordenamientos (en kB)
--NOMBRE=VALOR definir parámetro de ejecución
--describe-config
mostrar parámetros de configuración y salir
--help desplegar esta ayuda y salir
--version desplegar número de versión 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 después de salida anormal
-O permitir cambios en estructura de tablas de sistema
-P desactivar índices de sistema
-t pa|pl|ex mostrar tiempos después de cada consulta
-T enviar SIGSTOP a todos los backends si uno de ellos muere
-W NÚM espera NÚM 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 omisión es el nombre de usuario)
-d 0-5 nivel de depuración
-E mostrar las consultas antes de su ejecución
-j no usar saltos de línea como delimitadores de consulta
-r ARCHIVO enviar salida estándar 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 estándar y de error a ARCHIVO
-x NUM uso interno

Puesta en Marcha
pg_ctl (IV)
Empleo:
pg_ctl start [-w] [-D DATADIR] [-s] [-l ARCHIVO] [-o «OPCIONES»]
pg_ctl stop [-W] [-D DATADIR] [-s] [-m MODO-DETENCIÓN]
pg_ctl restart [-w] [-D DATADIR] [-s] [-m MODO-DETENCIÓN] [-o «OPCIONES»]
pg_ctl reload [-D DATADIR] [-s]
pg_ctl status [-D DATADIR]
pg_ctl kill NOMBRE-SEÑAL ID-DE-PROCESO

Opciones comunes:
-D, --pgdata DATADIR ubicación del área de almacenamiento de datos
-s, --silent mostrar sólo errores, no mensajes de información
-w esperar hasta que la operación se haya completado
-W no esperar hasta que la operación se haya completado
--help mostrar este texto y salir
--version mostrar información sobre versión y salir
(Por omisión se espera para las detenciones, pero no los inicios o reinicios)

Si la opción -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 parámetros de línea de órdenes a pasar a postgres
(ejecutable del servidor de PostgreSQL)
-p RUTA-A-POSTGRES normalmente no es necesario

se ejecutará recuperación en el próximo inicio Nombres de señales permitidos para kill: HUP INT QUIT ABRT TERM USR1 USR2 . Puesta en Marcha pg_ctl (V) --.continuación Empleo: pg_ctl start [-w] [-D DATADIR] [-s] [-l ARCHIVO] [-o «OPCIONES»] pg_ctl stop [-W] [-D DATADIR] [-s] [-m MODO-DETENCIÓN] pg_ctl restart [-w] [-D DATADIR] [-s] [-m MODO-DETENCIÓN] [-o «OPCIONES»] pg_ctl reload [-D DATADIR] [-s] pg_ctl status [-D DATADIR] pg_ctl kill NOMBRE-SEÑAL ID-DE-PROCESO Opciones para detención y reinicio: -m MODO-DE-DETENCIÓN puede ser «smart». con apagado apropiado immediate salir sin apagado completo. «fast» o «immediate» Modos de detención son: smart salir después que todos los clientes se hayan desconectado fast salir directamente.

Seguridad en PostgreSQL ● Seguridad en la gestión de ficheros ● Seguridad en el acceso de los clientes ● Seguridad lógica: privilegios .

Seguridad: Gestión de ficheros ● Ficheros binarios ● Ficheros $PGDATA (cluster) ● Ficheros de tablespaces ● Ficheros de configuración ● Socket para conexiones locales .

conf ● Fichero pg_hba. Seguridad: Acceso clientes (I) ● Ficheros de configuración: – pg_hba.conf: configuración de autenticación TIPO BASE DATOS USUARIO DIRECCION METODO LOCAL <base datos> <usuario> <metodo-autenticacion [opción] HOST <base datos> <usuario> <direccionCIDR> <metodo-autenticacion [opción] HOSTSSL <base datos> <usuario> <direccionCIDR> <metodo-autenticacion [opción] HOSTNOSSL <base datos> <usuario> <direccionCIDR> <metodo-autenticacion [opción] .conf – pg_ident.

Seguridad: Acceso clientes (II) ● Métodos de autenticación: – Trust – Reject – Password – Crypt – MD5 – KRB5 – Ident (sameuser / mapeo usuario -> pg_ident.conf) – PAM – LDAP .

createuser. Seguridad: Nivel lógico ● Creación de roles (superuser. createdb) ● GRANT y REVOKE: – Bases de datos – Tablespaces – Lenguajes – Esquemas – Tablas y vistas – Procedimientos y funciones .

ejecución y recuperación) ● Elementos que intervienen: – Shared Buffers (lista sucia) – Discos – Buffers WAL – Ficheros WAL .Procesamiento de Instrucciones (I) ● Ejecución de sentencias (envio. preparación. análisis.

Procesamiento de Instrucciones (y II) .

Gestión de transacciones (I) ● Cumplimiento reglas ACID: – Atomicidad (atomicity) – Consistencia (consistency) – Aislamiento (isolatio) – Persistencia (durability) .

… operaciones2 … si error => ROLLBACK paso2.Gestión transacciones: Atomicidad (II) ● Todo o nada ● BEGIN / COMMIT / ROLLBACK – Restricciones inmediatas o diferidas – Modo autoconfirmación ● SAVEPOINT BEGIN. … operaciones1 SAVEPOINT paso2. … operaciones3 COMMIT. .

Gestión transacciones: Consistencia (III) ● Reglas de integridad: – Not null – Check – Unique – Primary Key – Foreign Key: únicas que son diferibles: [DEFERRABLE] [INITIALLY {INMEDIATE | DEFERRED}] .

Gestión transacciones: Consistencia (IV) ● Foreign Key: [DEFERRABLE] [INITIALLY {INMEDIATE | DEFERRED}] – Deferrable: el punto de comprobación se puede cambiar dinámicamente – Inmediate: se comprueba después de cada sentencia SQL – Deferred: la comprobación se realiza al final de la transacción. .

. Gestión 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 transacción ve una “instantánea” de la BD tal como era al empezar la transacción. ● Lectores y escritores no necesitan esperarse.

Gestión transacciones: Aislamiento (V) ● Niveles Aislamiento SQL92: Nivel Lectura sucia Lectura no repetible Lectura Fantasma Bloqueos Lectura no confirmada Posible Posible Posible Nunca Lectura confirmada No Posible Posible Posible Si hay actualizaciones Lectura repetible No Posible No Posible Posible Si hay consultas Serializable No Posible No Posible No Posible Siempre (fácil deadlock) ● Bloqueos sobre tablas – a nivel de tabla – a nivel de fila .

● Ficheros de 16Mb ● Procesos REDO / UNDO .Gestión transacciones: Persistencia (y VI) ● Ficheros WAL (Write-ahead loggin): ficheros de escritura adelantada.

SEMVMX . SEMMSL. parámetros: – SHMMAX. SHMSEG. SHMMIN. Configuración entorno de ejecución (I) ● Gestión de recursos del Kernel. SHMNI – SEMMNI. SEMMAP. SHMALL. SEMMNS.

Configuración entorno de ejecución (II) ● Fichero postgresql.conf ● Activación de la modificación de valores: – Con el servidor en marcha (SET) – Recargando el fichero (pg_ctl reload) – Reiniciando el servidor (pg_ctl restart) .

conf (III) ● Ubicación de ficheros ● Conexión – listen_adresses – Port – max_connections – superuser_reserved_connections – unix_socket_directory ● Seguridad y autenticado – ssl . Configuración entorno .postgresql.

postgresql. Configuración entorno .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 .

conf (V) ● Ajuste de rendimiento de consultas ● Errores / fichero de seguimiento – Lugar de seguimiento – Cuándo se efectúa – Qué se registra ● Estadísticas (recolección) ● Vacuum ● Conexión cliente – search_path – default_transaction_isolation – datestyle – client_encoding .postgresql. Configuración entorno .

postgresql.conf (y VI) ● Gestión de bloqueos – deadlock_timeout – ● Opciones predefinidas – sólo se pueden cambiar en la instalación – block_size – integer_datetime – lc_collate. Configuración entorno . lc_ctype – max_identifier_length – max_ident_keys – server_encoding .

etc. <idioma>_<ubicacion>. fechas. Internacionalización y localización (I) ● Mensajes en varios idiomas ● Mensajes en varios juegos de caracteres ● Diversos tipos de ordenaciones ● Clasificación de caracteres ● Formatos de monedas.<cjto_caracteres>@<modificadores> .

Ejemplo estado actual: base de datos en UTF8 y aplicaciones en ISO-8859-1/15 .Codificación: 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 migración es posible que estos dos juegos sean distintos.

.. CVS .Codificación: ejemplos problemas (III) ● Error al usar codificaciones distintas: – España (UTF8) --> España (Latin1) – Jesús Pérez (Latin1) --> Jes?s P?ez (UTF8) ¿Cuándo se puede dar este problema?: ● Terminales distintas ● Uso de editores incorrectos ● Transmisiones de ficheros: FTP..

Copias de seguridad y Recuperación (I) ● Copias de seguridad ● Recuperación de datos ● Migración de versiones .

– Base de datos parada – No se pueden recuperar partes ● Volcado SQL – pg_dump – pg_dumpall ● Volcado en línea y recuperación PITR ● Conviene automatizar: cron. ...O. scripts . Copias de seguridad(II) ● Copia de seguridad de ficheros del S.

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 – Más flexible – Con pg_restore se puede crear archivo SQL.

. --blobs incluye objetos grandes en la extracción -C. --schema=ESQUEMA extrae sólo el esquema nombrado -N. --oids incluye OIDs en la extracción -O. --compress=0-9 nivel de compresión para formatos comprimidos Opciones que controlan el contenido de la salida: -a. --create incluye comandos para crear la base de datos en la extracción -d. sólo texto) -i. --data-only extrae sólo los datos. [NOMBREDB] Opciones generales: -f. --column-inserts extrae los datos usando INSERT con nombres de columnas -E. --ignore-version procede aún cuando las versiones del servidor y pg_dump no coinciden -Z.. no los datos -t. --exclude-schema=ESQUEMA NO extrae el o los esquemas listados -o. --encoding=CODIFIC extrae los datos con la codificación CODIFIC -n. no reestablecer los dueños de los objetos -s. --no-privileges no extrae los privilegios (grant/revoke) --use-set-session-authorization usa comandos SESSION AUTHORIZATION en lugar de comandos OWNER TO . --table=TABLE extrae sólo la tabla nombrada -x. en vez de COPY -D. Copias de seguridad – pg_dump (IV) Uso: pg_dump [OPCIÓN]. --no-owner en formato de sólo texto. --schema-only extrae sólo el esquema. --inserts extrae los datos usando INSERT. no el esquema -b. --file=ARCHIVO nombre del archivo de salida -F. --format=c|t|p Formato del archivo de salida (personalizado. tar.

--port=PUERTO número del puerto de la base de datos -U. [NOMBREDB] Opciones de la conexión: -h. --host=ANFITRIÓN anfitrión de la base de datos o el directorio del enchufe (socket) -p.. Copias de seguridad – pg_dump (V) Uso: pg_dump [OPCIÓN]. --password fuerza un prompt para la contraseña (debería ser automático) Si no se especifica un nombre de base de datos entonces el valor de la variable de ambiente PGDATABASE es usado. --username=USUARIO nombre de usuario con el cual conectarse -W.. .

Copias de seguridad – pg_dumpall (VI) ● Diferencias con pg_dump ● No permite fichero de salida: uso de redirección ● No permite formatos: siempre texto plano ● Opción '-g': exportar objetos globales .

Copias de seguridad – pg_dumpall (VII) Uso: pg_dumpall [OPCIÓN].. --oids incluye OIDs en la extracción -O. --password fuerza un prompt para la contraseña (debería ser automático) . --superuser=NAME especifica el nombre del superusuario a usar en el guión -x. --port=PUERTO número del puerto de la base de datos -U. --clean tira la base de datos antes de crearla -d. --use-set-session-authorization usa comandos SESSION AUTHORIZATION en lugar de comandos OWNER TO Opciones de la conexión: -h. --data-only extrae sólo los datos. en vez de COPY -D. --column-inserts extrae los datos usando INSERT con nombres de columnas -g. --no-owner no reestablece los dueños de los objetos -s. --username=USUARIO nombre de usuario con el cual conectarse -W. no el esquema -c. Opciones que controlan el contenido de la salida: -a. --schema-only extrae sólo el esquema. --inserts extrae los datos usando INSERT. --no-privileges no extrae los privilegios (grant/revoke) -X use-set-session-authorization. no los datos -S. no bases de datos -o. --globals-only extrae sólo los objetos globales.. --host=ANFITRIÓN anfitrión de la base de datos o el directorio del enchufe (socket) -p.

Recuperación 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 línea y recuperación PITR – Habilitar archivado WAL – Copias de seguridad en línea – Recuperación PITR .

● Recuperación PITR – Parar base datos – Recuperar copia física – Copiar ficheros WAL de la copia – Fichero recovery.Recuperación Datos: Volcado Línea + PITR (y II) ● Habilitar archivado WAL – Parámetro archive_command ● Copias de seguridad en línea – Select pg_start_backup('nombre_backup').conf – Arrancar base datos . – Copia física – Select pg_stop_backup().

..] ]. . ..] ) ] | ( query ) } FROM { 'filename' | STDIN } TO { 'filename' | STDOUT } [ [ WITH ] [ [ WITH ] [ BINARY ] [ BINARY ] [ OIDS ] [ HEADER ] [ DELIMITER [ AS ] 'delimiter' ] [ OIDS ] [ NULL [ AS ] 'null string' ] [ DELIMITER [ AS ] 'delimiter' ] [ CSV [ HEADER ] [ NULL [ AS ] 'null string' ] [ QUOTE [ AS ] 'quote' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote' ] [ ESCAPE [ AS ] 'escape' ] [ ESCAPE [ AS ] 'escape' ] [ FORCE NOT NULL column [. COPY TO / COPY FROM Copiar datos de una consulta Copiar datos de un fichero a a un fichero una tabla COPY tablename [ ( column [.....] ].. [ FORCE QUOTE column [.. .] ) ] COPY { tablename [ ( column [. .

O. VACUUM (I) ● Funciones: – Recuperar espacio en disco (filas modificadas o borradas) – Actualizar estadísticas – Evitar pérdidas de datos antiguos por reuso de identificador de transacciones ● Ejecutar – desde S. 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 .

O. índices. base de datos y sistema ● Cuidado con los archivos WAL . REINDEX ● Desde S. ● Desde SQL ● De tablas.

conf – Dónde y cómo – Cuándo – Qué . Fichero de Seguimiento ● Formas de seguimiento – Salida estandar – Fichero indicado al iniciar – Usar syslog del sistema ● Conveniencia de rotación de logs: – Mejor información – Mejor rendimiento ● Parámetros en postgresql.

● Catálogo de cada base de datos: la mayoría de tablas y vistas. pg_group .. Esquemas: – pg_catalog – pg_toast . Catálogo del Sistema ● Conjunto de tablas y vistas: constituyen un diccionario con metadatos ● Catálogo compartido (todo el cluster): – Pocas tablas: pg_databases.. pg_shadow.

Monitorización (I) ● De la actividad de la base de datos – Por comandos del sistema operativo – Usando el recolector de estadísticas – Consultado pg_locks – Compilarlo con traza dinámica ● Del uso de los discos .

Monitorización: actividad base datos (II) ● Por comandos del sistema operativo – ps – top – vmstat – iostat – free .

etc. – postgresql. Monitorización: actividad base de datos (III) ● Uso del recolector de estadísticas: – Información de: ● Acceso a las tablas e índices ● Instrucciones ejecutadas ● Lecturas de disco ● Uso de la caché.conf: start_stat_collector – Tipos: ● pg_stat*: frecuencias y tipos de accesos ● pg_statio*: entrada/salida física ● pg_locks: bloqueos y transacciones .

Monitorización: 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 catálogo – Extensiones “contrib”: ● dbsize ● oid2name .

Afinamiento. mejora del rendimiento (I) ● Gestión del diario (WAL) – checkpoint_segments – checkpoint_timeout ● Buffers de diario (caché WAL) – wal_buffers – fsync / wal_sync_method – commit_delay .

shmall) – Uso de vistas pg_statio* ● Acceso a discos – Reindex. Afinamiento. vacuum. autovacuum – Uso de tablespaces – Control de toast . shmmni. mejora del rendimiento (II) ● Caché de base de datos – Minimizar acceso a disco – Aumentar shared_buffers (shmmax.

mejora del rendimiento (III) ● Optimización de consultas – Elementos: ● Analizador (análisis sintáctico y semántico) ● Planificador (generación planes ejecución) ● Optimizador (búsqueda plan más económico) – Uso de índices (btree. hash. GiST) para búsquedas y ordenaciones – Uso de EXPLAIN para ver el plan de ejecución . rtree. Afinamiento.

tableoid . ... ctid. etc. cidr. Otros aspectos ● Pseudo-columnas del sistema: oid. polygon. ● Secuencias para Pks ● Tipos básicos especiales: point. ● Tipos compuestos ● Herencia de tablas: de datos. macaddr. no de estructura.

alta disponibilidad. . Próximos pasos ● Consultar documentación de PostgreSQL ● Buscar en proyectos de PostgreSQL ● Curso para Desarrolladores (programación con PostgreSQL) ● Curso de optimización SQL ● Cluster. etc. balanceo de carga.

Resumen ● Objetivos ● Plan del curso ● Metodología y Materiales ● Desarrollo del curso ● Próximos pasos .

FIN ● Conclusiones ● Opiniones del curso a alarcon_jos@gva.es Muchas gracias José M. Alarcón Medina .