fix(session): List performance with large number of session connections

As part of the performance improvements for listing sessions for v0.9.0,
the view used to retrieve sessions for listing was updated to no longer
include a join on session_connection. However, a later migration that
was adding additional columns to this view inadvertently re-added the
join and session_connection columns. This resulted in requests to list
sessions performing this join, and returning additional rows for each
connection in a session. The application would ignore this additional
data, since it is no longer returned via the API. This would be
particularly impactful in cases where there are a large number of
connections per session, as this would greatly increase the amount of
data returned by the database.

This fix removes the session_connection join from this view, which
should restore the original performance improvements even in cases where
there is a large number of session connections per session.

See: https://github.com/hashicorp/boundary/pull/2160
Ref: 32070678dc
Fixes: 1e3c941be1
pull/3280/head
Timothy Messier 3 years ago
parent 7e094d824f
commit 876f9bb07f
No known key found for this signature in database
GPG Key ID: EFD2F184F7600572

@ -66,6 +66,9 @@ Canonical reference for changes, improvements, and bugfixes for Boundary.
* resource listing: API requests to list a resource (targets, sessions, users,
etc) now properly return all resources the callers has appropriate permission
to list ([PR](https://github.com/hashicorp/boundary/pull/3278))
* sessions: Fix a bug that contributed to slow response times when listing
sessions that had a large number of connections
([PR](https://github.com/hashicorp/boundary/pull/3280))
## 0.12.3 (2023/05/26)

@ -18,6 +18,7 @@ begin;
drop view session_list;
-- Replaces view from 60/02_sessions.up.sql to add swp.worker_id
-- Replaced in 72/03_session_list_perf_fix.up.sql
create view session_list as
select
s.public_id,

@ -0,0 +1,40 @@
-- Copyright (c) HashiCorp, Inc.
-- SPDX-License-Identifier: MPL-2.0
begin;
-- Replaces the view created in 69/02_session_worker_protocol.up.sql
drop view session_list;
create view session_list as
select s.public_id,
s.user_id,
shsh.host_id,
s.target_id,
shsh.host_set_id,
s.auth_token_id,
s.project_id,
s.certificate,
s.certificate_private_key,
s.expiration_time,
s.connection_limit,
s.tofu_token,
s.key_id,
s.termination_reason,
s.version,
s.create_time,
s.update_time,
s.endpoint,
s.worker_filter,
s.egress_worker_filter,
s.ingress_worker_filter,
swp.worker_id,
ss.state,
ss.previous_end_time,
ss.start_time,
ss.end_time
from session s
join session_state ss on s.public_id = ss.session_id
left join session_host_set_host shsh on s.public_id = shsh.session_id
left join session_worker_protocol swp on s.public_id = swp.session_id;
commit;
Loading…
Cancel
Save