SlideShare ist ein Scribd-Unternehmen logo
1 von 50
PostgreSQL 9.3 & 9.4
Matteo Durighetto
Italian PostgreSQL Users Group
www.itpug.org www.postgresql.org
Matteo Durighetto - m.durighetto@miriade.it - ITPUG.org
Chi sono?
● Speaker/Author:
o Matteo Durighetto
o DBA @ Miriade S.p.A.
o tecnologie db: Oracle, PostgreSQL, MySQL, MSSQL ..
o tecnologie os/virtual/cloud: AWS, Vmware,XEN, Linux, *NIX,
Windows
o Membro e Vice Presidente ITPUG
Copyright 2012 Miriade S.p.a.Copyright 2012 Miriade S.p.a.
Matteo Durighetto - m.durighetto@miriade.it - ITPUG.org
WHOAMI ;
Chi sono?
● PostgreSQL 9.3 è alla 9.3.4 ( 4 patch minor ) , stable
● PostgreSQL 9.4 è alla fase di beta 1, non è stable, ma è possibile già
testare i vostri software con la versione per comprenderne le potenzialità
per testare PostgreSQL 9.4 beta su Debian 7:
deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main 9.4
Copyright 2012 Miriade S.p.a.Copyright 2012 Miriade S.p.a.
Matteo Durighetto - m.durighetto@miriade.it - ITPUG.org
Stato attuale sviluppo
PostgreSQL 9.3
● Più User Friendly
● Più Pluggable
● Più Potente
● Più Automazione
● Più Sicuro
● Più veloce nel backup logico
● Più veloce il failover
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● Più Facile
1. Pg 9.3 non necessita più la configurazione del SHMMAX, usa ora un’area
di 68kb con il System V ipc, mentre il restante della shared memory è
gestita tramite Posix & mmap ipc.
2. Remastering Standby, lo fa automaticamente non necessita la
ricostruzione dello standby o manualmente la copia degli archivelog o
repmgr:
1. pg_basebackup -r : per preparare un config file dello standbym.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● Più Pluggable
1. Foreign data wrapper in scrittura e lettura: si può integrare con vari
database (mssql, oracle, mondodb..) o vari servizi in modo trasparente
(ldap, twitter.. ) in modo tale da poter scrivere o leggere da varie fonti dati
come se fossero tabelle locali.
1. JSON: in 9.2 Pg aveva il datatype, adesso ha metodi di estrazione del
valore o convertire il valore in array e viceversa ( JSON_EACH ):
http://www.postgresql.org/docs/9.3/static/functions-json.html
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● Più Pluggable
1. Background Worker: possibilità di creare un background worker che può
accedere alla shared memory ed eseguire una serie di transazioni. Per
esempio si può scrivere un processo che analizza l’efficienza degli indici e
li ricostruisce poi oppure per accedere ad un’altra tipologia di database:
https://github.com/umitanuki/mongres
● Più Potente
1. Updatable View: le view “semplici” sono aggiornabili.
2. Lateral JOIN: una subquery può richiamare un oggetto
di un’altra subquery
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● Più Potente
1. SELECT base.nr,
multiples.multiple
FROM (SELECT generate_series(1,10) AS nr) base,
LATERAL (
SELECT multiples.multiple FROM
( SELECT generate_series(1,10) AS b_nr, base.nr * 2 AS multiple ) multiples
WHERE multiples.b_nr = base.nr
) multiples;
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● Più Automazione
1. Materialized view: Potete creare una view con un segmento di appoggio di
cui potete far refresh.
1. DDL trigger / EVENT TRIGGER: potete automatizzare degli event dopo un
evento DDL ( DDL_COMMAND_START / DDL_COMMAND_STOP ).
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● More Secure
1. Data Page Checksum: permette il riscontro di problematiche di corruzione
tramite il calcolo del page checksum (8k). Necessità di essere inizializzato
al momento della creazione del cluster.
initdb --data-checksums
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● Faster Dump
1. Parallel Dump: l’estrazione parallela permette di evitare costose gestioni
via script o altro ( è necessario abilitarla)
pg_dump -Fd -j number_of_processes
● Faster Failover
1. Il Failover è meno di un secondo.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
PostgreSQL 9.4
1. Alter system set ..
2. Huge Page
3. Refresh concurrently materialized view
4. Replication slot
5. Logical decoding
6. Alter tablespace move
7. Hypothetical rank & agg function
8. Aggregazione ordinata & filtrata
9. Updatable view con CHECK
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
PostgreSQL 9.4
10.UNNEST array
11.pl/pgsql stack trace
12.JSONB
13.Background workers dinamici
14.pg_basebackup tablespace remapping
15.GIN index : miglioramenti
16.Pg_prewarm : relation
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 1) ALTER SYSTEM SET
E’ ora possibile modificare un parametro del postgresql.conf col comando alter
system set .
esempio :
alter system set huge_pages=on;
genera o modifica un file chiamato postgresql.auto.conf all’interno della
PG_DATA, commentando i relativi parametri sul postgresql.conf. Al
riavvio/reload prenderà le modifiche rispetto allo standard.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 1) ALTER SYSTEM SET
Esempio sulla work mem :
alter system set work_mem=10M ;
select pg_reload_conf();
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 2) HUGE Page
huge page => 2mb vs 4kb ( sistemi x86 , su Itanium son 16mb etc )
1. Permettono di mappare aree più vaste di shared memory con minori
puntatori nella cache TLB della cpu, diminuisce quindi l’uso della cpu nel
look up della pagina.
2. Le huge page non possono swappare.
3. Se si pone il parametro huge_pages a TRY ,alla partenza prova ad allocare
le pagine ma in caso switcha a paine normali, se si pone ad ON e le pagine
non sono sufficienti, il postgresql non parte.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 2) HUGE Page
1. impostazione 20GB huge pages:
2. /etc/sysctl.conf aggiungere vm.nr_hugepages=5000
3. sysctl -p
4. alter system set huge_pages = ‘on’ ## se si vuole forzarle, default è TRY
5. pg_ctl reload -D $PG_DATA o service postgresql reload ## debian
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 3) Refresh Materialized View concurrently
1. creazione indice univoco sulla materialized view .
2. REFRESH MATERIALIZED VIEW nomeview CONCURRENTLY ;
In questo modo le query sulla materialized view non vengono bloccate.
Come avviene ? tramite un delete della tabella della materialized view e un
inserimento del risultato della query.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 3) Refresh Materialized View concurrently
Unendo questo tipo di refresh ai trigger si può ottenere un refresh on commit
(per il caso di truncate, se contemplato va aggiunto un altro trigger ) :
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 4) Replication Slot
Problema: se lo standby è stato posto in fase di maintenance, quando lo
riattiverete è possibile che il master abbia esaurito il numero di checkpoint
segment della ritenzione :
1) ripristinate i checkpoint segment mancanti sullo standby nella directory
archive
2) ricostruite lo standby
Dalla 9.4 non serve più perchè potete creare il replication slot
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 4) Replication Slot
creazione slot di replicazione [ N.B. manterrà i checkpoint segment necessari
nella XLOG ! ]:
select pg_create_physical_replication_slot('slot01');
verifica:
SELECT * FROM pg_replication_slots;
aggiungere nel recovery.conf : primary_slotname = ‘slot01’
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 4) Replication Slot
creazione slot di replicazione :
select pg_create_physical_replication_slot('slot01');
verifica:
SELECT * FROM pg_replication_slots;
aggiungere nel recovery.conf : primary_slotname = ‘slot01’
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 5) Logical Decoding
Gli slot possono essere associati ad un replica logica tramite plugin
(test_deconding):
select pg_create_logical_replication_slot(‘logslot01’,’test_deconding’);
una volta creato lo slot che viene associato ad un db, si può procedere
all’estrazione delle informazioni dal xlog.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 5) Logical Decoding
Visione delle informazioni :
select pg_logical_slot_peek_changes(‘logslot0’,NULL,NULL);
Estrazione delle informazioni e pulizia coda :
select pg_logical_slot_get_changes(‘logslot0’,NULL,NULL);
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 5) Logical Decoding
Esempio di return del dato ( N.B. attualmente non traccia le DDL ! ) :
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
SCN/XID Numero transazione Istruzione DML
● 5) Logical Decoding
Formato DML ( per il plugin test_decoding ) :
“tipologia_oggetto schema.nomeoggetto: DML: nomecolonna[tipologia
colonna]: valore “
ovviamente si possono avere concatenati più:
nomecolonna1[tipologia colonna1]: valore1 nomecolonna2[tipologia colonna2]:
valore2 nomecolonna3[tipologia colonna3]: valore3 … nomecolonnaN[tipologia
colonnaN]: valoreN
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 6) Alter tablespace move
Dalla 9.4 è possibile muovere tutti gli oggetti da una tablespace ad un’altra dello
stesso cluster. Attenzione: è single thread.
ALTER TABLESPACE name MOVE { ALL | TABLES | INDEXES |
MATERIALIZED VIEWS } [ OWNED BY role_name [, ...] ] TO new_tablespace [
NOWAIT ]
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 7) Hypothetical Aggregate Function
select RANK(200) WITHIN GROUP ( ORDER BY x ) from ( values (
0),(10),(20),(100),(500),(5),(100) ) t(x) ;
permettono il calcolo di rank o dense_rank etc di un valore ipotetico rispetto
all’ordinamento di una colonna ed un set di valori derivanti da una tabella o da
una collezione di valori.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 7) Hypothetical Aggregate Function
tips : creare indice su colonna ordinate
create index idx01_t1 on t1(x);
select RANK(100) WITHIN GROUP ( ORDER BY x ) from t1 ;
⇒ sequential scan della tabella
select RANK(100) WITHIN GROUP ( ORDER BY x ) from t1 where x <=100 ;
⇒ index only scan con filtro
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 8) Aggregazione ordinata e filtrata
select paese, sum(produzione),sum(produzione) FILTER ( where
tipo_produzione=1 ), sum(produzione) FILTER ( where tipo_produzione=2 )
from fact01 group by paese ;
Con l’opzione FILTER è possibile filtrare la funzione aggregato relativa solo al
calcolo di quel campo, evitando i case etc.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 8) Aggregazione ordinata e filtrata
Funzioni :
mode() => valore più frequente
percentile_disc() => calcolo il percentile restituendo il valore discreto della
popolazione
percentile_cont() => fa una interpolazione lineare e restituisce il valore ipotetico
che rappresenta il percentile relativo alla popolazione
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 8) Aggregazione ordinata e filtrata
Sintassi :
SELECT sito, percentile_disc(0.4) WITHIN GROUP (ORDER BY prod)
from fact01 group by sito;
ovviamente possia combinare le opzioni :
SELECT sito, percentile_disc(0.4) WITHIN GROUP (ORDER BY prod)
FILTER ( WHERE tipoproduzione=1 )
from fact01 group by sito;
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 9) Updatable view con CHECK
Si può ora definire una view updatabile con controlli sulla where condition , in
modo tale che gli update non vadano a violare tali condizioni :
create view vx as
select id_prodotto, sum(quantita), avg(costo), sum (quantita*costo) as totale
from
fact01
where id_prodotto is not null
WITH CHECK OPTION;
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 10) UNNEST
Possiamo fare l’unnesting degli array es. se definiamo una tabella t3( id int, b
int[]) :
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 11) PL/PGSQL stack trace
CREATE FUNCTION teststack() RETURNS integer AS $$
DECLARE
stack text ;
BEGIN
GET DIAGNOSTICS stack = PG_CONTEXT ;
RAISE NOTICE E'--- Call Stack ---n%', stack ;
RETURN 1 ;
END;
$$ LANGUAGE plpgsql ;
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 11) PL/PGSQL stack trace
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
Identifica la riga della
funzione che ha dato
eccezione
● 12) JSONB
Introdotto un nuovo formato binario del JSON , denominato JSONB, più
efficiente nello storing del dato. Infatti il json veniva storato come una stringa,
mentre il jsonb è di tipo binario.
Sono state inoltre introdotte una serie di funzioni relative al jsonb e una serie di
operatori .
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 12) JSONB
tipo dato :
‘{“key1”:”value”,”key2”:valuenumber, .. }’::jsonb
operatori :
-> estrae l’array o la chiave
- -> estrae l’array o la chiave in formato testo senza apici “
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 12) JSONB
esempio :
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 12) JSONB
regole di filtro :
jsonb1 @> jsonb2 => jsonb1 contiene jsonb2
jsonb1 <@ jsonb2 => jsonb2 contiene jsonb1
jsonb1 = jsonb2 => jsonb1 = jsonb2
jsonb1 ? key => la chiave esiste nel jsonb1 ?
jsonb1 ?| array[key1,key2] => una delle chiavi esiste nel jsonb1 ?
jsonb1 ?& array[key1,key2] => tutte le chiavi esistono nel jsonb1 ?
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 12) JSONB
possibilità di indicizzarli coi gin :
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 12) JSONB
funzioni per esplodere i jsonb ( jsonb_each_text )
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 13) Background worker dinamici
Si possono costruire dei worker dinamici e sono registrabili e attivabili
dinamicamente e non più solo al restart
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 14) pg_basebackup remapping
Introdotta l’opzione t :
pg_baebackup … -T OLDDIR=NEWDIR
potete quindi fare un backup rimappandola directory della tablespace.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 15) GIN Index miglioramenti
*) Riduzione spazio del 40% , sostanzialmente ora vengono salvati i delta [che
sono varbyte e occupano da 1 a 6 byte) e non più tutti gli offset :
overhead = 6 byte
KEY = 7 byte
block_id = 4 byte , offest=2 byte
<9.4 : overhead KEY ( block_id, offset) ( block_id, offset) ( block_id, offset) (
block_id, offset) ( block_id, offset) ( block_id, offset)
>=9.4: overhead KEY ( block_id, offset) Delta1 Delta2 ..
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 15) GIN Index miglioramenti
Nel peggiore dei casi occupano la stessa quantità di spazio nel migliore dei casì
però si ottiene così un -40% :
<9.4 6+7+(6*4) = 37 byte
>=9.4 6+7+(6*1)+(3*1) = 22 byte
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 15) GIN Index miglioramenti
Altra innovazione sono i posting trees , ovvero quando una pagina dei gin index
non è più sufficiente a contenere una tupla dell’indice allora viene creato un
posting tree compresso .
N.b. se farete upgrade con pg_upgrade, per ottenere i benefici dovrete
reindicizzare!
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 16) PG_PREWARM
permette il caricamento in cache db o os di un oggetto, utile dopo un riavvio del
db o per stabilizzare la cache.
create extension pg_prewarm ;
select pg_prewarm(‘nomeoggetto’); -- ritorna il numero di pagine caricate.
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
● 16) PG_PREWARM
metodi : prefetch , read, buffer #default
prefetch : lettura asincrona , popola cache filesystem
read : lettura sincrona , popola cache filesystem
buffer : popola la cache del db.
select pg_prewarm(‘nomeoggetto’,’prefetch’);
m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
Attribuzione
Non commerciale
Condividi allo stesso modo
4.0 Italia
http://creativecommons.org/licenses/by-nc-sa/3.0/it/
Copyright 2014 Miriade S.p.A. - http://www.miriade.it
Copyright 2012 Miriade S.p.a.
Grazie per l'attenzione
Copyright 2012 Miriade S.p.a. m.durighetto@miriade.it
License
www.itpug.org - www.postgresql.org - www.miriade.it

