SlideShare une entreprise Scribd logo
1  sur  84
Télécharger pour lire hors ligne
PostgreSQL quatre ans après
Rodolphe Quiédeville
Novapost
21 mai 2014
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 1 / 43
Axes de travail
10 axes de travail pour améliorer les performances et monter en
charge en étant serein.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 2 / 43
Axes de travail
10 axes de travail pour améliorer les performances et monter en
charge en étant serein.
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
partitionnement
index
query
???
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 2 / 43
Axes de travail
pgtune
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 3 / 43
pgtune
Script d’optimisation des paramètres de postgresql.conf. L’étape
numéro une de toute optimisation.
utilisation
pgtune -i /etc/postgresql/9.1/main/postgresql.conf
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 4 / 43
pgtune
Fait des propositions d’adaptation des paramètres de configuration au
matériel
Postulat
pgtune considère qu’un seul cluster tourne sur la machine et que
celle-ci est dédiée au serveur de base de données
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 5 / 43
pgtune
Fait des propositions d’adaptation des paramètres de configuration au
matériel
Postulat
pgtune considère qu’un seul cluster tourne sur la machine et que
celle-ci est dédiée au serveur de base de données
Restart
certains paramètres nécessite un redémarrage pour leur prise en
compte
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 5 / 43
pgtune
Sortie du script
Example
#custom_variable_classes = ’’ # list of custom variable class names
default_statistics_target = 50
maintenance_work_mem = 176MB
constraint_exclusion = on
checkpoint_completion_target = 0.9
effective_cache_size = 2GB
work_mem = 18MB
wal_buffers = 8MB
checkpoint_segments = 16
shared_buffers = 704MB
max_connections = 80
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 6 / 43
Axes de travail
pgtune
hardware
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 7 / 43
hardware
PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant
que faire se peut.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
hardware
PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant
que faire se peut.
plusieurs disques
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
hardware
PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant
que faire se peut.
plusieurs disques
plusieurs contrôlleurs
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
hardware
PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant
que faire se peut.
plusieurs disques
plusieurs contrôlleurs
RAID10 au lieu de RAID5
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
hardware
PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant
que faire se peut.
plusieurs disques
plusieurs contrôlleurs
RAID10 au lieu de RAID5
les WAL d’un coté les données de l’autre
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
Axes de travail
pgtune
hardware
tablespaces
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 9 / 43
Tablespace
Les tablespaces permettent de définir l’emplacement dans le système
de fichiers où seront stockés les fichiers représentant les objets de la
base de données.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
Tablespace
Les tablespaces permettent de définir l’emplacement dans le système
de fichiers où seront stockés les fichiers représentant les objets de la
base de données.
séparer les tables des index
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
Tablespace
Les tablespaces permettent de définir l’emplacement dans le système
de fichiers où seront stockés les fichiers représentant les objets de la
base de données.
séparer les tables des index
séparer les tables d’archives des données fraiches
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
Tablespace
Les tablespaces permettent de définir l’emplacement dans le système
de fichiers où seront stockés les fichiers représentant les objets de la
base de données.
séparer les tables des index
séparer les tables d’archives des données fraiches
lier les spécificités physique du stockage à l’utilisation logique des
données (session en SSD)
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
Tablespace
Création
CREATE TABLESPACE espace_rapide LOCATION ’/mnt/sda1/postgresql/data’;
Création de la table
CREATE TABLE foo(i int) TABLESPACE espace1;
Le déplacement de données existantes est également possible.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 11 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 12 / 43
replication
Vaste programme.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 13 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 14 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
synchrone/asynchrone
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
synchrone/asynchrone
warn/hot standby
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
synchrone/asynchrone
warn/hot standby
single/multi master
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
synchrone/asynchrone
warn/hot standby
single/multi master
granularité au niveau table
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
synchrone/asynchrone
warn/hot standby
single/multi master
granularité au niveau table
incore/middleware (pgpool-II)
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
replication
Vaste programme. La réplication est un des sujets les plus discutés
des bases de données à ce jour.
synchrone/asynchrone
warn/hot standby
single/multi master
granularité au niveau table
incore/middleware (pgpool-II)
Warning
La réplication est simple à mettre en oeuvre, la gérer au jour le jour est
un travail de tous les jours.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 16 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 17 / 43
connection pooler
L’utilisation d’un pooler de connection est intéressant quand un grand
nombre de connections sont créees pour de courtes durées. Un
pooler peut aussi être intéressant conjointement avec une réplication.
pgbouncer
pgpool-II
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 18 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 19 / 43
vaccum
La commande VACUUM doit traiter chaque table régulièrement pour
plusieurs raisons :
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
vaccum
La commande VACUUM doit traiter chaque table régulièrement pour
plusieurs raisons :
pour récupérer ou ré-utiliser l’espace disque occupé par les lignes
supprimées ou mises à jour
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
vaccum
La commande VACUUM doit traiter chaque table régulièrement pour
plusieurs raisons :
pour récupérer ou ré-utiliser l’espace disque occupé par les lignes
supprimées ou mises à jour
pour mettre à jour les statistiques utilisées par l’optimiseur de
PostgreSQL
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
vaccum
La commande VACUUM doit traiter chaque table régulièrement pour
plusieurs raisons :
pour récupérer ou ré-utiliser l’espace disque occupé par les lignes
supprimées ou mises à jour
pour mettre à jour les statistiques utilisées par l’optimiseur de
PostgreSQL
pour mettre à jour la carte de visibilité qui accélère les parcours
d’index seuls
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
vaccum
La commande VACUUM doit traiter chaque table régulièrement pour
plusieurs raisons :
pour récupérer ou ré-utiliser l’espace disque occupé par les lignes
supprimées ou mises à jour
pour mettre à jour les statistiques utilisées par l’optimiseur de
PostgreSQL
pour mettre à jour la carte de visibilité qui accélère les parcours
d’index seuls
pour prévenir la perte des données les plus anciennes à cause
d’un cycle de l’identifiant de transaction (XID) ou d’un cycle de
l’identifiant de multixact.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
vaccum
La commande VACUUM doit traiter chaque table régulièrement pour
plusieurs raisons :
pour récupérer ou ré-utiliser l’espace disque occupé par les lignes
supprimées ou mises à jour
pour mettre à jour les statistiques utilisées par l’optimiseur de
PostgreSQL
pour mettre à jour la carte de visibilité qui accélère les parcours
d’index seuls
pour prévenir la perte des données les plus anciennes à cause
d’un cycle de l’identifiant de transaction (XID) ou d’un cycle de
l’identifiant de multixact.
autovaccum
Si vous ne savez pas à quoi sert autovaccum, laissez faire
autovaccum.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 21 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 22 / 43
Vues matérialisées
Le meilleur de la table et de la vue.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 23 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
crée une table physique
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
crée une table physique
porte ses propres index
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
crée une table physique
porte ses propres index
scinde les flux de requêtes
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
crée une table physique
porte ses propres index
scinde les flux de requêtes
doit être mise à jour suivant les besoins !
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
crée une table physique
porte ses propres index
scinde les flux de requêtes
doit être mise à jour suivant les besoins !
le REFRESH prend un ACCESS EXCLUSIVE LOCK (corrigé en
9.4)
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Le meilleur de la table et de la vue. Les meilleures alliées des
business analyst.
se crée comme une vue
crée une table physique
porte ses propres index
scinde les flux de requêtes
doit être mise à jour suivant les besoins !
le REFRESH prend un ACCESS EXCLUSIVE LOCK (corrigé en
9.4)
New !
A partir de PostgreSQL 9.3
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
Vues matérialisées
Création
CREATE MATERIALIZED VIEW resume_ventes AS
SELECT
no_vendeur,
date_facture,
sum(mtt_facture)::numeric(13,2) as mtt_ventes
FROM facture
WHERE date_facture < CURRENT_DATE
GROUP BY
no_vendeur,
date_facture
ORDER BY
no_vendeur,
date_facture;
CREATE UNIQUE INDEX ventes_resume_vendeur
ON sales_summary (no_vendeur, date_facture);
Mise à jour
REFRESH MATERIALIZED VIEW resume_ventes;
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 25 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
partitionnement
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 26 / 43
partitionnement
Le partitionnement fait référence à la division d’une table logique
volumineuse en plusieurs parties physiques plus petites.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
partitionnement
Le partitionnement fait référence à la division d’une table logique
volumineuse en plusieurs parties physiques plus petites.
utilise l’héritage de table
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
partitionnement
Le partitionnement fait référence à la division d’une table logique
volumineuse en plusieurs parties physiques plus petites.
utilise l’héritage de table
partitionnement par échelon
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
partitionnement
Le partitionnement fait référence à la division d’une table logique
volumineuse en plusieurs parties physiques plus petites.
utilise l’héritage de table
partitionnement par échelon
partitionnement par liste
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
partitionnement
Création table maître
SQL
CREATE TABLE mesure (
id_ville int not null,
date_trace date not null,
temperature int,
ventes int
);
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 28 / 43
partitionnement
Création des tables filles avec contraintes
SQL
CREATE TABLE mesure_a2006m02 (
CHECK ( date_trace >= DATE ’2006-02-01’ AND date_trace < DATE
’2006-03-01’ )
) INHERITS (mesure);
CREATE TABLE mesure_a2006m03 (
CHECK ( date_trace >= DATE ’2006-03-01’ AND date_trace < DATE
’2006-04-01’ )
) INHERITS (mesure);
...
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 29 / 43
partitionnement
Création des index
SQL
CREATE INDEX mesure_a2006m02_date_trace ON mesure_a2006m02 (date_trace);
CREATE INDEX mesure_a2006m03_date_trace ON mesure_a2006m03 (date_trace);
...
CREATE INDEX mesure_a2007m11_date_trace ON mesure_a2007m11 (date_trace);
CREATE INDEX mesure_a2007m12_date_trace ON mesure_a2007m12 (date_trace);
CREATE INDEX mesure_a2008m01_date_trace ON mesure_a2008m01 (date_trace);
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 30 / 43
partitionnement
Création des trigger
SQL
CREATE OR REPLACE FUNCTION mesure_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO mesure_a2008m01 VALUES (NEW.*);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
SQL
CREATE TRIGGER insert_mesure_trigger
BEFORE INSERT ON mesure
FOR EACH ROW EXECUTE PROCEDURE mesure_insert_trigger();
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 31 / 43
partitionnement
Attention à l’utilisation
SQL
rodo@[local]:5432 rodo=> explain select * from mesure ;
QUERY PLAN
--------------------------------------------------------------------------
Append (cost=0.00..55.40 rows=3541 width=16)
-> Seq Scan on mesure (cost=0.00..0.00 rows=1 width=16)
-> Seq Scan on mesure_a2006m02 (cost=0.00..27.70 rows=1770 width=16)
-> Seq Scan on mesure_a2006m03 (cost=0.00..27.70 rows=1770 width=16)
(4 rows)
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 32 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
héritage de table
index
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 33 / 43
index
Il s’avère que la seule chose que les développeurs doivent
connaître est l’indexation. En fait, l’indexation d’une base de
données est un travail de développeurs car l’information la
plus importante pour une bonne indexation ne se situe ni au
niveau de la configuration du système de stockage ni dans la
configuration du matériel, mais plutôt au niveau de
l’application :
« comment l’application cherche ses données ».
Markus Winand - http://use-the-index-luke.com/fr
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 34 / 43
index
Trop d’index nuit à la performance. Mettre à jour un index qui n’est
jamais lu n’est pas forcément nécessaire.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 35 / 43
index
Trop d’index nuit à la performance. Mettre à jour un index qui n’est
jamais lu n’est pas forcément nécessaire.
SQL
indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
--------------------+----------+--------------+---------------
job_job_fkposte_id | 0 | 0 | 0
job_job_region_id | 0 | 0 | 0
job_job_company_id | 43 | 323 | 305
job_job_author_id | 0 | 0 | 0
job_job_pkey | 22968 | 22930 | 22911
(5 rows)
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 35 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
héritage de table
index
query
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 36 / 43
query
La ré-écriture des requêtes et le travail coté application
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
query
La ré-écriture des requêtes et le travail coté application
la requête la plus rapide est celle qui n’est pas éxecutée
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
query
La ré-écriture des requêtes et le travail coté application
la requête la plus rapide est celle qui n’est pas éxecutée
rien ne sert de ré-écrire les index si les requêtes ne les utilisent
pas
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
query
La ré-écriture des requêtes et le travail coté application
la requête la plus rapide est celle qui n’est pas éxecutée
rien ne sert de ré-écrire les index si les requêtes ne les utilisent
pas
certains axes d’optimisation ne sont pas compatible avec les
framework mal conçus
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
héritage de table
index
query
???
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 38 / 43
Axes de travail
pgtune
hardware
tablespaces
replication
connection pooler
vaccum
materialized views
héritage de table
index
query
schema
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 39 / 43
schema
Last but not least, le schema reste la source numéro un des
problèmes de performance et de montée en charge.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
schema
Last but not least, le schema reste la source numéro un des
problèmes de performance et de montée en charge.
table
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
schema
Last but not least, le schema reste la source numéro un des
problèmes de performance et de montée en charge.
table
view
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
schema
Last but not least, le schema reste la source numéro un des
problèmes de performance et de montée en charge.
table
view
index
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
schema
Last but not least, le schema reste la source numéro un des
problèmes de performance et de montée en charge.
table
view
index
"les jointures c’est bon mangez-en"
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
Conclusion
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 41 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
1 rédaction d’un protocole de test avec son jeu de données
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
1 rédaction d’un protocole de test avec son jeu de données
2 mesure des indicateurs
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
1 rédaction d’un protocole de test avec son jeu de données
2 mesure des indicateurs
3 modification d’un paramètre
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
1 rédaction d’un protocole de test avec son jeu de données
2 mesure des indicateurs
3 modification d’un paramètre
4 mesure des même indicateurs
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
1 rédaction d’un protocole de test avec son jeu de données
2 mesure des indicateurs
3 modification d’un paramètre
4 mesure des même indicateurs
5 analyse des résultats
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Conclusion
Tout modification structurelle doit s’accompagner d’un processus de
validation itératif.
1 rédaction d’un protocole de test avec son jeu de données
2 mesure des indicateurs
3 modification d’un paramètre
4 mesure des même indicateurs
5 analyse des résultats
6 goto 3 | 1
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
Questions ?
Rodolphe Quiédeville
rodolphe@quiedeville.org
http://blog.rodolphe.quiedeville.org/
Document publié sous Licence Creative Commons BY-SA 2.0
Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 43 / 43

