Skip to content

Backfill has_issues for vulnerability_reads with external issue tracker

What does this MR do and why?

This MR schedules backfilling of has_issues column in vulnerability_reads table for records where it's currently false and there exists a row in vulnerabilities_external_issue_links for the same vulnerability_id

Related to #442573 (closed)

Database review

Update query:

SQL
UPDATE
  vulnerability_reads
SET
  has_issues = true
FROM
  (SELECT "vulnerability_reads".* FROM "vulnerability_reads" INNER JOIN vulnerability_external_issue_links ON
          vulnerability_reads.vulnerability_id =
          vulnerability_external_issue_links.vulnerability_id WHERE "vulnerability_reads"."vulnerability_id" BETWEEN 107198712 AND 107198768 AND "vulnerability_reads"."vulnerability_id" < 107198768) as sub_query
WHERE
  vulnerability_reads.vulnerability_id = sub_query.vulnerability_id

Query plan: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/26865/commands/83677

Query plan and timings
 ModifyTable on public.vulnerability_reads  (cost=9.19..60.66 rows=0 width=0) (actual time=125.588..125.591 rows=0 loops=1)
   Buffers: shared hit=47 read=49 dirtied=17
   I/O Timings: read=121.905 write=0.000
   ->  Nested Loop  (cost=9.19..60.66 rows=1 width=19) (actual time=9.556..121.731 rows=1 loops=1)
         Buffers: shared hit=27 read=44 dirtied=16
         I/O Timings: read=119.827 write=0.000
         ->  Merge Join  (cost=8.62..57.08 rows=1 width=28) (actual time=9.521..121.693 rows=1 loops=1)
               Merge Cond: (vulnerability_reads_1.vulnerability_id = vulnerability_external_issue_links.vulnerability_id)
               Buffers: shared hit=22 read=44 dirtied=16
               I/O Timings: read=119.827 write=0.000
               ->  Index Scan using index_vulnerability_reads_on_vulnerability_id on public.vulnerability_reads vulnerability_reads_1  (cost=0.57..64.89 rows=57 width=14) (actual time=9.485..121.598 rows=56 loops=1)
                     Index Cond: ((vulnerability_reads_1.vulnerability_id >= 107198712) AND (vulnerability_reads_1.vulnerability_id <= 107198768) AND (vulnerability_reads_1.vulnerability_id < 107198768))
                     Buffers: shared hit=20 read=44 dirtied=16
                     I/O Timings: read=119.827 write=0.000
               ->  Index Scan using idx_vulnerability_ext_issue_links_on_vulne_id_and_ext_issue on public.vulnerability_external_issue_links  (cost=0.14..5.46 rows=55 width=14) (actual time=0.016..0.030 rows=48 loops=1)
                     Buffers: shared hit=2
                     I/O Timings: read=0.000 write=0.000
         ->  Index Scan using index_vulnerability_reads_on_vulnerability_id on public.vulnerability_reads  (cost=0.57..3.58 rows=1 width=14) (actual time=0.031..0.031 rows=1 loops=1)
               Index Cond: (vulnerability_reads.vulnerability_id = vulnerability_reads_1.vulnerability_id)
               Buffers: shared hit=5
               I/O Timings: read=0.000 write=0.000
Time: 134.263 ms
  - planning: 8.466 ms
  - execution: 125.797 ms
    - I/O read: 121.905 ms
    - I/O write: 0.000 ms

Shared buffers:
  - hits: 47 (~376.00 KiB) from the buffer pool
  - reads: 49 (~392.00 KiB) from the OS file cache, including disk I/O
  - dirtied: 17 (~136.00 KiB)
  - writes: 0

MR acceptance checklist

Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Michał Zając

Merge request reports