Weitere ähnliche Inhalte

Ähnlich wie PostgrSQL 9.3&9.4 - DjangoVillage

DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DrupalDay
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...DrupalDay
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzionesparkfabrik
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]gioacchinolonardo
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009Massimiliano Dessì
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meetingguest67beeb9
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the cloudsDavide Cerbo
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...Aruba S.p.A.
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 

Ähnlich wie PostgrSQL 9.3&9.4 - DjangoVillage (20)

DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzione
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Logging
LoggingLogging
Logging
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 

Mehr von Miriade Spa

Iperconvergenza: Nutanix e la rivoluzione dei datacenter
Iperconvergenza: Nutanix e la rivoluzione dei datacenterIperconvergenza: Nutanix e la rivoluzione dei datacenter
Iperconvergenza: Nutanix e la rivoluzione dei datacenterMiriade Spa
 
Quanto è digitale la tua azienda?
Quanto è digitale la tua azienda?Quanto è digitale la tua azienda?
Quanto è digitale la tua azienda?Miriade Spa
 
Big Data | Gdo e Social Media
Big Data | Gdo e Social MediaBig Data | Gdo e Social Media
Big Data | Gdo e Social MediaMiriade Spa
 
Big Data e Manifatturiero: gestione del magazzino
Big Data e Manifatturiero: gestione del magazzinoBig Data e Manifatturiero: gestione del magazzino
Big Data e Manifatturiero: gestione del magazzinoMiriade Spa
 
