Optimisation RLS sur la table data
Change le calcul des expressions des "policy" RLS pour la table Data.
Cela permet d'améliorer les performances sur la lecture des données (droit extraction
).
Notamment :
- les
policy
créées ne font plus appel à la procédure stockéeisAuthorized
: cela permet à l'optimiseur de requête de ne plus faire de seqscan et de mobiliser un index - la recherche sur le groupe de données à changer d'opérateur (opérateur
ANY
), on permet ainsi d'indexer le groupe de données et de mobiliser un index - on ajoute l'extension
gist_btree
, seul index capable de créer un index multi-colonne mêlant des colonnes de typesltree
(les autorisations),text
le groupe de données ettsrange
(letimeScope
)
Au passage, il a fallu modifier l'init de l'appli pour déclencher un passage de flyway sur chaque schéma spécifique à chaque application (ici, pour créer l'index spécifique sur data
).
Ainsi, sur un comparatif portant sur 20 essais successifs, on obtient une moyenne sur un appel au chargement des données physico-chimie :
- 58 secondes en l'état (seqscan)
- 16 secondes avec les modifications de cette MR
Note : les policy
ne sont pas migrées : il faut donc supprimer / recréer les groupes d'autorisations pour bénéficier des optimisations.
Edited by Brendan Le Ny