Re: PostgreSQL 9.5beta - row level security et performances

From: Éric de la Musse <eric901(at)pouik(dot)org>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: PostgreSQL 9.5beta - row level security et performances
Date: 2015-10-19 07:04:01
Message-ID: 20151019090401.48a2aca6@archie
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Le Sun, 18 Oct 2015 20:26:03 +0200,
Julien Rouhaud <rjuju123(at)gmail(dot)com> a écrit :

> 2015-10-18 19:34 GMT+02:00 Éric de la Musse <eric901(at)pouik(dot)org>:
>
> > je me permets de vous solliciter sur un problème de perte sensible
> > de performance lorsque j'utilise une des nouvelles fonctionnalités
> > de la 9.5 (je suis en 9.5beta 1): les "row level
> > security" ...
> >
> > Je synthétise par 2 requêtes puis j'essaie de développer un peu:
> ...
> > 2/ Requête 2 avec les row level security *activés* sur les tables:
> > ... même chose...
> > (15 lignes)
> >
> > Temps : 2590,951 ms
> >
> > Soit un rapport de 1 à 74... une paille !
> >...

> À tout hasard, est-ce que la fonction role_from_email() est déclarée
> comme volatile, et si oui est-il possible de la déclarer comme
> immutable ?

Bien vu Julien ! Effectivement la fonction role_from_email était
VOLATILE (par défaut) et pouvait être "promue" IMMUTABLE.

Et oui cela change tout:

psql postgresql://...<<EOF
\timing
SELECT m.id, j.code, j.libelle,
p.number, p.libelle, m.date_mouvement , m.mode, m.piece, m.ref,
m.libelle, m.montant
FROM mouvements m
LEFT JOIN journaux j ON
m.client_code = j.client_code AND m.dossier_code = j.dossier_code AND
m.journal = j.code
LEFT JOIN plans p ON m.plan = p.id WHERE
m.client_code='DEMO' AND m.dossier_code='DEMO' AND m.journal='BQ' AND
m.date_mouvement BETWEEN '2015-09-01' AND '2015-10-30'; EOF
Chronométrage activé.
...
...
(15 lignes)

Temps : 56,148 ms

Le temps de traitement est bien supérieur à la même requête sans
les"row level security" (traduction française: "sécurité niveau ligne"
?) mais le rapport/la perte de performances semble plus tolérable: de
l'ordre de +60% (56 ms/35 ms). Quand même.

Existe t-il (je suppose que oui) des résultats de tests comparant les
performances des requêtes avec et sans les RLS activées ? Pouvez vous me
pointer vers ceux-ci ? Cela me permettrait de savoir si ce que
j'obtiens peut être considéré comme normal ou pas.

Dans tous les cas merci Julien pour le coup de main décisif qui remet
les RLS dans la course ;-)

--
Éric de la Musse

--
Envoi via la liste pgsql-fr-generale (pgsql-fr-generale(at)postgresql(dot)org)

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Dimitri Fontaine 2015-10-19 19:13:58 Re: PostgreSQL 9.5beta - row level security et performances
Previous Message Julien Rouhaud 2015-10-18 18:26:03 Re: PostgreSQL 9.5beta - row level security et performances