postgresql expo
DESCRIPTION
Presentación de Postgres SQL (parte I) para la matería de ABD de licenciatura en computación.TRANSCRIPT
POSTGRESQL
PARTE IAzuaje, AgustínHevia, Andrés
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.
¿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
Entrando a Postgres…
Nace en 1982 en la Universidad de Berkeley. Su primer nombre fue Ingres.
Robusto como su logo,corre en casi cualquierSistema Operativo.
Diseñado para ambientes de alto volumen de transacciones.
De código abierto.
En 1994 empieza a utilizar el lenguaje SQL.
Arquitectura Básica
Consiste en el modelo Cliente-Servidor.
¿Y esto de aquí arriba que significa?
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.
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…
Manejo de memoria
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.
Manejo de Memoria
Ejemplo de un “Full Vacuum”:
Manejo de Memoria
Ejemplo de un “Lazy Vacuum”:
Índices
Los índices se utilizan para acelerar las consultas.
Son también archivos.
Y con ustedes… Los índices
Í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)
Í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>[,…]) )
Í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
(campo);
Í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: <<|, &<|, |&>|, |>>, @>, <@, ~=, &&
Índices
Un Árbol B para refrescar la memoria…
Concurrencia
Recordemos el modelo Cliente – Servidor…
Varios clientes implica varias transacciones, que pueden ser concurrentes…
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
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.
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
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
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
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 negativocharacter_data: String sin longitudsql_indentifier: Sentencias de sqlyes_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;
Y por ahora terminamos…
¿Preguntas?