Application Development: come sviluppare un'app user centered
Application Development: come sviluppare un'app user centeredApplication Development: come sviluppare un'app user centered
Application Development: come sviluppare un'app user centeredMiriade Spa
 
System integration - I servizi Miriade
System integration - I servizi MiriadeSystem integration - I servizi Miriade
System integration - I servizi MiriadeMiriade Spa
 
Dalla Business Intelligence ai Big Data
Dalla Business Intelligence ai Big DataDalla Business Intelligence ai Big Data
Dalla Business Intelligence ai Big DataMiriade Spa
 
Big Data: Analisi del Sentiment
Big Data: Analisi del SentimentBig Data: Analisi del Sentiment
Big Data: Analisi del SentimentMiriade Spa
 
Come gestire un progetto Big Data
Come gestire un progetto Big DataCome gestire un progetto Big Data
Come gestire un progetto Big DataMiriade Spa
 
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanWebinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanMiriade Spa
 
Full text search | Speech by Matteo Durighetto | PGDay.IT 2013
Full text search | Speech by Matteo Durighetto | PGDay.IT 2013 Full text search | Speech by Matteo Durighetto | PGDay.IT 2013
Full text search | Speech by Matteo Durighetto | PGDay.IT 2013 Miriade Spa
 
Webinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpA
Webinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpAWebinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpA
Webinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpAMiriade Spa
 
