128 lines
6.7 KiB
Markdown
128 lines
6.7 KiB
Markdown
# 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
|
|
|
|
```text
|
|
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
|
|
```
|
|
|