Particiones en PostgreSQL

54
Particiones en PostgreSQL Evaluación de PostgreSQL 8.3 Miguel Angel Cruz Condor [email protected]

description

Presentación del tema: Particionamiento en PostgreSQL, ventajas y desventajas de las particiones y modos de particionamiento encontrados en PostgreSQL.

Transcript of Particiones en PostgreSQL

Page 1: Particiones en PostgreSQL

Particiones en PostgreSQL

Evaluación de PostgreSQL 8.3

Miguel Angel Cruz [email protected]

Page 2: Particiones en PostgreSQL

¿Particiones en PostgreSQL?

Page 3: Particiones en PostgreSQL
Page 4: Particiones en PostgreSQL

Particiones en PostgreSQL

● Qué tablas se deben particionar y cómo implementar la partición

● Constraints, Inheritance y como trabajan en conjunto

● Usar Trigger para las Particiones.

Page 5: Particiones en PostgreSQL

Particiones en PostgreSQL

● ¿Por qué hacer particiones?● Rendimiento● Gestión● Escalabilidad

Page 6: Particiones en PostgreSQL

Particiones en PostgreSQL

● ¿Por qué hacer particiones?● Rendimiento

– Crece el tamaño de la tabla, la consulta se vuelve lenta, igual la indexación.

– Las consultas necesitan pequeñas porciones del contenido de la tabla

● Gestión● Escalabilidad

Page 7: Particiones en PostgreSQL

Particiones en PostgreSQL

● ¿Por qué hacer particiones?● Rendimiento● Gestión

– Mejora añadir y remover tablas de manera sencilla :D– Comandos de mantenimiento (vacuum, reindex, cluster)

se dedican a los datos activos.● Escalabilidad

Page 8: Particiones en PostgreSQL

Particiones en PostgreSQL

● ¿Por qué hacer particiones?● Rendimiento● Gestión● Escalabilidad

– Controla la limitación de hardware (espacio en disco y velocidad)

– Mejorar el rendimiento y gestión en datos de gran magnitud.

Page 9: Particiones en PostgreSQL

Términos en Particiones.

● Rango – definido por un rango de datos, por lo general, timestamp● Entre 01/01/09 - 31/12/09

● Lista – lista de valores: estado, código, usuario, etc.● Pedidos pagados● Usuario● Códigos

Page 10: Particiones en PostgreSQL

Consideraciones

● ¿La tabla debería ser particionada?● Añade complejidad y costo extra en la gestión.● Crece número de filas, los tipos de consultas y la

data.

Page 11: Particiones en PostgreSQL

Creando particiones en tabla

● PostgreSQL 8.3 puede optimizar la consulta SELECT usando partición por Rango o Lista.

● Partir la tabla es práctico solo cuando el tamaño de la tabla excede la memoria física.

● Procedimientos almacenados con PL/Proxy hacen sencillo el llamado a otros procedimientos almacenados en otros servidores de bases de datos usando sharding y campos hashing.

Page 12: Particiones en PostgreSQL

Creando la partición de tabla

● Creando una tabla maestra para heredar (inherits)● Tabla “envio”

Page 13: Particiones en PostgreSQL
Page 14: Particiones en PostgreSQL

Creando la partición de tabla

● Crear tablas hija en servicio de la tabla maestra.

● Definir Table Constrains para filtrar los valores.● Definir un Index para las columnas de cada

partición.● Asegurar la configuración de postgreSQL para

atender Constrains.

Page 15: Particiones en PostgreSQL
Page 16: Particiones en PostgreSQL
Page 17: Particiones en PostgreSQL
Page 18: Particiones en PostgreSQL

Creando la partición de tabla

● Crear un Trigger o regla de redirección para INSERT en la tabla maestra. No se implementa Trigger para UPDATE (Opcional)

● Activar lenguaje plpgsql

Page 19: Particiones en PostgreSQL
Page 20: Particiones en PostgreSQL
Page 21: Particiones en PostgreSQL

Creando la partición de tabla

● Trigger selecciona INSERT entre● 2008-01-01 hasta 2009-01-01● Menor a 2008-01-01

Page 22: Particiones en PostgreSQL
Page 23: Particiones en PostgreSQL

Trigger

CREATE TRIGGER envio_insertar_trigger

BEFORE INSERT ON envio

FOR EACH ROW EXECUTE PROCEDURE envio_insertar();

Page 24: Particiones en PostgreSQL

INSERT en tabla “envio”

Page 25: Particiones en PostgreSQL
Page 26: Particiones en PostgreSQL
Page 27: Particiones en PostgreSQL

