Skip to content

Optimisation RLS sur la table data

Brendan Le Ny requested to merge optimisation_rls_data into master

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ée isAuthorized : 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 types ltree (les autorisations), text le groupe de données et tsrange (le timeScope)

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

Merge request reports