postgres.git / summary / log / commit / refs
commit 68ea2b7f9b52d35b5fcd9c8d44d88de5a64be3ba
Author: Simon Riggs <simon@2ndQuadrant.com>
Date: Wed Apr 05 22:22:32 2017 +0000
Reduce lock level for CREATE STATISTICS
In line with other lock reductions related to planning.
Simon Riggs
doc/src/sgml/mvcc.sgml | 3 ++-
src/backend/commands/statscmds.c | 8 +++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml
index 82e69fe2d27..7aa32932fab 100644
--- a/doc/src/sgml/mvcc.sgml
+++ b/doc/src/sgml/mvcc.sgml
@@ -923,7 +923,8 @@ ERROR: could not serialize access due to read/write dependencies among transact
<para>
Acquired by <command>VACUUM</command> (without <option>FULL</option>),
- <command>ANALYZE</>, <command>CREATE INDEX CONCURRENTLY</>, and
+ <command>ANALYZE</>, <command>CREATE INDEX CONCURRENTLY</>,
+ <command>CREATE STATISTICS</> and
<command>ALTER TABLE VALIDATE</command> and other
<command>ALTER TABLE</command> variants (for full details see
<xref linkend="SQL-ALTERTABLE">).
diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index 8d483dbb3a7..46abadcc811 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -96,7 +96,13 @@ CreateStatistics(CreateStatsStmt *stmt)
errmsg("statistics \"%s\" already exist", namestr)));
}
- rel = heap_openrv(stmt->relation, AccessExclusiveLock);
+ /*
+ * CREATE STATISTICS will influence future execution plans but does
+ * not interfere with currently executing plans so it is safe to
+ * take only ShareUpdateExclusiveLock on relation, conflicting with
+ * ANALYZE and other DDL that sets statistical information.
+ */
+ rel = heap_openrv(stmt->relation, ShareUpdateExclusiveLock);
relid = RelationGetRelid(rel);
if (rel->rd_rel->relkind != RELKIND_RELATION &&
[parent: 2686ee1b7ccf]