Hi, On 2018-06-15 10:45:04 -0700, Andres Freund wrote: > > + > > + srels = palloc(sizeof(SMgrRelation) * ndelrels); > > for (i = 0; i < ndelrels; i++) > > - { > > - SMgrRelation srel = smgropen(delrels[i], InvalidBackendId); > > + srels[i] = smgropen(delrels[i], InvalidBackendId); > > > > - smgrdounlink(srel, false); > > - smgrclose(srel); > > - } > > + smgrdounlinkall(srels, ndelrels, false); > > + > > + for (i = 0; i < ndelrels; i++) > > + smgrclose(srels[i]); > > + pfree(srels);
Hm. This will probably cause another complexity issue. If we just smgropen() the relation will be unowned. Which means smgrclose() will call remove_from_unowned_list(), which is O(open-relations). Which means this change afaict creates a new O(ndrels^2) behaviour? It seems like the easiest fix for that would be to have a local SMgrRelationData in that loop, that we assign the relations to? That's a bit hacky, but afaict should work? Greetings, Andres Freund