Tom Lane wrote: > Another thing I noticed while looking at Gavin Hamill's test case is > that according to gprof, it's spending a remarkably large fraction of > its time in lookupParam(): > > Each sample counts as 0.01 seconds. > % cumulative self self total > time seconds seconds calls s/call s/call name > 13.87 20.28 20.28 3219733 0.00 0.00 lookupParam > 11.20 36.65 16.37 6128411 0.00 0.00 LWLockAcquire > 8.86 49.60 12.95 6128574 0.00 0.00 LWLockRelease > 5.73 57.97 8.37 12654786 0.00 0.00 _bt_compare > 5.60 66.15 8.18 2746677 0.00 0.00 PinBuffer > 5.53 74.24 8.09 669262 0.00 0.00 s_lock > 5.17 81.80 7.56 1380848 0.00 0.00 slot_deform_tuple > 3.72 87.24 5.44 2750944 0.00 0.00 UnpinBuffer > 3.27 92.02 4.78 2772808 0.00 0.00 hash_search > 2.23 95.28 3.26 16960980 0.00 0.00 FunctionCall2 > > I don't recall ever seeing this function high in a profile before, but > in a complex function it's not so implausible as all that. lookupParam > works by linear search, which means that accessing N different > parameters will take O(N^2) time. > > AFAICS the only reason for a linear search is that the params.c code > still has vestigial support for named rather than numbered Params. > That's been dead code since the system left Berkeley, and I don't know > of anything on the horizon that would make us want to revive it. > (In places where we'd support named params, it'd make more sense to > reduce the names to numbers before runtime anyway.) > > So I'm thinking about simplifying the ParamListInfo data structure > down to a straight array indexed directly by parameter number. > Anyone have a problem with that?
No problem, sounds smart. -- Bruce Momjian http://candle.pha.pa.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + ---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq