Skip to content

Optimize usage ping query for product_analytics_events_experimental table

What does this MR do?

Add indexes to product_analytics_events_experimental to optimize the queries we anticipate using in Usage Ping (example: !40024 (merged))

Related to #241271 (closed)

Migration output

== 20200916210800 AddIndexesToProductAnalyticsEvents: migrating ===============
-- add_index(:product_analytics_events_experimental, :se_category)
   -> 0.0977s
-- add_index(:product_analytics_events_experimental, :se_action)
   -> 0.0358s
== 20200916210800 AddIndexesToProductAnalyticsEvents: migrated (0.1336s) ======

Sample Queries

SELECT MIN("product_analytics_events_experimental"."id") FROM "product_analytics_events_experimental" WHERE "product_analytics_events_experimental"."project_id" = 22 AND "product_analytics_events_experimental"."se_category" = 'epics' AND "product_analytics_events_experimental"."se_action" = 'promote'

https://explain.depesz.com/s/LcM6

SELECT MAX("product_analytics_events_experimental"."id") FROM "product_analytics_events_experimental" WHERE "product_analytics_events_experimental"."project_id" = 22 AND "product_analytics_events_experimental"."se_category" = 'epics' AND "product_analytics_events_experimental"."se_action" = 'promote'

https://explain.depesz.com/s/lILP

SELECT COUNT("product_analytics_events_experimental"."id") FROM "product_analytics_events_experimental" WHERE "product_analytics_events_experimental"."project_id" = 22 AND "product_analytics_events_experimental"."se_category" = 'epics' AND "product_analytics_events_experimental"."se_action" = 'promote' AND "product_analytics_events_experimental"."id" BETWEEN 10 AND 100009

https://explain.depesz.com/s/zk52

SELECT MIN("product_analytics_events_experimental"."id") FROM "product_analytics_events_experimental" WHERE "product_analytics_events_experimental"."project_id" = 22 AND "product_analytics_events_experimental"."se_category" = 'epics' AND "product_analytics_events_experimental"."se_action" = 'promote' AND (collector_tstamp BETWEEN '2020-07-25' AND '2020-08-22' )

https://explain.depesz.com/s/YnQp

SELECT MAX("product_analytics_events_experimental"."id") FROM "product_analytics_events_experimental" WHERE "product_analytics_events_experimental"."project_id" = 22 AND "product_analytics_events_experimental"."se_category" = 'epics' AND "product_analytics_events_experimental"."se_action" = 'promote' AND (collector_tstamp BETWEEN '2020-07-25' AND '2020-08-22' )

https://explain.depesz.com/s/bS90

SELECT COUNT("product_analytics_events_experimental"."id") FROM "product_analytics_events_experimental" WHERE "product_analytics_events_experimental"."project_id" = 22 AND "product_analytics_events_experimental"."se_category" = 'epics' AND "product_analytics_events_experimental"."se_action" = 'promote' AND (collector_tstamp BETWEEN '2020-07-25' AND '2020-08-22' ) AND "product_analytics_events_experimental"."id" BETWEEN 10 AND 100009

https://explain.depesz.com/s/Syt6i

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Alishan Ladhani

Merge request reports