Contenu connexe

En vedette

Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction PresentationNerd Tzanetopoulos
 
Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISOmar El Kharki
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google mapsVisionGÉOMATIQUE2012
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Déposer une thèse dans TEL ou HAL
Déposer une thèse dans TEL ou HALDéposer une thèse dans TEL ou HAL
Déposer une thèse dans TEL ou HALOAccsd
 
alphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationalphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationAlphorm
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQLAlphorm
 
Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015Benjamin Lampérier
 
Les principales mesures de la loi Macron
Les principales mesures de la loi MacronLes principales mesures de la loi Macron
Les principales mesures de la loi MacronBecuwe Maëlle
 
Programme 2003 Top Croissance
Programme 2003 Top CroissanceProgramme 2003 Top Croissance
Programme 2003 Top Croissanceregionalpartner56
 
Model de qualité @ msdevmtl
Model de qualité @ msdevmtlModel de qualité @ msdevmtl
Model de qualité @ msdevmtlMSDEVMTL
 
Spleen de paris presentation
Spleen de paris presentationSpleen de paris presentation
Spleen de paris presentationglederma
 

En vedette (20)

Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction Presentation
 
Bases de données spatiales
Bases de données spatialesBases de données spatiales
Bases de données spatiales
 
Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGIS
 
Introduction au webmapping au-dela de google maps
Introduction au webmapping  au-dela de google mapsIntroduction au webmapping  au-dela de google maps
Introduction au webmapping au-dela de google maps
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Les cartes mentales_v1.0
Les cartes mentales_v1.0Les cartes mentales_v1.0
Les cartes mentales_v1.0
 
