pgsql: First phase of plan-invalidation project: create a plan cache

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: First phase of plan-invalidation project: create a plan cache
Date: 2007-03-13 00:33:44
Message-ID: 20070313003344.583779FB301@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
First phase of plan-invalidation project: create a plan cache management
module and teach PREPARE and protocol-level prepared statements to use it.
In service of this, rearrange utility-statement processing so that parse
analysis does not assume table schemas can't change before execution for
utility statements (necessary because we don't attempt to re-acquire locks
for utility statements when reusing a stored plan). This requires some
refactoring of the ProcessUtility API, but it ends up cleaner anyway,
for instance we can get rid of the QueryContext global.

Still to do: fix up SPI and related code to use the plan cache; I'm tempted to
try to make SQL functions use it too. Also, there are at least some aspects
of system state that we want to ensure remain the same during a replan as in
the original processing; search_path certainly ought to behave that way for
instance, and perhaps there are others.

Modified Files:
--------------
pgsql/src/backend/access/transam:
xact.c (r1.235 -> r1.236)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xact.c.diff?r1=1.235&r2=1.236)
pgsql/src/backend/bootstrap:
bootparse.y (r1.87 -> r1.88)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/bootstrap/bootparse.y.diff?r1=1.87&r2=1.88)
pgsql/src/backend/commands:
cluster.c (r1.156 -> r1.157)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/cluster.c.diff?r1=1.156&r2=1.157)
copy.c (r1.277 -> r1.278)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/copy.c.diff?r1=1.277&r2=1.278)
dbcommands.c (r1.192 -> r1.193)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/dbcommands.c.diff?r1=1.192&r2=1.193)
explain.c (r1.159 -> r1.160)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/explain.c.diff?r1=1.159&r2=1.160)
indexcmds.c (r1.156 -> r1.157)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/indexcmds.c.diff?r1=1.156&r2=1.157)
portalcmds.c (r1.61 -> r1.62)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/portalcmds.c.diff?r1=1.61&r2=1.62)
prepare.c (r1.69 -> r1.70)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/prepare.c.diff?r1=1.69&r2=1.70)
schemacmds.c (r1.43 -> r1.44)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/schemacmds.c.diff?r1=1.43&r2=1.44)
tablecmds.c (r1.216 -> r1.217)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablecmds.c.diff?r1=1.216&r2=1.217)
tablespace.c (r1.43 -> r1.44)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablespace.c.diff?r1=1.43&r2=1.44)
vacuum.c (r1.347 -> r1.348)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuum.c.diff?r1=1.347&r2=1.348)
view.c (r1.99 -> r1.100)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/view.c.diff?r1=1.99&r2=1.100)
pgsql/src/backend/executor:
functions.c (r1.111 -> r1.112)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/functions.c.diff?r1=1.111&r2=1.112)
spi.c (r1.170 -> r1.171)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/spi.c.diff?r1=1.170&r2=1.171)
pgsql/src/backend/nodes:
copyfuncs.c (r1.369 -> r1.370)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/copyfuncs.c.diff?r1=1.369&r2=1.370)
equalfuncs.c (r1.300 -> r1.301)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/equalfuncs.c.diff?r1=1.300&r2=1.301)
outfuncs.c (r1.302 -> r1.303)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/outfuncs.c.diff?r1=1.302&r2=1.303)
params.c (r1.8 -> r1.9)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/params.c.diff?r1=1.8&r2=1.9)
pgsql/src/backend/optimizer/util:
clauses.c (r1.237 -> r1.238)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/clauses.c.diff?r1=1.237&r2=1.238)
pgsql/src/backend/parser:
analyze.c (r1.361 -> r1.362)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/analyze.c.diff?r1=1.361&r2=1.362)
gram.y (r2.580 -> r2.581)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/gram.y.diff?r1=2.580&r2=2.581)
pgsql/src/backend/postmaster:
autovacuum.c (r1.33 -> r1.34)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/postmaster/autovacuum.c.diff?r1=1.33&r2=1.34)
pgsql/src/backend/rewrite:
rewriteDefine.c (r1.117 -> r1.118)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/rewrite/rewriteDefine.c.diff?r1=1.117&r2=1.118)
pgsql/src/backend/tcop:
postgres.c (r1.527 -> r1.528)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/postgres.c.diff?r1=1.527&r2=1.528)
pquery.c (r1.114 -> r1.115)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/pquery.c.diff?r1=1.114&r2=1.115)
utility.c (r1.273 -> r1.274)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/utility.c.diff?r1=1.273&r2=1.274)
pgsql/src/backend/utils/cache:
Makefile (r1.20 -> r1.21)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/Makefile.diff?r1=1.20&r2=1.21)
pgsql/src/backend/utils/init:
postinit.c (r1.174 -> r1.175)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/init/postinit.c.diff?r1=1.174&r2=1.175)
pgsql/src/backend/utils/mmgr:
README (r1.9 -> r1.10)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mmgr/README.diff?r1=1.9&r2=1.10)
mcxt.c (r1.59 -> r1.60)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mmgr/mcxt.c.diff?r1=1.59&r2=1.60)
portalmem.c (r1.99 -> r1.100)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mmgr/portalmem.c.diff?r1=1.99&r2=1.100)
pgsql/src/backend/utils/resowner:
README (r1.4 -> r1.5)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/resowner/README.diff?r1=1.4&r2=1.5)
resowner.c (r1.23 -> r1.24)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/resowner/resowner.c.diff?r1=1.23&r2=1.24)
pgsql/src/include/access:
xact.h (r1.84 -> r1.85)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xact.h.diff?r1=1.84&r2=1.85)
pgsql/src/include/commands:
cluster.h (r1.31 -> r1.32)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/cluster.h.diff?r1=1.31&r2=1.32)
copy.h (r1.29 -> r1.30)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/copy.h.diff?r1=1.29&r2=1.30)
defrem.h (r1.80 -> r1.81)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/defrem.h.diff?r1=1.80&r2=1.81)
explain.h (r1.29 -> r1.30)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/explain.h.diff?r1=1.29&r2=1.30)
portalcmds.h (r1.21 -> r1.22)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/portalcmds.h.diff?r1=1.21&r2=1.22)
prepare.h (r1.24 -> r1.25)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/prepare.h.diff?r1=1.24&r2=1.25)
schemacmds.h (r1.15 -> r1.16)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/schemacmds.h.diff?r1=1.15&r2=1.16)
vacuum.h (r1.69 -> r1.70)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/vacuum.h.diff?r1=1.69&r2=1.70)
view.h (r1.24 -> r1.25)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/view.h.diff?r1=1.24&r2=1.25)
pgsql/src/include/nodes:
params.h (r1.34 -> r1.35)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/params.h.diff?r1=1.34&r2=1.35)
parsenodes.h (r1.341 -> r1.342)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/parsenodes.h.diff?r1=1.341&r2=1.342)
pgsql/src/include/parser:
analyze.h (r1.35 -> r1.36)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/parser/analyze.h.diff?r1=1.35&r2=1.36)
pgsql/src/include/rewrite:
rewriteDefine.h (r1.23 -> r1.24)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/rewrite/rewriteDefine.h.diff?r1=1.23&r2=1.24)
pgsql/src/include/tcop:
pquery.h (r1.41 -> r1.42)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/tcop/pquery.h.diff?r1=1.41&r2=1.42)
utility.h (r1.31 -> r1.32)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/tcop/utility.h.diff?r1=1.31&r2=1.32)
pgsql/src/include/utils:
memutils.h (r1.61 -> r1.62)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/memutils.h.diff?r1=1.61&r2=1.62)
portal.h (r1.73 -> r1.74)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/portal.h.diff?r1=1.73&r2=1.74)
resowner.h (r1.10 -> r1.11)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/resowner.h.diff?r1=1.10&r2=1.11)
pgsql/src/test/regress/expected:
rules.out (r1.124 -> r1.125)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/rules.out.diff?r1=1.124&r2=1.125)
pgsql/src/test/regress:
parallel_schedule (r1.39 -> r1.40)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/parallel_schedule.diff?r1=1.39&r2=1.40)
serial_schedule (r1.37 -> r1.38)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/serial_schedule.diff?r1=1.37&r2=1.38)

Added Files:
-----------
pgsql/src/backend/utils/cache:
plancache.c (r1.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/plancache.c?rev=1.1&content-type=text/x-cvsweb-markup)
pgsql/src/include/utils:
plancache.h (r1.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/plancache.h?rev=1.1&content-type=text/x-cvsweb-markup)
pgsql/src/test/regress/expected:
plancache.out (r1.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/plancache.out?rev=1.1&content-type=text/x-cvsweb-markup)
pgsql/src/test/regress/sql:
plancache.sql (r1.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/plancache.sql?rev=1.1&content-type=text/x-cvsweb-markup)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2007-03-13 00:38:11 Re: [COMMITTERS] pgsql: Make configuration parameters fall back to their default values
Previous Message Peter Eisentraut 2007-03-12 22:09:28 pgsql: Make configuration parameters fall back to their default values