On 2020-11-18 11:35, Fujii Masao wrote:
Thanks for your comment!
On 2020/11/18 11:04, torikoshia wrote:
Hi,
AFAIU, when the planner statistics are updated, generic plans are
invalidated and PostgreSQL recreates. However, the manual doesn't seem
to explain it explicitly.
https://www.postgresql.org/docs/devel/sql-prepare.html
I guess this case is included in 'whenever database objects used in
the statement have definitional (DDL) changes undergone', but I feel
it's hard to infer.
Since updates of the statistics can often happen, how about describing
this case explicitly like an attached patch?
+1 to add that note.
- statement. Also, if the value of <xref linkend="guc-search-path"/>
changes
+ statement. For example, when the planner statistics of the
statement
+ are updated, <productname>PostgreSQL</productname> re-analyzes and
+ re-plans the statement.
I don't think "For example," is necessary.
"planner statistics of the statement" sounds vague? Does the statement
is re-analyzed and re-planned only when the planner statistics of
database
objects used in the statement are updated? If yes, we should describe
that to make the note a bit more explicitly?
Yes. As far as I confirmed, updating statistics which are not used in
prepared statements doesn't trigger re-analyze and re-plan.
Since plan invalidations for DDL changes and statistcal changes are
caused
by PlanCacheRelCallback(Oid 'relid'), only the prepared statements using
'relid' relation seem invalidated.
Attached updated patch.
Regards,
-
Atsushi Torikoshi
From f8c051e57e1ca15e2b91d3e69fe0531c0b7bf7ca Mon Sep 17 00:00:00 2001
From: Atsushi Torikoshi <torikos...@oss.nttdata.com>
Date: Thu, 19 Nov 2020 13:23:18 +0900
Subject: [PATCH v2] When the planner statistics are updated, generic plans are
invalidated and PostgreSQL recreates. However, the manual didn't explain it
explicitly. This patch adds an explanation for this case.
---
doc/src/sgml/ref/prepare.sgml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/doc/src/sgml/ref/prepare.sgml b/doc/src/sgml/ref/prepare.sgml
index 57a34ff83c..5a6dd481bc 100644
--- a/doc/src/sgml/ref/prepare.sgml
+++ b/doc/src/sgml/ref/prepare.sgml
@@ -185,7 +185,9 @@ EXPLAIN EXECUTE <replaceable>name</replaceable>(<replaceable>parameter_values</r
force re-analysis and re-planning of the statement before using it
whenever database objects used in the statement have undergone
definitional (DDL) changes since the previous use of the prepared
- statement. Also, if the value of <xref linkend="guc-search-path"/> changes
+ statement. Similarly, whenever the planner statistics of database
+ objects used in the statement have updated, re-analysis and re-planning
+ happen. Also, if the value of <xref linkend="guc-search-path"/> changes
from one use to the next, the statement will be re-parsed using the new
<varname>search_path</varname>. (This latter behavior is new as of
<productname>PostgreSQL</productname> 9.3.) These rules make use of a
--
2.18.1