Improve scalability of md.c for large relations.
Andres Freund <andres@anarazel.de>
Improve scalability of md.c for large relations. So far md.c used a linked list of segments. That proved to be a problem when processing large relations, because every smgr.c/md.c level access to a page incurred walking through a linked list of all preceding segments. Thus making accessing pages O(#segments). Replace the linked list of segments hanging off SMgrRelationData with an array of opened segments. That allows O(1) access to individual segments, if they've previously been opened. Discussion: <20140331101001.GE13135@alap3.anarazel.de> Reviewed-By: Peter Geoghegan, Tom Lane (in an older version)
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/storage/smgr/md.c | modified | +221 −172 |
| src/backend/storage/smgr/smgr.c | modified | +2 −2 |
| src/include/storage/smgr.h | modified | +6 −2 |