Backfill has_issues for vulnerability_reads with external issue tracker
requested to merge 442573-backfill-has_issues-for-vulnerability_reads-rows-that-have-an-external-issue-tracker into master
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