Files
git.stella-ops.org/docs/db/reports/proofchain-schema-perf-2025-12-17.md
2025-12-18 00:47:24 +02:00

6.7 KiB

ProofChain schema performance report (2025-12-17)

Environment

  • Postgres image: postgres:16
  • DB: proofchain_perf
  • Port: 54329
  • Host: localhost

Dataset

  • Source: src/Attestor/__Libraries/StellaOps.Attestor.Persistence/Perf/seed.sql
  • Rows:
    • trust_anchors: 50
    • sbom_entries: 20000
    • dsse_envelopes: 60000
    • spines: 20000
    • rekor_entries: 2000

Query Output

Timing is on.
 trust_anchors | sbom_entries | dsse_envelopes | spines | rekor_entries 
---------------+--------------+----------------+--------+---------------
            50 |        20000 |          60000 |  20000 |          2000
(1 row)

Time: 18.788 ms
                                                                                                  QUERY PLAN                                                                                                   
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Index Scan using uq_sbom_entry on sbom_entries  (cost=0.41..8.44 rows=1 width=226) (actual time=0.024..0.024 rows=1 loops=1)
   Index Cond: (((bom_digest)::text = 'd2cb2e2d7955252437da988dd4484f1dfcde81750ce0175d9fb9a85134a8de9a'::text) AND (purl = format('pkg:npm/vendor-%02s/pkg-%05s'::text, 1, 1)) AND (version = '1.0.1'::text))
   Buffers: shared hit=4
 Planning:
   Buffers: shared hit=24
 Planning Time: 0.431 ms
 Execution Time: 0.032 ms
(7 rows)

Time: 1.119 ms
                                                                    QUERY PLAN                                                                     
---------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=173.99..174.13 rows=56 width=80) (actual time=0.331..0.340 rows=100 loops=1)
   Buffers: shared hit=8
   ->  Sort  (cost=173.99..174.13 rows=56 width=80) (actual time=0.330..0.335 rows=100 loops=1)
         Sort Key: purl
         Sort Method: quicksort  Memory: 38kB
         Buffers: shared hit=8
         ->  Bitmap Heap Scan on sbom_entries  (cost=4.72..172.37 rows=56 width=80) (actual time=0.019..0.032 rows=100 loops=1)
               Recheck Cond: ((bom_digest)::text = 'd2cb2e2d7955252437da988dd4484f1dfcde81750ce0175d9fb9a85134a8de9a'::text)
               Heap Blocks: exact=3
               Buffers: shared hit=5
               ->  Bitmap Index Scan on idx_sbom_entries_bom_digest  (cost=0.00..4.71 rows=56 width=0) (actual time=0.015..0.015 rows=100 loops=1)
                     Index Cond: ((bom_digest)::text = 'd2cb2e2d7955252437da988dd4484f1dfcde81750ce0175d9fb9a85134a8de9a'::text)
                     Buffers: shared hit=2
 Planning:
   Buffers: shared hit=12 read=1
 Planning Time: 0.149 ms
 Execution Time: 0.355 ms
(17 rows)

Time: 0.867 ms
                                                                QUERY PLAN                                                                 
-------------------------------------------------------------------------------------------------------------------------------------------
 Index Scan using idx_dsse_entry_predicate on dsse_envelopes  (cost=0.41..8.43 rows=1 width=226) (actual time=0.008..0.009 rows=1 loops=1)
   Index Cond: ((entry_id = '924258f2-921e-9694-13a4-400abfdf00d6'::uuid) AND (predicate_type = 'evidence.stella/v1'::text))
   Buffers: shared hit=4
 Planning:
   Buffers: shared hit=23
 Planning Time: 0.150 ms
 Execution Time: 0.014 ms
(7 rows)

Time: 0.388 ms
                                                         QUERY PLAN                                                         
----------------------------------------------------------------------------------------------------------------------------
 Index Scan using idx_spines_bundle on spines  (cost=0.41..8.43 rows=1 width=194) (actual time=0.016..0.017 rows=1 loops=1)
   Index Cond: ((bundle_id)::text = '2f9ef44d93b4520b2296d5b73bd1cc87156a304c757feb4c78926452db61abf8'::text)
   Buffers: shared hit=4
 Planning Time: 0.096 ms
 Execution Time: 0.025 ms
(5 rows)

Time: 0.318 ms
                                                         QUERY PLAN                                                         
----------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on rekor_entries  (cost=4.34..27.60 rows=8 width=186) (actual time=0.024..0.024 rows=0 loops=1)
   Recheck Cond: (log_index = 10)
   Buffers: shared hit=5
   ->  Bitmap Index Scan on idx_rekor_log_index  (cost=0.00..4.34 rows=8 width=0) (actual time=0.023..0.023 rows=0 loops=1)
         Index Cond: (log_index = 10)
         Buffers: shared hit=5
 Planning:
   Buffers: shared hit=5
 Planning Time: 0.097 ms
 Execution Time: 0.040 ms
(10 rows)

Time: 0.335 ms
                                                                           QUERY PLAN                                                                            
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=637.30..637.30 rows=1 width=226) (actual time=0.649..0.660 rows=100 loops=1)
   Buffers: shared hit=405
   ->  Sort  (cost=637.30..637.30 rows=1 width=226) (actual time=0.648..0.653 rows=100 loops=1)
         Sort Key: e.purl
         Sort Method: quicksort  Memory: 50kB
         Buffers: shared hit=405
         ->  Nested Loop  (cost=5.13..637.29 rows=1 width=226) (actual time=0.074..0.385 rows=100 loops=1)
               Buffers: shared hit=405
               ->  Bitmap Heap Scan on sbom_entries e  (cost=4.72..172.37 rows=56 width=48) (actual time=0.061..0.071 rows=100 loops=1)
                     Recheck Cond: ((bom_digest)::text = 'd2cb2e2d7955252437da988dd4484f1dfcde81750ce0175d9fb9a85134a8de9a'::text)
                     Heap Blocks: exact=3
                     Buffers: shared hit=5
                     ->  Bitmap Index Scan on idx_sbom_entries_bom_digest  (cost=0.00..4.71 rows=56 width=0) (actual time=0.057..0.057 rows=100 loops=1)
                           Index Cond: ((bom_digest)::text = 'd2cb2e2d7955252437da988dd4484f1dfcde81750ce0175d9fb9a85134a8de9a'::text)
                           Buffers: shared hit=2
               ->  Index Scan using idx_dsse_entry_predicate on dsse_envelopes d  (cost=0.41..8.29 rows=1 width=194) (actual time=0.003..0.003 rows=1 loops=100)
                     Index Cond: ((entry_id = e.entry_id) AND (predicate_type = 'evidence.stella/v1'::text))
                     Buffers: shared hit=400
 Planning:
   Buffers: shared hit=114
 Planning Time: 0.469 ms
 Execution Time: 0.691 ms
(22 rows)

Time: 1.643 ms