Обсуждение: cost_index()
Hi! Some fragment of code (src/backend/optimizer/path/costsize.c, lineno ~400): /* * Normal case: apply the Mackertand Lohman formula, and then * interpolate between that and the correlation-derived result. */ pages_fetched = index_pages_fetched(tuples_fetched, baserel->pages, (double) index->pages, root); if (indexonly) pages_fetched = ceil(pages_fetched * (1.0 - baserel->allvisfrac)); As I understand the code, index_pages_fetched() returns summary of page's read for index and heap together. But on next line this recalculates with "all visible fraction" of heap. After recent vacuum it could be 1.0 and then pages_fetches will be zero. It seems to me obviously wrong, because it's for index only scan it could be true only for heap, not for index pages. Am I wrong or miss something? -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/
Teodor Sigaev <teodor@sigaev.ru> writes: > if (indexonly) > pages_fetched = ceil(pages_fetched * (1.0 - baserel->allvisfrac)); > As I understand the code, index_pages_fetched() returns summary of page's read > for index and heap together. No. Costs for touching the index were computed by the amcostestimate function; this code is solely about estimating costs for touching the heap. > But on next line this recalculates with "all > visible fraction" of heap. After recent vacuum it could be 1.0 and then > pages_fetches will be zero. It seems to me obviously wrong, because it's for > index only scan it could be true only for heap, not for index pages. Seems correct to me: if it's an index-only scan, and all pages are all-visible, then indeed no heap pages will be fetched. (Note that the cost model doesn't charge anything for touching the visibility map. This might be too simplistic, but certainly that cost should be much smaller than touching the heap, since the map is small enough that it should stay resident in shared buffers.) regards, tom lane
> No. Costs for touching the index were computed by the amcostestimate > function; this code is solely about estimating costs for touching the > heap. I see. Thank you. -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/