Québec 511
Québec 511Québec 511
Québec 511
 
Cakephp
CakephpCakephp
Cakephp
 
Cartes mentales v2.0
Cartes mentales v2.0Cartes mentales v2.0
Cartes mentales v2.0
 
Déposer une thèse dans TEL ou HAL
Déposer une thèse dans TEL ou HALDéposer une thèse dans TEL ou HAL
Déposer une thèse dans TEL ou HAL
 
alphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationalphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administration
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQL
 
Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015Meetup CakePHP Amiens / 25 mars 2015
Meetup CakePHP Amiens / 25 mars 2015
 
Les principales mesures de la loi Macron
Les principales mesures de la loi MacronLes principales mesures de la loi Macron
Les principales mesures de la loi Macron
 
Programme 2003 Top Croissance
Programme 2003 Top CroissanceProgramme 2003 Top Croissance
Programme 2003 Top Croissance
 
Atelier energies smart_city amft
Atelier energies smart_city amftAtelier energies smart_city amft
Atelier energies smart_city amft
 
Portefolio s
Portefolio sPortefolio s
Portefolio s
 
Services Smart City Marseille
Services Smart City MarseilleServices Smart City Marseille
Services Smart City Marseille
 
Model de qualité @ msdevmtl
Model de qualité @ msdevmtlModel de qualité @ msdevmtl
Model de qualité @ msdevmtl
 
