Reduce lock level for altering fillfactor
authorSimon Riggs <simon@2ndQuadrant.com>
Thu, 10 Mar 2016 12:07:33 +0000 (12:07 +0000)
committerSimon Riggs <simon@2ndQuadrant.com>
Thu, 10 Mar 2016 12:07:33 +0000 (12:07 +0000)
Fabrízio de Royes Mello and Simon Riggs

doc/src/sgml/ref/alter_table.sgml
src/backend/access/common/reloptions.c
src/test/regress/expected/alter_table.out

index aca40f596a2b617be188369f4df93dfa73e6f486..5ca211e5f87301f9c2cef88e0503e480c165e3e9 100644 (file)
@@ -561,7 +561,7 @@ ALTER TABLE ALL IN TABLESPACE <replaceable class="PARAMETER">name</replaceable>
      </para>
 
      <para>
-      Changing autovacuum storage parameters acquires a <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+      Changing fillfactor and autovacuum storage parameters acquires a <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
      </para>
 
      <note>
index 86b9ae1c3ce2bf3887fb5eb48b2025f745b4fa78..ea0755a8785d972a276c13bc6bbbb9fc2d9efca3 100644 (file)
@@ -100,7 +100,7 @@ static relopt_int intRelOpts[] =
                        "fillfactor",
                        "Packs table pages only to this percentage",
                        RELOPT_KIND_HEAP,
-                       AccessExclusiveLock
+                       ShareUpdateExclusiveLock /* since it applies only to later inserts */
                },
                HEAP_DEFAULT_FILLFACTOR, HEAP_MIN_FILLFACTOR, 100
        },
@@ -109,7 +109,7 @@ static relopt_int intRelOpts[] =
                        "fillfactor",
                        "Packs btree index pages only to this percentage",
                        RELOPT_KIND_BTREE,
-                       AccessExclusiveLock
+                       ShareUpdateExclusiveLock /* since it applies only to later inserts */
                },
                BTREE_DEFAULT_FILLFACTOR, BTREE_MIN_FILLFACTOR, 100
        },
@@ -118,7 +118,7 @@ static relopt_int intRelOpts[] =
                        "fillfactor",
                        "Packs hash index pages only to this percentage",
                        RELOPT_KIND_HASH,
-                       AccessExclusiveLock
+                       ShareUpdateExclusiveLock /* since it applies only to later inserts */
                },
                HASH_DEFAULT_FILLFACTOR, HASH_MIN_FILLFACTOR, 100
        },
@@ -127,7 +127,7 @@ static relopt_int intRelOpts[] =
                        "fillfactor",
                        "Packs gist index pages only to this percentage",
                        RELOPT_KIND_GIST,
-                       AccessExclusiveLock
+                       ShareUpdateExclusiveLock /* since it applies only to later inserts */
                },
                GIST_DEFAULT_FILLFACTOR, GIST_MIN_FILLFACTOR, 100
        },
@@ -136,7 +136,7 @@ static relopt_int intRelOpts[] =
                        "fillfactor",
                        "Packs spgist index pages only to this percentage",
                        RELOPT_KIND_SPGIST,
-                       AccessExclusiveLock
+                       ShareUpdateExclusiveLock /* since it applies only to later inserts */
                },
                SPGIST_DEFAULT_FILLFACTOR, SPGIST_MIN_FILLFACTOR, 100
        },
index 7c88ddc9fed8ad604ac98fd4768907aea053cd95..3232cda02366e2e46fc8ada0ff4cd2ec68f4a2cb 100644 (file)
@@ -2065,19 +2065,19 @@ select * from my_locks order by 1;
 commit;
 begin; alter table alterlock set (fillfactor = 100);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
 begin; alter table alterlock reset (fillfactor);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
@@ -2110,10 +2110,10 @@ rollback;
 -- test that mixing options with different lock levels works as expected
 begin; alter table alterlock set (autovacuum_enabled = off, fillfactor = 80);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;