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