Spleen de paris presentation
Spleen de paris presentationSpleen de paris presentation
Spleen de paris presentation
 

Plus de Rodolphe Quiédeville (16)

Tests unitaires pour PostgreSQL avec pgTap
Tests unitaires pour PostgreSQL avec pgTapTests unitaires pour PostgreSQL avec pgTap
Tests unitaires pour PostgreSQL avec pgTap
 
PostgreSQL Meetup Nantes #2
PostgreSQL Meetup Nantes #2PostgreSQL Meetup Nantes #2
PostgreSQL Meetup Nantes #2
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
 
Pytong2015
Pytong2015Pytong2015
Pytong2015
 
Tsung de 1 à 1 million / Confoo Montréal 2015
Tsung de 1 à 1 million / Confoo Montréal 2015Tsung de 1 à 1 million / Confoo Montréal 2015
Tsung de 1 à 1 million / Confoo Montréal 2015
 
Confoo django
Confoo djangoConfoo django
Confoo django
 
BBL Données gégraphiques libres chez Work4labs
BBL Données gégraphiques libres chez Work4labsBBL Données gégraphiques libres chez Work4labs
BBL Données gégraphiques libres chez Work4labs
 
Tsung GIS
Tsung GISTsung GIS
Tsung GIS
 
BBL chez Mappy autour de Tsung
BBL chez Mappy autour de TsungBBL chez Mappy autour de Tsung
BBL chez Mappy autour de Tsung
 
