Vous êtes sur la page 1sur 27

Mantenimiento

Jaime Casanova

Soporte Libre Curso de administracion de PostgreSQL 14 de diciembre de 2009

Jaime Casanova

Mantenimiento

Pero Postgres requiere mantencin

Es cierto

Jaime Casanova

Mantenimiento

Pero Postgres requiere mantencin

Es cierto En todo caso, con un solo encargado es suciente No necesitas un ejrcito de DBAs para mantenerlo funcionando

Jaime Casanova

Mantenimiento

Con el tiempo se ha hecho ms fcil

postgresql.conf: autovacuum = on requiere stats_row_level = on

Jaime Casanova

Mantenimiento

Con el tiempo se ha hecho ms fcil

postgresql.conf: autovacuum = on requiere stats_row_level = on Antes (< 8.1), no hacer mantencin era suicida

Jaime Casanova

Mantenimiento

Con el tiempo se ha hecho ms fcil

postgresql.conf: autovacuum = on requiere stats_row_level = on Antes (< 8.1), no hacer mantencin era suicida Podas perder datos ...

Jaime Casanova

Mantenimiento

Con el tiempo se ha hecho ms fcil

postgresql.conf: autovacuum = on requiere stats_row_level = on Antes (< 8.1), no hacer mantencin era suicida Podas perder datos ... ... o pagar consultoras carsimas Ahora es meramente irresponsable

Jaime Casanova

Mantenimiento

Por qu se necesita vacuum? Curso de choque de MVCC

En Postgres, los DELETE y UPDATE no sobreescriben el registro modicado Ms bien, crean uno nuevo y marcan el anterior como obsoleto Esto permite que alguien que estaba leyendo antes del DELETE pueda todava ver el registro antiguo y saltarse el nuevo Un lector nuevo puede saltarse el antiguo y leer el nuevo Una vez que todos los lectores antiguos terminan, el registro viejo ya no es necesario hay que eliminarlo para reutilizar el espacio A este modelo se le llama MVCC

Jaime Casanova

Mantenimiento

MVCC

Hay otras implementaciones posibles Oracle: rollback segment

Jaime Casanova

Mantenimiento

MVCC

Hay otras implementaciones posibles Oracle: rollback segment la nuestra es mejor porque no exige que los backend tengan que hacer trabajo extra este trabajo extra lo hace un proceso aparte que no causa retardo para los clientes

Jaime Casanova

Mantenimiento

VACUUM

VACUUM es la implementacin del recolector de basura Hay dos formas de VACUUM


lazy vacuum vacuum full

Jaime Casanova

Mantenimiento

Lazy vacuum

Pgina por pgina No requiere bloquear la tabla INSERT, UPDATE, DELETE pueden continuar operando concurrentemente

Jaime Casanova

Mantenimiento

El algoritmo de LAZY VACUUM


En cada pgina:
Elimina registros obsoletos Compacta el espacio disponible Registra cunto espacio libre hay en esa pgina en el FSM Lleva en memoria las direcciones de las tuplas que se eliminaron

Limpieza de ndices: recorrer todos y cada uno de los ndices de la tabla Para cada tupla:
examinar si est en la lista de tuplas eliminadas En caso de estar, se elimina

Esto ocurre cada vez que al algoritmo de limpieza de pginas se le acaba el espacio de memoria para llevar la lista de tuplas eliminadas maintenance_work_mem

Jaime Casanova

Mantenimiento

Free Space Map

El espacio libre en cada pgina de la tabla se guarda en el FSM Cuando un INSERT necesita registrar una nueva tupla, pregunta al FSM dnde ponerla Si el FSM no tiene informacin, se extiende la tabla Problema tpico: el FSM queda chico Si una pgina no cabe en el FSM, se olvida INSERT necesita extender la tabla ... ... an cuando puede quedar mucho espacio libre todava (pero el FSM no lo sabe) max_fsm_pages, max_fsm_relations

Jaime Casanova

Mantenimiento

VACUUM FULL

Forma ms antigua de VACUUM Requiere bloquear totalmente la tabla No deja ningn espacio libre en las pginas Operacin posterior necesita extender la tabla Desventajas
los ndices quedan en mal estado es muy lento

No es muy recomendable, salvo casos de extrema desesperacin


Por ejemplo, cuando uno ha estado usando la BD mucho tiempo con el FSM mal congurado

Jaime Casanova

Mantenimiento

Alternativas a VACUUM FULL

CLUSTER

