Recent testnet restarts took ~21s, of which 15s was load_mmr and 4s load_smt_forest.
load_mmr is likely dominated by reading all block headers from the database. However, we don't actually need the entire header -- only the ordered commitments. We can improve this by storing the header fields as columns. At minimum we should store the commitment in its own field, even if we decide to keep the headers as blobs for performance in other areas.
I would also take a look at what else we are using the headers for; if there is other usage where we only require partial fields then we should consider flattening it completely.
Recent testnet restarts took ~21s, of which 15s was
load_mmrand 4sload_smt_forest.load_mmris likely dominated by reading all block headers from the database. However, we don't actually need the entire header -- only the ordered commitments. We can improve this by storing the header fields as columns. At minimum we should store the commitment in its own field, even if we decide to keep the headers as blobs for performance in other areas.I would also take a look at what else we are using the headers for; if there is other usage where we only require partial fields then we should consider flattening it completely.