Verificar optimización de consulta

Page 28: Particiones en PostgreSQL
Page 29: Particiones en PostgreSQL
Page 30: Particiones en PostgreSQL
Page 31: Particiones en PostgreSQL
Page 32: Particiones en PostgreSQL

Plan de ejecución

Page 33: Particiones en PostgreSQL
Page 34: Particiones en PostgreSQL
Page 35: Particiones en PostgreSQL

Herencia de tabla

● A considerar:● Childs heredan:

– NOT NULL Constrains (primary key constrains)– Table constrains– Valores predeterminados de Columna

● Childs NO heredan– Indexes– Foreign key constrains– Permissions– Ownership

Page 36: Particiones en PostgreSQL

Contener tablas en archivos

Page 37: Particiones en PostgreSQL

Tablespaces

● Sirve para especificar la localización de tablas e índice en el sistema de archivos.

● Por ejemplo:● Cargar índices en un disco rápido● Guardar histórico en un disco lento

Page 38: Particiones en PostgreSQL

Preparar sistema de archivos

mkdir /mnt/dbspace2/

mount -t tmpfs -o size=100M,noatime tmpfs/mnt/dbspace2/

mkdir /mnt/dbspace2/postgresql

mkdir /mnt/dbspace2/postgresql/data

chown postgres:postgres /mnt/dbspace2/postgresql/data

chmod 0700 /mnt/dbspace2/postgresql/data

Page 39: Particiones en PostgreSQL
Page 40: Particiones en PostgreSQL
Page 41: Particiones en PostgreSQL
Page 42: Particiones en PostgreSQL
Page 43: Particiones en PostgreSQL
Page 44: Particiones en PostgreSQL

Modo alternativo: RULE

Page 45: Particiones en PostgreSQL

RULE

● Usar RULE en lugar de herencia y triggers● Indicar dónde se debe insertar● Mayor carga de trabajo● SELECT necesita UNION

CREATE RULE measurement_insert_y2006m02 ASON INSERT TO measurement WHERE ( logdate >= DATE '2006-02-01' AND logdate < DATE '2006-03-01' )DO INSTEAD INSERT INTO measurement_y2006m02 VALUES (NEW.*);...CREATE RULE measurement_insert_y2008m01 ASON INSERT TO measurement WHERE ( logdate >= DATE '2008-01-01' AND logdate < DATE '2008-02-01' )DO INSTEAD INSERT INTO measurement_y2008m01 VALUES (NEW.*)

Page 46: Particiones en PostgreSQL

RULE

● SELECT necesita UNION

CREATE VIEW measurement AS SELECT * FROM measurement_y2006m02UNION ALL SELECT * FROM measurement_y2006m03...UNION ALL SELECT * FROM measurement_y2007m11UNION ALL SELECT * FROM measurement_y2007m12UNION ALL SELECT * FROM measurement_y2008m01

Page 47: Particiones en PostgreSQL

RULE

● A mayor cantidad de particiones, más reglas.● Reglas requieren recarga de trabajo.● Las reglas pueden ocasionar efectos

secundarios● Adding/Removing/Modifying Rules requieren

bloqueo exclusico● Mayor cantidad de reglas, el rendimiento se

reduce.

Page 48: Particiones en PostgreSQL

Usar Triggers

● Mejor control de la base de datos.● Puede alcanzar un rendimiento constante,

independientemente de número de particiones.● Trigger no exige bloqueo.

Page 49: Particiones en PostgreSQL

Mantenimiento de particiones

● Lista● Centrado en hash y

estado● Define un conjunto de

particiones● Crecen los datos en

cada child● Patron de consulta

estático● Bajo matenimiento

● Rango● Centrado en fechas,

series● Creciente conjunto de

particiones● Datos de child son

estáticos● Patrones de consulta

volátiles.● Mucho mantenimiento

Page 50: Particiones en PostgreSQL
Page 51: Particiones en PostgreSQL

Rendimiento

Page 52: Particiones en PostgreSQL

PLProxy y PostgreSQL Cluster

● Otra técnica de particionamiento es colocar las bases de datos en múltiples servidores

● Ejemplo:● Dividir tabla de usuario.

● Plproxy conecta varias servidores de bases de datos para resolver llamados remotos

localdb=#CREATE FUNCTION get_user_email(username text) RETURNS text AS $$ CONNECT 'dbname=remotedb host=123.456.123.21 user=myuser';$$ LANGUAGE plproxy;

Page 53: Particiones en PostgreSQL

Cluster

Page 54: Particiones en PostgreSQL

Gracias

:-D