pgsql: First phase of plan-invalidation project: create a plan cache - Mailing list pgsql-committers
From | tgl@postgresql.org (Tom Lane) |
---|---|
Subject | pgsql: First phase of plan-invalidation project: create a plan cache |
Date | |
Msg-id | 20070313003344.583779FB301@postgresql.org Whole thread Raw |
List | 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)
pgsql-committers by date: