Обсуждение: setting for maximum acceptable plan cost?
I was thinking that it might be nice to be able to tell postgres to refuse to execute any plan with an estimated cost above some threshold. For example, earlier today I produced this extremely bogus execution plan with the following top line: Nested Loop Left Join (cost=13920.16..2257575559347.46 rows=3691992705807 width=128) After a call to ANALYZE, the same query gave me: Merge Left Join (cost=16382.02..16853.87 rows=126768 width=59) And runs in 5 seconds. If I had been able to tell pg to reject any plan with cost over, say 10E9, that would have saved my server from half an hour of nested sequential scans. Should I just use statement_timeout as a proxy for this? -jwb
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Fri, 02 Nov 2007 13:49:27 -0700
"Jeffrey W. Baker" <jwbaker@acm.org> wrote:
> Nested Loop Left Join (cost=13920.16..2257575559347.46
> rows=3691992705807 width=128)
>
> After a call to ANALYZE, the same query gave me:
>
> Merge Left Join (cost=16382.02..16853.87 rows=126768 width=59)
>
> And runs in 5 seconds. If I had been able to tell pg to reject any
> plan with cost over, say 10E9, that would have saved my server from
> half an hour of nested sequential scans.
I am confused as to why you would want to do that... seems like a
band aid for lack of maintenance.
>
> Should I just use statement_timeout as a proxy for this?
>
That would yes but see my point about maintenance above.
Joshua D. Drake
- --
=== The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 24x7/Emergency: +1.800.492.2240
PostgreSQL solutions since 1997 http://www.commandprompt.com/
UNIQUE NOT NULL
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
PostgreSQL Replication: http://www.commandprompt.com/products/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFHK5peATb/zqfZUUQRAttyAJ9pHjQUuyY7e2cJXtkB2239vOqAxACfX2XW
AHVlhc4g/mzc7uesWpAGls0=
=i6n+
-----END PGP SIGNATURE-----
"Jeffrey W. Baker" <jwbaker@acm.org> writes:
> I was thinking that it might be nice to be able to tell postgres to
> refuse to execute any plan with an estimated cost above some threshold.
What you suggest has been suggested before, and I might think it was
a good idea if I trusted the planner's cost estimates more ;-)
There's always statement_timeout.
regards, tom lane
On Fri, 2007-11-02 at 14:45 -0700, Joshua D. Drake wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On Fri, 02 Nov 2007 13:49:27 -0700 > "Jeffrey W. Baker" <jwbaker@acm.org> wrote: > > > Nested Loop Left Join (cost=13920.16..2257575559347.46 > > rows=3691992705807 width=128) > > > > After a call to ANALYZE, the same query gave me: > > > > Merge Left Join (cost=16382.02..16853.87 rows=126768 width=59) > > > > And runs in 5 seconds. If I had been able to tell pg to reject any > > plan with cost over, say 10E9, that would have saved my server from > > half an hour of nested sequential scans. > > I am confused as to why you would want to do that... seems like a > band aid for lack of maintenance. Well it's not "maintenance" really since all the inputs are temp tables, but I do see your point. Often I have wished for a language which is not SQL which would allow me to simply specify the whole execution plan. That would cut out a lot of ambiguity. Pie in the sky, I know. -jwb