Thread: Out of date comment in cached_plan_cost
Hi, I just noticed a comment which has been made a little outdated by the partition-wise join code from commit f49842d1. The comment claims that inheritance children don't add to the effort required in join planning, while that still may be true, we should probably mention that partitioned tables may be a more complex case. The attached is my attempt at putting this right. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Attachment
On Thu, Dec 7, 2017 at 3:14 AM, David Rowley <david.rowley@2ndquadrant.com> wrote: > I just noticed a comment which has been made a little outdated by the > partition-wise join code from commit f49842d1. The comment claims that > inheritance children don't add to the effort required in join > planning, while that still may be true, we should probably mention > that partitioned tables may be a more complex case. > > The attached is my attempt at putting this right. I don't feel entirely right about the way this seems to treat inheritance and partitioning as two entirely separate features; that's true from a user perspective, more or less, but not internally to the code. Of course, this also begs the question of whether we ought to be changing the formula somehow. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
On 9 December 2017 at 06:05, Robert Haas <robertmhaas@gmail.com> wrote: > On Thu, Dec 7, 2017 at 3:14 AM, David Rowley > <david.rowley@2ndquadrant.com> wrote: >> The attached is my attempt at putting this right. > > I don't feel entirely right about the way this seems to treat > inheritance and partitioning as two entirely separate features; that's > true from a user perspective, more or less, but not internally to the > code. Originally I had it typed out in a way that mentioned something about "unless using partition-wise join with partitioned tables", but I felt that the partition planning code is in such a state of flux at the moment that I feared that comment might get outdated again someday in the near future. I've attached another patch which just loosens the claim that join planning situation is never made worse by inheritance children to now say it does not "generally" make any worse. > Of course, this also begs the question of whether we ought to be > changing the formula somehow. Perhaps, but not for this patch. The comment already mentions that the code is far from perfect. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Attachment
On Mon, Dec 11, 2017 at 3:02 AM, David Rowley <david.rowley@2ndquadrant.com> wrote: > On 9 December 2017 at 06:05, Robert Haas <robertmhaas@gmail.com> wrote: >> On Thu, Dec 7, 2017 at 3:14 AM, David Rowley >> <david.rowley@2ndquadrant.com> wrote: >>> The attached is my attempt at putting this right. >> >> I don't feel entirely right about the way this seems to treat >> inheritance and partitioning as two entirely separate features; that's >> true from a user perspective, more or less, but not internally to the >> code. > > Originally I had it typed out in a way that mentioned something about > "unless using partition-wise join with partitioned tables", but I felt > that the partition planning code is in such a state of flux at the > moment that I feared that comment might get outdated again someday in > the near future. > > I've attached another patch which just loosens the claim that join > planning situation is never made worse by inheritance children to now > say it does not "generally" make any worse. > >> Of course, this also begs the question of whether we ought to be >> changing the formula somehow. > > Perhaps, but not for this patch. The comment already mentions that the > code is far from perfect. I don't see much difference in the old and new wording. The word "generally" confuses more than clarifying the cases when the planning cost curves do not change with the number of relations i.e. partitions. I think if we add following sentence after "situation worse." "However in case of declarative partitioning, we may plan each child separately e.g partition-wise join aims at planning join between matching partitions. In that case, plan cost curve significantly changes with the number of partition relations.". After writing this I think I understand what you meant by > Originally I had it typed out in a way that mentioned something about > "unless using partition-wise join with partitioned tables", but I felt > that the partition planning code is in such a state of flux at the > moment that I feared that comment might get outdated again someday in > the near future. -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company
On 11 December 2017 at 21:39, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> wrote: > I don't see much difference in the old and new wording. The word > "generally" confuses more than clarifying the cases when the planning > cost curves do not change with the number of relations i.e. > partitions. I added that to remove the false claim that inheritance children don't make the join problem more complex. This was only true before we had partition-wise joins. I've re-read my original patch and I don't really see the problem with it. The comment is talking about inheritance child relations, which you could either interpret to mean INHERITS (sometable), or some table listed in pg_inherits. The statement that I added forces me into thinking of the former rather than the latter, so I don't really see any issue. I'm going to leave it here. I don't want to spend too much effort rewording a comment. My vote is for the original patch I sent. I only changed it because Robert complained that technically an inheritance child could actually be a partition. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
On Mon, Dec 11, 2017 at 5:00 AM, David Rowley <david.rowley@2ndquadrant.com> wrote: > On 11 December 2017 at 21:39, Ashutosh Bapat > <ashutosh.bapat@enterprisedb.com> wrote: >> I don't see much difference in the old and new wording. The word >> "generally" confuses more than clarifying the cases when the planning >> cost curves do not change with the number of relations i.e. >> partitions. > > I added that to remove the false claim that inheritance children don't > make the join problem more complex. This was only true before we had > partition-wise joins. > > I've re-read my original patch and I don't really see the problem with > it. The comment is talking about inheritance child relations, which > you could either interpret to mean INHERITS (sometable), or some table > listed in pg_inherits. The statement that I added forces me into > thinking of the former rather than the latter, so I don't really see > any issue. > > I'm going to leave it here. I don't want to spend too much effort > rewording a comment. My vote is for the original patch I sent. I only > changed it because Robert complained that technically an inheritance > child could actually be a partition. I basically feel like we're not really solving any problem by changing this. I mean, partition-wise join makes this statement less true, but adding the word "generally" doesn't really help anybody understand the situation better. If we're going to add anything here, I think it should be something like: (This might need to be rethought in light of partition-wise join.) If that's more specific than we want to get, then let's just leave it alone. Partition-wise join isn't even enabled by default at this point. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company