Confio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoConfio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoMiriade Spa
 
Oracle Apex - Presentazione
Oracle Apex - PresentazioneOracle Apex - Presentazione
Oracle Apex - PresentazioneMiriade Spa
 
PostgreSQL in HA per Healthcare
PostgreSQL in HA per HealthcarePostgreSQL in HA per Healthcare
PostgreSQL in HA per HealthcareMiriade Spa
 

Mehr von Miriade Spa (15)

Iperconvergenza: Nutanix e la rivoluzione dei datacenter
Iperconvergenza: Nutanix e la rivoluzione dei datacenterIperconvergenza: Nutanix e la rivoluzione dei datacenter
Iperconvergenza: Nutanix e la rivoluzione dei datacenter
 
Quanto è digitale la tua azienda?
Quanto è digitale la tua azienda?Quanto è digitale la tua azienda?
Quanto è digitale la tua azienda?
 
Big Data | Gdo e Social Media
Big Data | Gdo e Social MediaBig Data | Gdo e Social Media
Big Data | Gdo e Social Media
 
Big Data e Manifatturiero: gestione del magazzino
Big Data e Manifatturiero: gestione del magazzinoBig Data e Manifatturiero: gestione del magazzino
Big Data e Manifatturiero: gestione del magazzino
 
Application Development: come sviluppare un'app user centered
Application Development: come sviluppare un'app user centeredApplication Development: come sviluppare un'app user centered
Application Development: come sviluppare un'app user centered
 