Un Tsung vaut mieux que 2 "croisons les doigts"
Un Tsung vaut mieux que 2 "croisons les doigts"Un Tsung vaut mieux que 2 "croisons les doigts"
Un Tsung vaut mieux que 2 "croisons les doigts"
 
OpenStreetMap Realtime Check
OpenStreetMap Realtime CheckOpenStreetMap Realtime Check
OpenStreetMap Realtime Check
 
Présentation de Tsung chez Leboncoin
Présentation de Tsung chez LeboncoinPrésentation de Tsung chez Leboncoin
Présentation de Tsung chez Leboncoin
 
de 1 à 1 million avec Tsung
de 1 à 1 million avec Tsungde 1 à 1 million avec Tsung
de 1 à 1 million avec Tsung
 
Tests de performance avec Tsung
Tests de performance avec TsungTests de performance avec Tsung
Tests de performance avec Tsung
 
Asterisk
AsteriskAsterisk
Asterisk
 
Tests de montée en charge avec Tsung
Tests de montée en charge avec TsungTests de montée en charge avec Tsung
Tests de montée en charge avec Tsung
 

BBL autour de PostgreSQL @Novapost

  • 1. PostgreSQL quatre ans après Rodolphe Quiédeville Novapost 21 mai 2014 Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 1 / 43
  • 2. Axes de travail 10 axes de travail pour améliorer les performances et monter en charge en étant serein. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 2 / 43
  • 3. Axes de travail 10 axes de travail pour améliorer les performances et monter en charge en étant serein. pgtune hardware tablespaces replication connection pooler vaccum materialized views partitionnement index query ??? Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 2 / 43
  • 4. Axes de travail pgtune Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 3 / 43
  • 5. pgtune Script d’optimisation des paramètres de postgresql.conf. L’étape numéro une de toute optimisation. utilisation pgtune -i /etc/postgresql/9.1/main/postgresql.conf Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 4 / 43
  • 6. pgtune Fait des propositions d’adaptation des paramètres de configuration au matériel Postulat pgtune considère qu’un seul cluster tourne sur la machine et que celle-ci est dédiée au serveur de base de données Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 5 / 43
  • 7. pgtune Fait des propositions d’adaptation des paramètres de configuration au matériel Postulat pgtune considère qu’un seul cluster tourne sur la machine et que celle-ci est dédiée au serveur de base de données Restart certains paramètres nécessite un redémarrage pour leur prise en compte Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 5 / 43
  • 8. pgtune Sortie du script Example #custom_variable_classes = ’’ # list of custom variable class names default_statistics_target = 50 maintenance_work_mem = 176MB constraint_exclusion = on checkpoint_completion_target = 0.9 effective_cache_size = 2GB work_mem = 18MB wal_buffers = 8MB checkpoint_segments = 16 shared_buffers = 704MB max_connections = 80 Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 6 / 43
  • 9. Axes de travail pgtune hardware Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 7 / 43
  • 10. hardware PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant que faire se peut. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
  • 11. hardware PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant que faire se peut. plusieurs disques Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
  • 12. hardware PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant que faire se peut. plusieurs disques plusieurs contrôlleurs Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
  • 13. hardware PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant que faire se peut. plusieurs disques plusieurs contrôlleurs RAID10 au lieu de RAID5 Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
  • 14. hardware PostgreSQL a plusieurs flux de lecture/écriture, il faut en profiter tant que faire se peut. plusieurs disques plusieurs contrôlleurs RAID10 au lieu de RAID5 les WAL d’un coté les données de l’autre Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 8 / 43
  • 15. Axes de travail pgtune hardware tablespaces Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 9 / 43
  • 16. Tablespace Les tablespaces permettent de définir l’emplacement dans le système de fichiers où seront stockés les fichiers représentant les objets de la base de données. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
  • 17. Tablespace Les tablespaces permettent de définir l’emplacement dans le système de fichiers où seront stockés les fichiers représentant les objets de la base de données. séparer les tables des index Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
  • 18. Tablespace Les tablespaces permettent de définir l’emplacement dans le système de fichiers où seront stockés les fichiers représentant les objets de la base de données. séparer les tables des index séparer les tables d’archives des données fraiches Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
  • 19. Tablespace Les tablespaces permettent de définir l’emplacement dans le système de fichiers où seront stockés les fichiers représentant les objets de la base de données. séparer les tables des index séparer les tables d’archives des données fraiches lier les spécificités physique du stockage à l’utilisation logique des données (session en SSD) Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 10 / 43
  • 20. Tablespace Création CREATE TABLESPACE espace_rapide LOCATION ’/mnt/sda1/postgresql/data’; Création de la table CREATE TABLE foo(i int) TABLESPACE espace1; Le déplacement de données existantes est également possible. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 11 / 43
  • 21. Axes de travail pgtune hardware tablespaces replication Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 12 / 43
  • 22. replication Vaste programme. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 13 / 43
  • 23. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 14 / 43
  • 24. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. synchrone/asynchrone Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
  • 25. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. synchrone/asynchrone warn/hot standby Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
  • 26. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. synchrone/asynchrone warn/hot standby single/multi master Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
  • 27. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. synchrone/asynchrone warn/hot standby single/multi master granularité au niveau table Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
  • 28. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. synchrone/asynchrone warn/hot standby single/multi master granularité au niveau table incore/middleware (pgpool-II) Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 15 / 43
  • 29. replication Vaste programme. La réplication est un des sujets les plus discutés des bases de données à ce jour. synchrone/asynchrone warn/hot standby single/multi master granularité au niveau table incore/middleware (pgpool-II) Warning La réplication est simple à mettre en oeuvre, la gérer au jour le jour est un travail de tous les jours. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 16 / 43
  • 30. Axes de travail pgtune hardware tablespaces replication connection pooler Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 17 / 43
  • 31. connection pooler L’utilisation d’un pooler de connection est intéressant quand un grand nombre de connections sont créees pour de courtes durées. Un pooler peut aussi être intéressant conjointement avec une réplication. pgbouncer pgpool-II Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 18 / 43
  • 32. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 19 / 43
  • 33. vaccum La commande VACUUM doit traiter chaque table régulièrement pour plusieurs raisons : Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
  • 34. vaccum La commande VACUUM doit traiter chaque table régulièrement pour plusieurs raisons : pour récupérer ou ré-utiliser l’espace disque occupé par les lignes supprimées ou mises à jour Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
  • 35. vaccum La commande VACUUM doit traiter chaque table régulièrement pour plusieurs raisons : pour récupérer ou ré-utiliser l’espace disque occupé par les lignes supprimées ou mises à jour pour mettre à jour les statistiques utilisées par l’optimiseur de PostgreSQL Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
  • 36. vaccum La commande VACUUM doit traiter chaque table régulièrement pour plusieurs raisons : pour récupérer ou ré-utiliser l’espace disque occupé par les lignes supprimées ou mises à jour pour mettre à jour les statistiques utilisées par l’optimiseur de PostgreSQL pour mettre à jour la carte de visibilité qui accélère les parcours d’index seuls Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
  • 37. vaccum La commande VACUUM doit traiter chaque table régulièrement pour plusieurs raisons : pour récupérer ou ré-utiliser l’espace disque occupé par les lignes supprimées ou mises à jour pour mettre à jour les statistiques utilisées par l’optimiseur de PostgreSQL pour mettre à jour la carte de visibilité qui accélère les parcours d’index seuls pour prévenir la perte des données les plus anciennes à cause d’un cycle de l’identifiant de transaction (XID) ou d’un cycle de l’identifiant de multixact. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 20 / 43
  • 38. vaccum La commande VACUUM doit traiter chaque table régulièrement pour plusieurs raisons : pour récupérer ou ré-utiliser l’espace disque occupé par les lignes supprimées ou mises à jour pour mettre à jour les statistiques utilisées par l’optimiseur de PostgreSQL pour mettre à jour la carte de visibilité qui accélère les parcours d’index seuls pour prévenir la perte des données les plus anciennes à cause d’un cycle de l’identifiant de transaction (XID) ou d’un cycle de l’identifiant de multixact. autovaccum Si vous ne savez pas à quoi sert autovaccum, laissez faire autovaccum. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 21 / 43
  • 39. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum materialized views Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 22 / 43
  • 40. Vues matérialisées Le meilleur de la table et de la vue. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 23 / 43
  • 41. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 42. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 43. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue crée une table physique Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 44. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue crée une table physique porte ses propres index Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 45. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue crée une table physique porte ses propres index scinde les flux de requêtes Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 46. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue crée une table physique porte ses propres index scinde les flux de requêtes doit être mise à jour suivant les besoins ! Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 47. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue crée une table physique porte ses propres index scinde les flux de requêtes doit être mise à jour suivant les besoins ! le REFRESH prend un ACCESS EXCLUSIVE LOCK (corrigé en 9.4) Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 48. Vues matérialisées Le meilleur de la table et de la vue. Les meilleures alliées des business analyst. se crée comme une vue crée une table physique porte ses propres index scinde les flux de requêtes doit être mise à jour suivant les besoins ! le REFRESH prend un ACCESS EXCLUSIVE LOCK (corrigé en 9.4) New ! A partir de PostgreSQL 9.3 Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 24 / 43
  • 49. Vues matérialisées Création CREATE MATERIALIZED VIEW resume_ventes AS SELECT no_vendeur, date_facture, sum(mtt_facture)::numeric(13,2) as mtt_ventes FROM facture WHERE date_facture < CURRENT_DATE GROUP BY no_vendeur, date_facture ORDER BY no_vendeur, date_facture; CREATE UNIQUE INDEX ventes_resume_vendeur ON sales_summary (no_vendeur, date_facture); Mise à jour REFRESH MATERIALIZED VIEW resume_ventes; Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 25 / 43
  • 50. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum materialized views partitionnement Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 26 / 43
  • 51. partitionnement Le partitionnement fait référence à la division d’une table logique volumineuse en plusieurs parties physiques plus petites. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
  • 52. partitionnement Le partitionnement fait référence à la division d’une table logique volumineuse en plusieurs parties physiques plus petites. utilise l’héritage de table Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
  • 53. partitionnement Le partitionnement fait référence à la division d’une table logique volumineuse en plusieurs parties physiques plus petites. utilise l’héritage de table partitionnement par échelon Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
  • 54. partitionnement Le partitionnement fait référence à la division d’une table logique volumineuse en plusieurs parties physiques plus petites. utilise l’héritage de table partitionnement par échelon partitionnement par liste Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 27 / 43
  • 55. partitionnement Création table maître SQL CREATE TABLE mesure ( id_ville int not null, date_trace date not null, temperature int, ventes int ); Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 28 / 43
  • 56. partitionnement Création des tables filles avec contraintes SQL CREATE TABLE mesure_a2006m02 ( CHECK ( date_trace >= DATE ’2006-02-01’ AND date_trace < DATE ’2006-03-01’ ) ) INHERITS (mesure); CREATE TABLE mesure_a2006m03 ( CHECK ( date_trace >= DATE ’2006-03-01’ AND date_trace < DATE ’2006-04-01’ ) ) INHERITS (mesure); ... Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 29 / 43
  • 57. partitionnement Création des index SQL CREATE INDEX mesure_a2006m02_date_trace ON mesure_a2006m02 (date_trace); CREATE INDEX mesure_a2006m03_date_trace ON mesure_a2006m03 (date_trace); ... CREATE INDEX mesure_a2007m11_date_trace ON mesure_a2007m11 (date_trace); CREATE INDEX mesure_a2007m12_date_trace ON mesure_a2007m12 (date_trace); CREATE INDEX mesure_a2008m01_date_trace ON mesure_a2008m01 (date_trace); Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 30 / 43
  • 58. partitionnement Création des trigger SQL CREATE OR REPLACE FUNCTION mesure_insert_trigger() RETURNS TRIGGER AS $$ BEGIN INSERT INTO mesure_a2008m01 VALUES (NEW.*); RETURN NULL; END; $$ LANGUAGE plpgsql; SQL CREATE TRIGGER insert_mesure_trigger BEFORE INSERT ON mesure FOR EACH ROW EXECUTE PROCEDURE mesure_insert_trigger(); Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 31 / 43
  • 59. partitionnement Attention à l’utilisation SQL rodo@[local]:5432 rodo=> explain select * from mesure ; QUERY PLAN -------------------------------------------------------------------------- Append (cost=0.00..55.40 rows=3541 width=16) -> Seq Scan on mesure (cost=0.00..0.00 rows=1 width=16) -> Seq Scan on mesure_a2006m02 (cost=0.00..27.70 rows=1770 width=16) -> Seq Scan on mesure_a2006m03 (cost=0.00..27.70 rows=1770 width=16) (4 rows) Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 32 / 43
  • 60. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum materialized views héritage de table index Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 33 / 43
  • 61. index Il s’avère que la seule chose que les développeurs doivent connaître est l’indexation. En fait, l’indexation d’une base de données est un travail de développeurs car l’information la plus importante pour une bonne indexation ne se situe ni au niveau de la configuration du système de stockage ni dans la configuration du matériel, mais plutôt au niveau de l’application : « comment l’application cherche ses données ». Markus Winand - http://use-the-index-luke.com/fr Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 34 / 43
  • 62. index Trop d’index nuit à la performance. Mettre à jour un index qui n’est jamais lu n’est pas forcément nécessaire. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 35 / 43
  • 63. index Trop d’index nuit à la performance. Mettre à jour un index qui n’est jamais lu n’est pas forcément nécessaire. SQL indexrelname | idx_scan | idx_tup_read | idx_tup_fetch --------------------+----------+--------------+--------------- job_job_fkposte_id | 0 | 0 | 0 job_job_region_id | 0 | 0 | 0 job_job_company_id | 43 | 323 | 305 job_job_author_id | 0 | 0 | 0 job_job_pkey | 22968 | 22930 | 22911 (5 rows) Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 35 / 43
  • 64. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum materialized views héritage de table index query Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 36 / 43
  • 65. query La ré-écriture des requêtes et le travail coté application Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
  • 66. query La ré-écriture des requêtes et le travail coté application la requête la plus rapide est celle qui n’est pas éxecutée Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
  • 67. query La ré-écriture des requêtes et le travail coté application la requête la plus rapide est celle qui n’est pas éxecutée rien ne sert de ré-écrire les index si les requêtes ne les utilisent pas Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
  • 68. query La ré-écriture des requêtes et le travail coté application la requête la plus rapide est celle qui n’est pas éxecutée rien ne sert de ré-écrire les index si les requêtes ne les utilisent pas certains axes d’optimisation ne sont pas compatible avec les framework mal conçus Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 37 / 43
  • 69. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum materialized views héritage de table index query ??? Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 38 / 43
  • 70. Axes de travail pgtune hardware tablespaces replication connection pooler vaccum materialized views héritage de table index query schema Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 39 / 43
  • 71. schema Last but not least, le schema reste la source numéro un des problèmes de performance et de montée en charge. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
  • 72. schema Last but not least, le schema reste la source numéro un des problèmes de performance et de montée en charge. table Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
  • 73. schema Last but not least, le schema reste la source numéro un des problèmes de performance et de montée en charge. table view Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
  • 74. schema Last but not least, le schema reste la source numéro un des problèmes de performance et de montée en charge. table view index Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
  • 75. schema Last but not least, le schema reste la source numéro un des problèmes de performance et de montée en charge. table view index "les jointures c’est bon mangez-en" Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 40 / 43
  • 76. Conclusion Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 41 / 43
  • 77. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 78. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. 1 rédaction d’un protocole de test avec son jeu de données Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 79. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. 1 rédaction d’un protocole de test avec son jeu de données 2 mesure des indicateurs Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 80. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. 1 rédaction d’un protocole de test avec son jeu de données 2 mesure des indicateurs 3 modification d’un paramètre Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 81. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. 1 rédaction d’un protocole de test avec son jeu de données 2 mesure des indicateurs 3 modification d’un paramètre 4 mesure des même indicateurs Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 82. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. 1 rédaction d’un protocole de test avec son jeu de données 2 mesure des indicateurs 3 modification d’un paramètre 4 mesure des même indicateurs 5 analyse des résultats Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 83. Conclusion Tout modification structurelle doit s’accompagner d’un processus de validation itératif. 1 rédaction d’un protocole de test avec son jeu de données 2 mesure des indicateurs 3 modification d’un paramètre 4 mesure des même indicateurs 5 analyse des résultats 6 goto 3 | 1 Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 42 / 43
  • 84. Questions ? Rodolphe Quiédeville rodolphe@quiedeville.org http://blog.rodolphe.quiedeville.org/ Document publié sous Licence Creative Commons BY-SA 2.0 Rodolphe Quiédeville (Freelance) PostgreSQL quatre ans après 21 mai 2014 43 / 43