Академический Документы
Профессиональный Документы
Культура Документы
Consideraciones Preliminares
Si
bien
Postgresql
no
soporta
directamente particionado horizontal de tablas
(refirindome a la sentencia de Particionado a
travs de DDL), existen mtodos de hacerlo
aunque sean algo engorrosos o no muy
soportados.
tablas
PGINA 1 DE 9
Consorcio SIU
Consorcio SIU
PGINA 2 DE 9
Consorcio SIU
super
(tipo tipo_persona
CHECK
(upper(tipo) IN (cliente,persona)) )
INHERITS (cliente, persona);
Padre
cliente
Super
persona
INSERT
S
SIU
PGINA 3 DE 9
Consorcio SIU
Consorcio SIU
del
PGINA 4 DE 9
Consorcio SIU
(SELECT
'{a1,b2,c3,e4}'::text[]) a(n)) as
texto,
round(random()*100) as entero,
i + round(random()*1000) as entero2
FROM generate_series(1, 50000) j(i);
Consorcio SIU
Consorcio SIU
i
|1
floaty | 0.791756465099752
epoch | 2009-09-28 15:31:34.818921
arreglo | {9,39}
texto | c3
entero | 75
entero2 | 483
Y el EXPLAIN nos muestra:
EXPLAIN SELECT floaty, epoch
FROM general;
QUERY PLAN
---------------------------------------------------------Hash Join
(cost=1615.00..4127.50
rows=50000 width=16)
Hash Cond: (general1.i = general2.i)
->
Seq Scan on general1
(cost=0.00..991.00 rows=50000 width=20)
->
Hash
(cost=819.00..819.00
rows=50000 width=4)
-> Seq Scan on general2
(cost=0.00..819.00 rows=50000 width=4)
Consideraciones finales
Por lo que apreciamos, no hay mucha
mejora sustancial (comparado al particionado
horizontal), sin embargo se usan para casos
muy distintos ambos modelos.
En los dos mtodos, esta tcnica es
transparente a la aplicacin por lo que no es
necesario efectuar modificaciones a las
consultas.
SIU
PGINA 6 DE 9
Consorcio SIU
Constraint Exclusion
nombre | text
|
Hasta ahora hemos visto el particionado
en s de las tablas. Como hemos visto tambin, contenido | bytea
|
cada particin requiere un CHECK o constraint.
Quizs hasta ahora pareca redundante, pero Indexes:
veremos como agregando esa restriccin se
peude hacer que el planeador mejore y haga
"ix_maestra_cdu_date" btree (cdu_date)
ms inteligente la bsqueda.
Triggers:
La
variable
constraint_exclusion,
permite optimizar las bsquedas en las tablas
t_part_maestra_date_char BEFORE INSERT
heredadas. Puede tener 3 valores en la versin ON maestra FOR EACH ROW EXECUTE
8.4 ('on', 'off','partition').
PROCEDURE part_maestra()
particionado=# select name, setting, context,
extra_desc from pg_settings where name =
'constraint_exclusion';
[RECORD 1 ]
name
| constraint_exclusion
setting
| partition
En
una
bsqueda
cotidiana
obtendriamos algo parecido a esto con la
variable activada en 'partition':
context
| user
constraint_exclusion
| partition
(1 row)
Type
where
-> Append
width=82)
(cost=0.00..696.89 rows=27
| integer
| double precision
->
Seq Scan on maestra
(cost=0.00..18.25 rows=3 width=118)
Filter: ("substring"((cdu_date)::text, 0,
7) = '200804'::text)
Consorcio SIU
Consorcio SIU
Filter: ("substring"((cdu_date)::text, 0,
Filter: ("substring"((cdu_date)::text, 0,
7) = '200804'::text)
7) = '200804'::text)
(6 rows)
Filter: ("substring"((cdu_date)::text, 0,
7) = '200804'::text)
-> Seq Scan on maestra_200807 maestra
(cost=0.00..733.54 rows=26 width=79)
SET
(. y continua)
particionado=# explain select * from maestra
where substring(cdu_date,0,7) = '200804';
Result
width=79)
(cost=0.00..13764.65
rows=493
PGINA 8 DE 9
SIU
PGINA 9 DE 9