System integration - I servizi Miriade
System integration - I servizi MiriadeSystem integration - I servizi Miriade
System integration - I servizi Miriade
 
Dalla Business Intelligence ai Big Data
Dalla Business Intelligence ai Big DataDalla Business Intelligence ai Big Data
Dalla Business Intelligence ai Big Data
 
Big Data: Analisi del Sentiment
Big Data: Analisi del SentimentBig Data: Analisi del Sentiment
Big Data: Analisi del Sentiment
 
Come gestire un progetto Big Data
Come gestire un progetto Big DataCome gestire un progetto Big Data
Come gestire un progetto Big Data
 
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanWebinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
 
Full text search | Speech by Matteo Durighetto | PGDay.IT 2013
Full text search | Speech by Matteo Durighetto | PGDay.IT 2013 Full text search | Speech by Matteo Durighetto | PGDay.IT 2013
Full text search | Speech by Matteo Durighetto | PGDay.IT 2013
 
Webinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpA
Webinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpAWebinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpA
Webinar | Google I/O e le novità di Google Apps | 27 Giugno 2013 | Miriade SpA
 
Confio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoConfio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo Durighetto
 
Oracle Apex - Presentazione
Oracle Apex - PresentazioneOracle Apex - Presentazione
Oracle Apex - Presentazione
 
PostgreSQL in HA per Healthcare
PostgreSQL in HA per HealthcarePostgreSQL in HA per Healthcare
PostgreSQL in HA per Healthcare
 

