diff options
author | Andreas Brandl <abrandl@gitlab.com> | 2019-08-27 20:15:28 +0300 |
---|---|---|
committer | Andreas Brandl <abrandl@gitlab.com> | 2019-09-03 13:16:03 +0300 |
commit | 53801b1206ff9e165b30117e3c3bcf543db7ad2c (patch) | |
tree | 724b80019bb368f6f7e270209a612e32d578c756 /changelogs | |
parent | f15e3efba0e0523575ce61bd80396abda94b8cec (diff) |
Preload routes information
This fixes a high frequency N+1 issue:
`RoutableActions#find_routable!` is used across many controllers to
retrieve e.g. the Project or Namespace by path. The `#find_routable!`
method calls `#ensure_canonical_path` which in turn retrieves
`#full_path` from the given Routable.
This in turn triggers a lookup on `routes`, leading to a high frequency
of these queries:
```sql
SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = $1 AND
"routes"."source_type" = $2 LIMIT $3
```
This is unnecessary as we already join `routes` in
`Routable#find_by_full_path` anyways.
Diffstat (limited to 'changelogs')
-rw-r--r-- | changelogs/unreleased/ab-routable-nplus1.yml | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/changelogs/unreleased/ab-routable-nplus1.yml b/changelogs/unreleased/ab-routable-nplus1.yml new file mode 100644 index 00000000000..7b59bc78dae --- /dev/null +++ b/changelogs/unreleased/ab-routable-nplus1.yml @@ -0,0 +1,5 @@ +--- +title: Preload routes information to fix N+1 issue +merge_request: 32352 +author: +type: performance |