mirror of https://github.com/postgres/postgres
When specified, this option allows VACUUM to skip the work on a relation if there is a conflicting lock on it when trying to open it at the beginning of its processing. Similarly to autovacuum, this comes with a couple of limitations while the relation is processed which can cause the process to still block: - when opening the relation indexes. - when acquiring row samples for table inheritance trees, partition trees or certain types of foreign tables, and that a lock is taken on some leaves of such trees. Author: Nathan Bossart Reviewed-by: Michael Paquier, Andres Freund, Masahiko Sawada Discussion: https://postgr.es/m/9EF7EBE4-720D-4CF1-9D0E-4403D7E92990@amazon.com Discussion: https://postgr.es/m/20171201160907.27110.74730@wrigleys.postgresql.orgpull/34/head
parent
d173652797
commit
803b1301e8
@ -0,0 +1,171 @@ |
|||||||
|
Parsed test spec with 2 sessions |
||||||
|
|
||||||
|
starting permutation: lock_share vac_specified commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
WARNING: skipping vacuum of "part1" --- lock not available |
||||||
|
step vac_specified: VACUUM (SKIP_LOCKED) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share vac_all_parts commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
step vac_all_parts: VACUUM (SKIP_LOCKED) parted; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share analyze_specified commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
WARNING: skipping analyze of "part1" --- lock not available |
||||||
|
step analyze_specified: ANALYZE (SKIP_LOCKED) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share analyze_all_parts commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
step analyze_all_parts: ANALYZE (SKIP_LOCKED) parted; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share vac_analyze_specified commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
WARNING: skipping vacuum of "part1" --- lock not available |
||||||
|
step vac_analyze_specified: VACUUM (ANALYZE, SKIP_LOCKED) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share vac_analyze_all_parts commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
step vac_analyze_all_parts: VACUUM (ANALYZE, SKIP_LOCKED) parted; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share vac_full_specified commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
WARNING: skipping vacuum of "part1" --- lock not available |
||||||
|
step vac_full_specified: VACUUM (SKIP_LOCKED, FULL) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_share vac_full_all_parts commit |
||||||
|
step lock_share: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
|
||||||
|
step vac_full_all_parts: VACUUM (SKIP_LOCKED, FULL) parted; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive vac_specified commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
WARNING: skipping vacuum of "part1" --- lock not available |
||||||
|
step vac_specified: VACUUM (SKIP_LOCKED) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive vac_all_parts commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
step vac_all_parts: VACUUM (SKIP_LOCKED) parted; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive analyze_specified commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
WARNING: skipping analyze of "part1" --- lock not available |
||||||
|
step analyze_specified: ANALYZE (SKIP_LOCKED) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive analyze_all_parts commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
step analyze_all_parts: ANALYZE (SKIP_LOCKED) parted; <waiting ...> |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
step analyze_all_parts: <... completed> |
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive vac_analyze_specified commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
WARNING: skipping vacuum of "part1" --- lock not available |
||||||
|
step vac_analyze_specified: VACUUM (ANALYZE, SKIP_LOCKED) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive vac_analyze_all_parts commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
step vac_analyze_all_parts: VACUUM (ANALYZE, SKIP_LOCKED) parted; <waiting ...> |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
step vac_analyze_all_parts: <... completed> |
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive vac_full_specified commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
WARNING: skipping vacuum of "part1" --- lock not available |
||||||
|
step vac_full_specified: VACUUM (SKIP_LOCKED, FULL) part1, part2; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
|
|
||||||
|
starting permutation: lock_access_exclusive vac_full_all_parts commit |
||||||
|
step lock_access_exclusive: |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
|
||||||
|
step vac_full_all_parts: VACUUM (SKIP_LOCKED, FULL) parted; |
||||||
|
step commit: |
||||||
|
COMMIT; |
||||||
|
|
||||||
@ -0,0 +1,59 @@ |
|||||||
|
# Test for SKIP_LOCKED option of VACUUM and ANALYZE commands. |
||||||
|
# |
||||||
|
# This also verifies that log messages are not emitted for skipped relations |
||||||
|
# that were not specified in the VACUUM or ANALYZE command. |
||||||
|
|
||||||
|
setup |
||||||
|
{ |
||||||
|
CREATE TABLE parted (a INT) PARTITION BY LIST (a); |
||||||
|
CREATE TABLE part1 PARTITION OF parted FOR VALUES IN (1); |
||||||
|
CREATE TABLE part2 PARTITION OF parted FOR VALUES IN (2); |
||||||
|
} |
||||||
|
|
||||||
|
teardown |
||||||
|
{ |
||||||
|
DROP TABLE IF EXISTS parted; |
||||||
|
} |
||||||
|
|
||||||
|
session "s1" |
||||||
|
step "lock_share" |
||||||
|
{ |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN SHARE MODE; |
||||||
|
} |
||||||
|
step "lock_access_exclusive" |
||||||
|
{ |
||||||
|
BEGIN; |
||||||
|
LOCK part1 IN ACCESS EXCLUSIVE MODE; |
||||||
|
} |
||||||
|
step "commit" |
||||||
|
{ |
||||||
|
COMMIT; |
||||||
|
} |
||||||
|
|
||||||
|
session "s2" |
||||||
|
step "vac_specified" { VACUUM (SKIP_LOCKED) part1, part2; } |
||||||
|
step "vac_all_parts" { VACUUM (SKIP_LOCKED) parted; } |
||||||
|
step "analyze_specified" { ANALYZE (SKIP_LOCKED) part1, part2; } |
||||||
|
step "analyze_all_parts" { ANALYZE (SKIP_LOCKED) parted; } |
||||||
|
step "vac_analyze_specified" { VACUUM (ANALYZE, SKIP_LOCKED) part1, part2; } |
||||||
|
step "vac_analyze_all_parts" { VACUUM (ANALYZE, SKIP_LOCKED) parted; } |
||||||
|
step "vac_full_specified" { VACUUM (SKIP_LOCKED, FULL) part1, part2; } |
||||||
|
step "vac_full_all_parts" { VACUUM (SKIP_LOCKED, FULL) parted; } |
||||||
|
|
||||||
|
permutation "lock_share" "vac_specified" "commit" |
||||||
|
permutation "lock_share" "vac_all_parts" "commit" |
||||||
|
permutation "lock_share" "analyze_specified" "commit" |
||||||
|
permutation "lock_share" "analyze_all_parts" "commit" |
||||||
|
permutation "lock_share" "vac_analyze_specified" "commit" |
||||||
|
permutation "lock_share" "vac_analyze_all_parts" "commit" |
||||||
|
permutation "lock_share" "vac_full_specified" "commit" |
||||||
|
permutation "lock_share" "vac_full_all_parts" "commit" |
||||||
|
permutation "lock_access_exclusive" "vac_specified" "commit" |
||||||
|
permutation "lock_access_exclusive" "vac_all_parts" "commit" |
||||||
|
permutation "lock_access_exclusive" "analyze_specified" "commit" |
||||||
|
permutation "lock_access_exclusive" "analyze_all_parts" "commit" |
||||||
|
permutation "lock_access_exclusive" "vac_analyze_specified" "commit" |
||||||
|
permutation "lock_access_exclusive" "vac_analyze_all_parts" "commit" |
||||||
|
permutation "lock_access_exclusive" "vac_full_specified" "commit" |
||||||
|
permutation "lock_access_exclusive" "vac_full_all_parts" "commit" |
||||||
Loading…
Reference in new issue