PostgrSQL 9.3&9.4 - DjangoVillage

  • 1. PostgreSQL 9.3 & 9.4 Matteo Durighetto Italian PostgreSQL Users Group www.itpug.org www.postgresql.org Matteo Durighetto - m.durighetto@miriade.it - ITPUG.org
  • 2. Chi sono? ● Speaker/Author: o Matteo Durighetto o DBA @ Miriade S.p.A. o tecnologie db: Oracle, PostgreSQL, MySQL, MSSQL .. o tecnologie os/virtual/cloud: AWS, Vmware,XEN, Linux, *NIX, Windows o Membro e Vice Presidente ITPUG Copyright 2012 Miriade S.p.a.Copyright 2012 Miriade S.p.a. Matteo Durighetto - m.durighetto@miriade.it - ITPUG.org WHOAMI ;
  • 3. Chi sono? ● PostgreSQL 9.3 è alla 9.3.4 ( 4 patch minor ) , stable ● PostgreSQL 9.4 è alla fase di beta 1, non è stable, ma è possibile già testare i vostri software con la versione per comprenderne le potenzialità per testare PostgreSQL 9.4 beta su Debian 7: deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main 9.4 Copyright 2012 Miriade S.p.a.Copyright 2012 Miriade S.p.a. Matteo Durighetto - m.durighetto@miriade.it - ITPUG.org Stato attuale sviluppo
  • 4. PostgreSQL 9.3 ● Più User Friendly ● Più Pluggable ● Più Potente ● Più Automazione ● Più Sicuro ● Più veloce nel backup logico ● Più veloce il failover m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 5. ● Più Facile 1. Pg 9.3 non necessita più la configurazione del SHMMAX, usa ora un’area di 68kb con il System V ipc, mentre il restante della shared memory è gestita tramite Posix & mmap ipc. 2. Remastering Standby, lo fa automaticamente non necessita la ricostruzione dello standby o manualmente la copia degli archivelog o repmgr: 1. pg_basebackup -r : per preparare un config file dello standbym.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 6. ● Più Pluggable 1. Foreign data wrapper in scrittura e lettura: si può integrare con vari database (mssql, oracle, mondodb..) o vari servizi in modo trasparente (ldap, twitter.. ) in modo tale da poter scrivere o leggere da varie fonti dati come se fossero tabelle locali. 1. JSON: in 9.2 Pg aveva il datatype, adesso ha metodi di estrazione del valore o convertire il valore in array e viceversa ( JSON_EACH ): http://www.postgresql.org/docs/9.3/static/functions-json.html m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 7. ● Più Pluggable 1. Background Worker: possibilità di creare un background worker che può accedere alla shared memory ed eseguire una serie di transazioni. Per esempio si può scrivere un processo che analizza l’efficienza degli indici e li ricostruisce poi oppure per accedere ad un’altra tipologia di database: https://github.com/umitanuki/mongres ● Più Potente 1. Updatable View: le view “semplici” sono aggiornabili. 2. Lateral JOIN: una subquery può richiamare un oggetto di un’altra subquery m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 8. ● Più Potente 1. SELECT base.nr, multiples.multiple FROM (SELECT generate_series(1,10) AS nr) base, LATERAL ( SELECT multiples.multiple FROM ( SELECT generate_series(1,10) AS b_nr, base.nr * 2 AS multiple ) multiples WHERE multiples.b_nr = base.nr ) multiples; m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 9. ● Più Automazione 1. Materialized view: Potete creare una view con un segmento di appoggio di cui potete far refresh. 1. DDL trigger / EVENT TRIGGER: potete automatizzare degli event dopo un evento DDL ( DDL_COMMAND_START / DDL_COMMAND_STOP ). m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 10. ● More Secure 1. Data Page Checksum: permette il riscontro di problematiche di corruzione tramite il calcolo del page checksum (8k). Necessità di essere inizializzato al momento della creazione del cluster. initdb --data-checksums m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 11. ● Faster Dump 1. Parallel Dump: l’estrazione parallela permette di evitare costose gestioni via script o altro ( è necessario abilitarla) pg_dump -Fd -j number_of_processes ● Faster Failover 1. Il Failover è meno di un secondo. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 12. PostgreSQL 9.4 1. Alter system set .. 2. Huge Page 3. Refresh concurrently materialized view 4. Replication slot 5. Logical decoding 6. Alter tablespace move 7. Hypothetical rank & agg function 8. Aggregazione ordinata & filtrata 9. Updatable view con CHECK m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 13. PostgreSQL 9.4 10.UNNEST array 11.pl/pgsql stack trace 12.JSONB 13.Background workers dinamici 14.pg_basebackup tablespace remapping 15.GIN index : miglioramenti 16.Pg_prewarm : relation m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 14. ● 1) ALTER SYSTEM SET E’ ora possibile modificare un parametro del postgresql.conf col comando alter system set . esempio : alter system set huge_pages=on; genera o modifica un file chiamato postgresql.auto.conf all’interno della PG_DATA, commentando i relativi parametri sul postgresql.conf. Al riavvio/reload prenderà le modifiche rispetto allo standard. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 15. ● 1) ALTER SYSTEM SET Esempio sulla work mem : alter system set work_mem=10M ; select pg_reload_conf(); m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 16. ● 2) HUGE Page huge page => 2mb vs 4kb ( sistemi x86 , su Itanium son 16mb etc ) 1. Permettono di mappare aree più vaste di shared memory con minori puntatori nella cache TLB della cpu, diminuisce quindi l’uso della cpu nel look up della pagina. 2. Le huge page non possono swappare. 3. Se si pone il parametro huge_pages a TRY ,alla partenza prova ad allocare le pagine ma in caso switcha a paine normali, se si pone ad ON e le pagine non sono sufficienti, il postgresql non parte. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 17. ● 2) HUGE Page 1. impostazione 20GB huge pages: 2. /etc/sysctl.conf aggiungere vm.nr_hugepages=5000 3. sysctl -p 4. alter system set huge_pages = ‘on’ ## se si vuole forzarle, default è TRY 5. pg_ctl reload -D $PG_DATA o service postgresql reload ## debian m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 18. ● 3) Refresh Materialized View concurrently 1. creazione indice univoco sulla materialized view . 2. REFRESH MATERIALIZED VIEW nomeview CONCURRENTLY ; In questo modo le query sulla materialized view non vengono bloccate. Come avviene ? tramite un delete della tabella della materialized view e un inserimento del risultato della query. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 19. ● 3) Refresh Materialized View concurrently Unendo questo tipo di refresh ai trigger si può ottenere un refresh on commit (per il caso di truncate, se contemplato va aggiunto un altro trigger ) : m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 20. ● 4) Replication Slot Problema: se lo standby è stato posto in fase di maintenance, quando lo riattiverete è possibile che il master abbia esaurito il numero di checkpoint segment della ritenzione : 1) ripristinate i checkpoint segment mancanti sullo standby nella directory archive 2) ricostruite lo standby Dalla 9.4 non serve più perchè potete creare il replication slot m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 21. ● 4) Replication Slot creazione slot di replicazione [ N.B. manterrà i checkpoint segment necessari nella XLOG ! ]: select pg_create_physical_replication_slot('slot01'); verifica: SELECT * FROM pg_replication_slots; aggiungere nel recovery.conf : primary_slotname = ‘slot01’ m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 22. ● 4) Replication Slot creazione slot di replicazione : select pg_create_physical_replication_slot('slot01'); verifica: SELECT * FROM pg_replication_slots; aggiungere nel recovery.conf : primary_slotname = ‘slot01’ m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 23. ● 5) Logical Decoding Gli slot possono essere associati ad un replica logica tramite plugin (test_deconding): select pg_create_logical_replication_slot(‘logslot01’,’test_deconding’); una volta creato lo slot che viene associato ad un db, si può procedere all’estrazione delle informazioni dal xlog. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 24. ● 5) Logical Decoding Visione delle informazioni : select pg_logical_slot_peek_changes(‘logslot0’,NULL,NULL); Estrazione delle informazioni e pulizia coda : select pg_logical_slot_get_changes(‘logslot0’,NULL,NULL); m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 25. ● 5) Logical Decoding Esempio di return del dato ( N.B. attualmente non traccia le DDL ! ) : m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it SCN/XID Numero transazione Istruzione DML
  • 26. ● 5) Logical Decoding Formato DML ( per il plugin test_decoding ) : “tipologia_oggetto schema.nomeoggetto: DML: nomecolonna[tipologia colonna]: valore “ ovviamente si possono avere concatenati più: nomecolonna1[tipologia colonna1]: valore1 nomecolonna2[tipologia colonna2]: valore2 nomecolonna3[tipologia colonna3]: valore3 … nomecolonnaN[tipologia colonnaN]: valoreN m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 27. ● 6) Alter tablespace move Dalla 9.4 è possibile muovere tutti gli oggetti da una tablespace ad un’altra dello stesso cluster. Attenzione: è single thread. ALTER TABLESPACE name MOVE { ALL | TABLES | INDEXES | MATERIALIZED VIEWS } [ OWNED BY role_name [, ...] ] TO new_tablespace [ NOWAIT ] m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 28. ● 7) Hypothetical Aggregate Function select RANK(200) WITHIN GROUP ( ORDER BY x ) from ( values ( 0),(10),(20),(100),(500),(5),(100) ) t(x) ; permettono il calcolo di rank o dense_rank etc di un valore ipotetico rispetto all’ordinamento di una colonna ed un set di valori derivanti da una tabella o da una collezione di valori. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 29. ● 7) Hypothetical Aggregate Function tips : creare indice su colonna ordinate create index idx01_t1 on t1(x); select RANK(100) WITHIN GROUP ( ORDER BY x ) from t1 ; ⇒ sequential scan della tabella select RANK(100) WITHIN GROUP ( ORDER BY x ) from t1 where x <=100 ; ⇒ index only scan con filtro m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 30. ● 8) Aggregazione ordinata e filtrata select paese, sum(produzione),sum(produzione) FILTER ( where tipo_produzione=1 ), sum(produzione) FILTER ( where tipo_produzione=2 ) from fact01 group by paese ; Con l’opzione FILTER è possibile filtrare la funzione aggregato relativa solo al calcolo di quel campo, evitando i case etc. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 31. ● 8) Aggregazione ordinata e filtrata Funzioni : mode() => valore più frequente percentile_disc() => calcolo il percentile restituendo il valore discreto della popolazione percentile_cont() => fa una interpolazione lineare e restituisce il valore ipotetico che rappresenta il percentile relativo alla popolazione m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 32. ● 8) Aggregazione ordinata e filtrata Sintassi : SELECT sito, percentile_disc(0.4) WITHIN GROUP (ORDER BY prod) from fact01 group by sito; ovviamente possia combinare le opzioni : SELECT sito, percentile_disc(0.4) WITHIN GROUP (ORDER BY prod) FILTER ( WHERE tipoproduzione=1 ) from fact01 group by sito; m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 33. ● 9) Updatable view con CHECK Si può ora definire una view updatabile con controlli sulla where condition , in modo tale che gli update non vadano a violare tali condizioni : create view vx as select id_prodotto, sum(quantita), avg(costo), sum (quantita*costo) as totale from fact01 where id_prodotto is not null WITH CHECK OPTION; m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 34. ● 10) UNNEST Possiamo fare l’unnesting degli array es. se definiamo una tabella t3( id int, b int[]) : m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 35. ● 11) PL/PGSQL stack trace CREATE FUNCTION teststack() RETURNS integer AS $$ DECLARE stack text ; BEGIN GET DIAGNOSTICS stack = PG_CONTEXT ; RAISE NOTICE E'--- Call Stack ---n%', stack ; RETURN 1 ; END; $$ LANGUAGE plpgsql ; m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 36. ● 11) PL/PGSQL stack trace m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it Identifica la riga della funzione che ha dato eccezione
  • 37. ● 12) JSONB Introdotto un nuovo formato binario del JSON , denominato JSONB, più efficiente nello storing del dato. Infatti il json veniva storato come una stringa, mentre il jsonb è di tipo binario. Sono state inoltre introdotte una serie di funzioni relative al jsonb e una serie di operatori . m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 38. ● 12) JSONB tipo dato : ‘{“key1”:”value”,”key2”:valuenumber, .. }’::jsonb operatori : -> estrae l’array o la chiave - -> estrae l’array o la chiave in formato testo senza apici “ m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 39. ● 12) JSONB esempio : m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 40. ● 12) JSONB regole di filtro : jsonb1 @> jsonb2 => jsonb1 contiene jsonb2 jsonb1 <@ jsonb2 => jsonb2 contiene jsonb1 jsonb1 = jsonb2 => jsonb1 = jsonb2 jsonb1 ? key => la chiave esiste nel jsonb1 ? jsonb1 ?| array[key1,key2] => una delle chiavi esiste nel jsonb1 ? jsonb1 ?& array[key1,key2] => tutte le chiavi esistono nel jsonb1 ? m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 41. ● 12) JSONB possibilità di indicizzarli coi gin : m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 42. ● 12) JSONB funzioni per esplodere i jsonb ( jsonb_each_text ) m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 43. ● 13) Background worker dinamici Si possono costruire dei worker dinamici e sono registrabili e attivabili dinamicamente e non più solo al restart m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 44. ● 14) pg_basebackup remapping Introdotta l’opzione t : pg_baebackup … -T OLDDIR=NEWDIR potete quindi fare un backup rimappandola directory della tablespace. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 45. ● 15) GIN Index miglioramenti *) Riduzione spazio del 40% , sostanzialmente ora vengono salvati i delta [che sono varbyte e occupano da 1 a 6 byte) e non più tutti gli offset : overhead = 6 byte KEY = 7 byte block_id = 4 byte , offest=2 byte <9.4 : overhead KEY ( block_id, offset) ( block_id, offset) ( block_id, offset) ( block_id, offset) ( block_id, offset) ( block_id, offset) >=9.4: overhead KEY ( block_id, offset) Delta1 Delta2 .. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 46. ● 15) GIN Index miglioramenti Nel peggiore dei casi occupano la stessa quantità di spazio nel migliore dei casì però si ottiene così un -40% : <9.4 6+7+(6*4) = 37 byte >=9.4 6+7+(6*1)+(3*1) = 22 byte m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 47. ● 15) GIN Index miglioramenti Altra innovazione sono i posting trees , ovvero quando una pagina dei gin index non è più sufficiente a contenere una tupla dell’indice allora viene creato un posting tree compresso . N.b. se farete upgrade con pg_upgrade, per ottenere i benefici dovrete reindicizzare! m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 48. ● 16) PG_PREWARM permette il caricamento in cache db o os di un oggetto, utile dopo un riavvio del db o per stabilizzare la cache. create extension pg_prewarm ; select pg_prewarm(‘nomeoggetto’); -- ritorna il numero di pagine caricate. m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 49. ● 16) PG_PREWARM metodi : prefetch , read, buffer #default prefetch : lettura asincrona , popola cache filesystem read : lettura sincrona , popola cache filesystem buffer : popola la cache del db. select pg_prewarm(‘nomeoggetto’,’prefetch’); m.durighetto@miriade.itwww.itpug.org - www.postgresql.org - www.miriade.it
  • 50. Attribuzione Non commerciale Condividi allo stesso modo 4.0 Italia http://creativecommons.org/licenses/by-nc-sa/3.0/it/ Copyright 2014 Miriade S.p.A. - http://www.miriade.it Copyright 2012 Miriade S.p.a. Grazie per l'attenzione Copyright 2012 Miriade S.p.a. m.durighetto@miriade.it License www.itpug.org - www.postgresql.org - www.miriade.it