PostgreSQL es un sistema de gestión de base de datos objeto-relacionales robusto y de código abierto que sigue la norma ACID. Usa el modelo cliente-servidor y el control de concurrencia multi-versión para permitir múltiples transacciones concurrentes. Almacena los datos en páginas de memoria y usa índices como B-trees para mejorar el rendimiento de las consultas. Ofrece funciones como vaciado y copias de seguridad para optimizar el espacio en disco y recuperar la base de datos.
2. Agenda
Definición: ¿Qué es PostgreSQL?
Entrando a Postgres…
Reseña histórica y características básicas.
Arquitectura Básica.
Modelo Cliente – Servidor.
Manejo de Memoria.
Almacenamiento
Índices
Restauración
Manejo de la concurrencia.
Diccionario de Datos / Directorio.
3. ¿Qué es PostgreSQL?
¿Un simple SMBD?
Más que eso:
Un poderoso
sistema de gestión
de base de datos
objeto-relacionales.
Fiel cumplidor de la
norma ACID
4. Entrando a Postgres…
Nace en 1982 en la Universidad de
Berkeley.
Su primer nombre fue Ingres. Robusto como su
logo,
corre en casi cualquier
Sistema Operativo. Diseñado para ambientes
de alto volumen de
transacciones.
De código abierto.
En 1994 empieza a utilizar
el lenguaje SQL.
6. Manejo de Memoria
En todos los sistemas de gestión de base de
datos, los datos se guardan en páginas de
memoria…… Postgres no es la
excepción:
Tamaños de página desde
8 K hasta 32 K.
¿data muy grande?
It’s TOAST time!
A picar se ha dicho.
7. Manejo de Memoria
El Storage
Manager:
Todo Update es una inserción en vez de
un cambio de las tuplas.
No requiere la ejecución de un código de
recuperación si el sistema falla.
Esquema WORM: Write-Once-Read-
Many.
Almacenamiento por bloques.
Aprovecha el hardware especializado
como procesadores múltiples y memoria
no volátil. Para cada usuario que lee, tiene una
copia del dato disponible…
9. Manejo de Memoria
¡El maravilloso
Vacuum! Libera espacio en
disco. Mantiene actualizadas las
estadísticas de de datos
utilizados por el planificador de
consultas SQL.¿Cómo
funciona? Primero escribe un registro de archivo y de sus
registros de índice asociados.
Luego crea un nuevo punto de anclaje en la base de
datos actual (Checkpoint).
Libera el espacio ocupado por el punto de anclaje
más antiguo.
12. Índices
Los índices se utilizan para
acelerar las consultas.
Son también
archivos.
Y con ustedes… Los
índices
13. Índices
Índices por
valor Su campo clave
es…… una columna.
La sentencia para su creación sería:
CREATE [UNIQUE] INDEX nombre_indice ON
TABLE [USING nombre_acceso] (columna)
14. Índices
Índice funcional
Se define por el resultado de
una función.
Acceso más veloz.
La sentencia para su creación sería:
CREATE [UNIQUE] INDEX nombre_indice ON
TABLE [USING nombre_acceso]
(nombre_funcion (r”>columna|e>[,…]) )
15. Índices
Índices
primarios Se crean automáticamente
cuando establecemos un
campo como clave primaria.
Aunque se crean
automáticamente, pueden
crearse manualmente para
campos que creamos
relevantes.
La sentencia para su creación sería:
CREATE INDX nombre_indice ON table
16. Índices
Índices
secundarios B-Tree (Árbol B).
R-Tree (Árbol R) (Descontinuados).
Gist (Sustituye al R-Tree): se utilizan en una
búsqueda, cuando alguno de los atributos
indexados esté involucrado en una
comparación que utilice uno de los
siguientes operadores: <<|, &<|, |&>|, |>>,
@>, <@, ~=, &&
18. Concurrencia
Recordemos el modelo Cliente
– Servidor…
Varios clientes implica varias transacciones,
que pueden ser concurrentes…
19. Concurrencia PostgreSQL
Bloqueo
PostgreSQL = MVCC
Transacción = Acción Reed/Write
• NO contención, deadlocks
• SI transacciones ACID
Atomicity, Consistency, Isolation and
Durability.
• Copias paralelas de datos.
• NO elimina o actualiza la
data
• Fila extra = “no visible”
Desventajas
Usa más espacio de disco.
Lentitud al leer
datos.
R nunca bloquea W,
y viceversa
Control de Concurrencia Multi-Versión
Concurrencia
20. Concurrencia PostgreSQL
Caso de Conflicto = 2 transacciones trabajan sobre el mismo objeto, con al menos
una operación de escritura.
Aislamiento de Transacción.
Solución
Lectura confirmada Serializable
Predeterminada
Ve una instantánea a partir del inicio de la
operación.
2 Casos:
Consulta sólo ve los datos confirmados
antes del comienzo de la consulta.
Se esperará la confirmación de la
primera transacción.
Estricto
Emula la ejecución en serie.
Los sucesivos comandos dentro de una
sola transacción siempre ven los mismos
datos.
21. Concurrencia PostgreSQL
VACUUM
E- Bloqueo no visible
SD: Bloque Sin Asignar
OF: Bloque Fuera de Uso
¿Se acuerdan de esto? Hora de reutilizar espacio y optimizar las búsquedas.
Full VACUMM Auto VACUMM
Mas agresivo
Espacio liberado, retornado al SO
Bloqueo exclusivo mientras se procesa
Automatizar el VACUMM
Múltiples procesos para
mantenerlo activo
22. Recuperación PostgreSQL
Existen distintos enfoques para
resguardar la BD:
Backups mediante
volcado
Backup de todas las
BD del servidor
Backup a nivel de
ficheros
Crear Fichero
Restaurar psql basededatos < fichero.sql
pg_dump basededatos > fichero.sql
Copiar BD del servidor pg_dumpall > backup_server.sql
Restaurar las BD psql -f backup_server.sql postgres
Apagar el servidor tar -czvf backup.tar.gz /var/pgsql/data
Mover los ficheros a su ruta y levantarlo de nuevo
Recuperación
23. Recuperación PostgreSQL
Estrategia Compleja de Copias de
Seguridad
Archivado Continuo y
Logfiles
Copias Físicas
(Resguardar la BD)
Almacenan automáticamente
todas las modificaciones.
Almacenan data de forma
continua.
Registran todas las manipulaciones a la
BD
Rotación de Logfiles
24. Diccionario de Datos PostgreSQL
Almacena un conjunto de Meta-datos.
• Son datos que describen otros datos
• Organizados en tablas
• Generados automáticamente por el
Compilador.
Estándar SQL-92,
lo denomina “informationschema”
Diccionario de Datos
Tipos de datos:
cardinal_number: Entero no negativo
character_data: String sin longitud
sql_indentifier: Sentencias de sql
yes_or_no: valores lógicos
Conjunto de vistas las cuales contiene:
Columns (Columnas definidas por el sistema),
Tables (Tablas de la bd),
Views (Vistas)
Acceso
Select * from information_schema.<vista>.
Pg_class: tablas, índices….
Pg_constraint: restricciones definidas.
Pg_statistics: información de la
estadísticas del sistema.
Select relname from pg_class;
Funciona muy bien con grandes cantidades de datos y posee una alta concurrencia de usuarios accediendo a la vez a el sistema, es decir, permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Obedece completamente a las especificaciones ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) Permite el uso de triggers Portable: (Linux, Mac OS X, Solaris, FreeBDS, OpenBSD, Windows) Bien Estructurado y documentado. Extensible
El proceso Postmaster: Es el proceso inicial. Gestiona los accesos multiusuario y multiconexion. Levanta lamemoria compartida. Esta al tanto de solicitudes de nuevas conexiones. Lanza procesos de atención de demanda, realizando las operaciones sobre la base de datos a solicitud de los clientes. Realiza el enlazado con los archivos de datos, gestionando estos ficheros, donde los ficheros pueden pertenecer a varias bases de datos.
En todos los sistemas manejadores de BD los datos se guardan en páginas. Estas páginas están guardadas en disco. A continuación veremos las características para PostgreSQL: - El tamaño de las páginas puede variar entre 8K y 32K. - Si se necesita guardar una data de tamaño muy grande PostgreSQL aplica una técnica que es conocida popularmente como TOAST que consiste en comprimir la data y/o partirla en varias filas. Este proceso es transparente para el usuario. Para las operaciones de lectura y escritura se consulta primero al Storage Manager, si no esta se busca en disco. El Storage Manager está compuesto por los siguientes módulos: Sistema de transacciones Almacenamiento Relacional Gestión del Tiempo Control de concurrencia y gestión de fecha y hora Acceso a registros