Reordena una tabla segn un ndice especicado Reescribe toda la tabla y todos sus ndices Elimina todo el espacio muerto Desventaja: es muy lento si los datos no estn ordenados por el ndice

Jaime Casanova

Mantenimiento

Alternativas a VACUUM FULL

CLUSTER

Reordena una tabla segn un ndice especicado Reescribe toda la tabla y todos sus ndices Elimina todo el espacio muerto Desventaja: es muy lento si los datos no estn ordenados por el ndice

ALTER TABLE / SET TYPE ... y hacer algn cambio que no haga nada por ej.. ALTER TABLE mitabla ALTER micolumna SET TYPE int (asumiendo que la mitabla.micolumna ya es de tipo int) Idem a CLUSTER slo que no reordena

Jaime Casanova

Mantenimiento

Alternativas a VACUUM FULL (2)

Ambos requieren candados exclusivos ... igual que VACUUM FULL ... ... pero son ms rpidos

Jaime Casanova

Mantenimiento

Analyze
Postgres tiene un optimizador de consultas basado en costo Para cada consulta se busca el mecanismo de ejecucin ms eciente El costo total de cada posible plan de ejecucin se estima usando ecuaciones de costo y estadsticas recolectadas de los datos presentes en las tablas Las estadsticas se obtienen usando el comando ANALYZE
A veces usado como opcin en VACUUM ej. VACUUM ANALYZE

Si las estadsticas no estn ajustadas a la realidad, pueden pasar cosas raras Sobre todo, que los planes de ejecucin sean subptimos (consultas lentas)

Jaime Casanova

Mantenimiento

Analyze (2)

Es crucial ejecutar ANALYZE sobre todas las tablas en algn momento dem cada vez que las tablas cambian mucho Por ej. despus de restaurar un respaldo

Jaime Casanova

Mantenimiento

Analyze Tamao de muestreo

A veces, con el tamao de muestreo por omisin de ANALYZE, las estimaciones no son buenas Se hace necesario aumentar el tamao de muestreo para que las estimaciones sean ms precisas A veces es conveniente disminuirlo Desventajas
Analyze tarda un poco ms El clculo del plan ms ptimo es ms lento

ALTER TABLE mitabla ALTER micolumna SET STATISTICS 42

Jaime Casanova

Mantenimiento

Autovacuum

Autovacuum automatiza LAZY VACUUM y ANALYZE Desde Postgres 8.1 es un daemon manejado internamente por postmaster postgresql.conf Es importante congurarlo adecuadamente para que entre en accin a tiempo Nunca ejecuta tareas bloqueantes

Jaime Casanova

Mantenimiento

Autovacuum

Autovacuum automatiza LAZY VACUUM y ANALYZE Desde Postgres 8.1 es un daemon manejado internamente por postmaster postgresql.conf Es importante congurarlo adecuadamente para que entre en accin a tiempo Nunca ejecuta tareas bloqueantes 8.3: se suicida para prevenir bloqueos

Jaime Casanova

Mantenimiento

Ecuacin para VACUUM

umbral

umbral base + factor de escala * nm. de registros

Valores por omisin en 8.1:


umbral base = 1000 factor de escala = 0.2

Valores por omisin en 8.3:


umbral base = 50 factor de escala = 0.2

Jaime Casanova

Mantenimiento

Conguracin na de autovacuum

autovacuum_vacuum_cost_delay
(en 8.3 por omisin ya viene en 20)

Cambiar valores para tablas con caractersticas de uso especiales


tablas con mucho trco tablas muy grandes

8.1 ... 8.2: algunas tablas se deben trabajar manualmente a partir de 8.3 hay mltiples trabajos autovacuum concurrentes sin embargo casos patolgicos sigue siendo conveniente procesarlas por separado

Jaime Casanova

Mantenimiento

Conguracin de autovacuum por tablas

8.1 8.3 INSERT INTO pg_autovacuum VALUES (nombre_tabla::regclass, f, -1, -1, -1, ...); los -1 son importantes no usar 0! 8.4 ... ALTER TABLE ... SET (autovacuum_enable = false, autovacuum_vacuum_scale_factor = 0.05);

Jaime Casanova

Mantenimiento

REINDEX

Reescribe los ndices de una tabla til cuando los ndices se salen de manos No debera usarse con periodicidad
slo para casos patolgicos

REINDEX INDEX ix_categoria_id REINDEX TABLE categorias REINDEX DATABASE energia

Jaime Casanova

Mantenimiento

Vous aimerez peut-être aussi