Hi All,

I was running some pgbench tests and observed this phenomenon. This might be
a known issue, but I thought its nevertheless worth mentioning.

Auto-analyze process grabs a MVCC snapshot. If it runs on a very large
table, it may take considerable time and would stop the OldestXmin from
advancing. During that time, if there are highly updated small tables, those
would bloat a lot. For example, in the attached log snippet (and the HEAD is
patched a bit to produce more information than what you would otherwise
see), for a scale factor of 50 and 50 clients:

branches and tellers tables, which had a stable size of around 65 and 90
pages respectively, bloat to 402 and 499 pages respectively when accounts
table is being analyzed. The accounts table analyze takes around 5 mins on
my decent server and the branches and tellers tables keep bloating during
that time. If these small tables are very actively accessed, vacuum may not
be able to even truncate them later, once OldestXmin advances at the end of
auto analyze.

I understand analyze needs snapshot to run index predicate functions, but is
there something we can do  ? There is a PROC_IN_ANALYZE flag, but we don't
seem to be using it anywhere.  Since acquire_sample_rows() returns palloced
tuples, can't we let OldestXmin advance after scanning a page by ignoring
procs with the flag set, just like we do for PROC_IN_VACUUM ?

Thanks,
Pavan

-- 
Pavan Deolasee
EnterpriseDB     http://www.enterprisedb.com
7457:2006-07-07 09:46:05.829 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 2919, system usage: 
CPU 0.00s/0.00u sec elapsed 0.03 sec
7457:2006-07-07 09:46:05.874 ISTLOG:  index "pgbench_tellers_pkey" now contains 
500 row versions in 9 pages
7457:2006-07-07 09:46:05.874 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.01 sec.
7457:2006-07-07 09:46:05.874 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 90 remain
        tuples: 4977 removed, 853 remain
        index pointers: 0 removed
        total cost delay: 0
        system usage for first pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.02 sec
7457:2006-07-07 09:46:05.899 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 357, system usage: 
CPU 0.00s/0.00u sec elapsed 0.00 sec
7462:2006-07-07 09:47:19.309 ISTLOG:  index "pgbench_branches_pkey" now 
contains 50 row versions in 2 pages
7462:2006-07-07 09:47:19.309 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 56.13 sec.
7462:2006-07-07 09:47:19.309 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 0
        pages: 0 removed, 65 remain
        tuples: 5220 removed, 350 remain
        index pointers: 0 removed
        total cost delay: 20
        system usage for first pass CPU 0.18s/0.18u sec elapsed 0.18 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 56.31 sec
7462:2006-07-07 09:47:19.341 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 4238, system usage: 
CPU 0.00s/0.00u sec elapsed 0.02 sec
7462:2006-07-07 09:47:19.809 ISTLOG:  index "pgbench_tellers_pkey" now contains 
500 row versions in 9 pages
7462:2006-07-07 09:47:19.809 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.03 sec.
7462:2006-07-07 09:47:19.810 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 90 remain
        tuples: 5442 removed, 770 remain
        index pointers: 0 removed
        total cost delay: 40
        system usage for first pass CPU 0.38s/0.38u sec elapsed 0.38 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.41 sec
7462:2006-07-07 09:47:19.858 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 390, system usage: 
CPU 0.00s/0.00u sec elapsed 0.02 sec
7467:2006-07-07 09:47:22.994 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 4644, system usage: 
CPU 0.00s/0.00u sec elapsed 0.00 sec
7473:2006-07-07 09:48:48.390 ISTLOG:  index "pgbench_branches_pkey" now 
contains 50 row versions in 2 pages
7473:2006-07-07 09:48:48.390 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 25.27 sec.
7473:2006-07-07 09:48:48.390 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 0
        pages: 0 removed, 65 remain
        tuples: 2852 removed, 368 remain
        index pointers: 0 removed
        total cost delay: 20
        system usage for first pass CPU 0.11s/0.11u sec elapsed 0.11 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 25.38 sec
7473:2006-07-07 09:48:48.432 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 3374, system usage: 
CPU 0.00s/0.00u sec elapsed 0.03 sec
7473:2006-07-07 09:48:48.652 ISTLOG:  index "pgbench_tellers_pkey" now contains 
500 row versions in 9 pages
7473:2006-07-07 09:48:48.652 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.12 sec.
7473:2006-07-07 09:48:48.652 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 90 remain
        tuples: 5603 removed, 719 remain
        index pointers: 0 removed
        total cost delay: 20
        system usage for first pass CPU 0.07s/0.07u sec elapsed 0.07 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.20 sec
7473:2006-07-07 09:48:48.709 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 573, system usage: 
CPU 0.00s/0.00u sec elapsed 0.02 sec
7473:2006-07-07 09:49:32.332 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_history" total rows 1984743, dead rows 0, system 
usage: CPU 0.12s/0.27u sec elapsed 43.58 sec
7482:2006-07-07 09:50:26.959 ISTLOG:  scanned index "pgbench_tellers_pkey" to 
remove 2044 row versions
7482:2006-07-07 09:50:26.959 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.12 sec.
7482:2006-07-07 09:50:27.246 ISTLOG:  "pgbench_tellers": removed 2044 row 
versions in 99 pages
7482:2006-07-07 09:50:27.246 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.28 sec.
7482:2006-07-07 09:50:27.246 ISTLOG:  index "pgbench_tellers_pkey" now contains 
500 row versions in 13 pages
7482:2006-07-07 09:50:27.246 ISTDETAIL:  2044 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.00 sec.
7482:2006-07-07 09:50:27.246 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 1
        pages: 0 removed, 147 remain
        tuples: 3602 removed, 961 remain
        index pointers: 2044 removed
        total cost delay: 363
        system usage for first pass CPU 0.82s/0.82u sec elapsed 3.82 sec
        systema usage for second pass CPU 0.28s/0.28u sec elapsed 0.28 sec
        system usage for index scan CPU 0.12s/0.12u sec elapsed 0.12 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 4.24 sec
7482:2006-07-07 09:50:27.327 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 1080, system usage: 
CPU 0.00s/0.00u sec elapsed 0.06 sec
7488:2006-07-07 09:51:23.210 ISTLOG:  index "pgbench_tellers_pkey" now contains 
986 row versions in 13 pages
7488:2006-07-07 09:51:23.210 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.01 sec.
7488:2006-07-07 09:51:23.210 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 147 remain
        tuples: 31 removed, 13993 remain
        index pointers: 0 removed
        total cost delay: 106
        system usage for first pass CPU 0.19s/0.19u sec elapsed 0.19 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.20 sec
7488:2006-07-07 09:51:23.314 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 13716, system 
usage: CPU 0.00s/0.00u sec elapsed 0.08 sec
7476:2006-07-07 09:51:57.292 ISTLOG:  index "pgbench_branches_pkey" now 
contains 535 row versions in 5 pages
7476:2006-07-07 09:51:57.292 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 151.18 sec.
7476:2006-07-07 09:51:57.292 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 0
        pages: 0 removed, 108 remain
        tuples: 0 removed, 21125 remain
        index pointers: 0 removed
        total cost delay: 40
        system usage for first pass CPU 0.10s/0.10u sec elapsed 3.10 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 154.29 sec
7476:2006-07-07 09:51:57.382 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 37833, system 
usage: CPU 0.00s/0.00u sec elapsed 0.06 sec
7476:2006-07-07 09:51:57.629 ISTLOG:  index "pgbench_tellers_pkey" now contains 
3883 row versions in 15 pages
7476:2006-07-07 09:51:57.629 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.00 sec.
7476:2006-07-07 09:51:57.629 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 245 remain
        tuples: 0 removed, 38172 remain
        index pointers: 0 removed
        total cost delay: 100
        system usage for first pass CPU 0.21s/0.21u sec elapsed 0.21 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.21 sec
7476:2006-07-07 09:51:57.684 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 37783, system 
usage: CPU 0.00s/0.00u sec elapsed 0.04 sec
7491:2006-07-07 09:52:29.608 ISTLOG:  scanned index "pgbench_branches_pkey" to 
remove 383 row versions
7491:2006-07-07 09:52:29.608 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 2.39 sec.
7491:2006-07-07 09:52:29.964 ISTLOG:  "pgbench_branches": removed 383 row 
versions in 98 pages
7491:2006-07-07 09:52:29.964 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.35 sec.
7491:2006-07-07 09:52:29.965 ISTLOG:  index "pgbench_branches_pkey" now 
contains 775 row versions in 5 pages
7491:2006-07-07 09:52:29.965 ISTDETAIL:  40 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.00 sec.
7491:2006-07-07 09:52:29.965 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 1
        pages: 0 removed, 328 remain
        tuples: 0 removed, 53138 remain
        index pointers: 383 removed
        total cost delay: 518
        system usage for first pass CPU 0.38s/0.38u sec elapsed 3.38 sec
        systema usage for second pass CPU 0.35s/0.35u sec elapsed 0.35 sec
        system usage for index scan CPU 0.39s/0.39u sec elapsed 2.39 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 6.13 sec
7491:2006-07-07 09:52:30.088 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 48, dead rows 54528, system 
usage: CPU 0.00s/0.00u sec elapsed 0.10 sec
7491:2006-07-07 09:52:30.315 ISTLOG:  index "pgbench_tellers_pkey" now contains 
6028 row versions in 23 pages
7491:2006-07-07 09:52:30.315 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.05 sec.
7491:2006-07-07 09:52:30.315 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 340 remain
        tuples: 0 removed, 55275 remain
        index pointers: 0 removed
        total cost delay: 120
        system usage for first pass CPU 0.13s/0.13u sec elapsed 0.13 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.19 sec
7491:2006-07-07 09:52:30.394 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 502, dead rows 54912, system 
usage: CPU 0.00s/0.00u sec elapsed 0.06 sec
7496:2006-07-07 09:53:32.948 ISTLOG:  index "pgbench_branches_pkey" now 
contains 935 row versions in 7 pages
7496:2006-07-07 09:53:32.948 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 1.39 sec.
7496:2006-07-07 09:53:32.948 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 0
        pages: 0 removed, 328 remain
        tuples: 0 removed, 67065 remain
        index pointers: 0 removed
        total cost delay: 255
        system usage for first pass CPU 0.54s/0.54u sec elapsed 8.54 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 9.93 sec
7496:2006-07-07 09:53:33.323 ISTLOG:  index "pgbench_tellers_pkey" now contains 
7559 row versions in 27 pages
7496:2006-07-07 09:53:33.323 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.02 sec.
7496:2006-07-07 09:53:33.324 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 393 remain
        tuples: 0 removed, 69217 remain
        index pointers: 0 removed
        total cost delay: 254
        system usage for first pass CPU 0.30s/0.30u sec elapsed 0.30 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.32 sec
7503:2006-07-07 09:54:34.867 ISTLOG:  index "pgbench_branches_pkey" now 
contains 1209 row versions in 7 pages
7503:2006-07-07 09:54:34.867 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 2.95 sec.
7503:2006-07-07 09:54:34.868 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 0
        pages: 0 removed, 364 remain
        tuples: 0 removed, 78054 remain
        index pointers: 0 removed
        total cost delay: 208
        system usage for first pass CPU 0.90s/0.90u sec elapsed 8.90 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 11.85 sec
7503:2006-07-07 09:54:35.271 ISTLOG:  index "pgbench_tellers_pkey" now contains 
8935 row versions in 35 pages
7503:2006-07-07 09:54:35.271 ISTDETAIL:  0 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.00 sec.
7503:2006-07-07 09:54:35.271 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 0
        pages: 0 removed, 447 remain
        tuples: 0 removed, 79764 remain
        index pointers: 0 removed
        total cost delay: 183
        system usage for first pass CPU 0.21s/0.21u sec elapsed 0.21 sec
        systema usage for second pass CPU 0.00s/0.00u sec elapsed 0.00 sec
        system usage for index scan CPU 0.00s/0.00u sec elapsed 0.00 sec
        total system usage: CPU 0.00s/0.01u sec elapsed 0.21 sec
7482:2006-07-07 09:54:55.027 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_accounts" total rows 4988305, dead rows 189797, system 
usage: CPU 0.57s/0.53u sec elapsed 267.66 sec
7507:2006-07-07 09:55:23.166 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 6522, system usage: 
CPU 0.00s/0.00u sec elapsed 0.15 sec
7507:2006-07-07 09:55:23.250 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_tellers" total rows 500, dead rows 14324, system 
usage: CPU 0.00s/0.00u sec elapsed 0.05 sec
7510:2006-07-07 09:56:37.175 ISTLOG:  scanned index "pgbench_branches_pkey" to 
remove 1362 row versions
7510:2006-07-07 09:56:37.175 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.72 sec.
7510:2006-07-07 09:56:37.520 ISTLOG:  "pgbench_branches": removed 1362 row 
versions in 364 pages
7510:2006-07-07 09:56:37.520 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.34 sec.
7510:2006-07-07 09:56:37.520 ISTLOG:  index "pgbench_branches_pkey" now 
contains 50 row versions in 7 pages
7510:2006-07-07 09:56:37.520 ISTDETAIL:  1362 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.00 sec.
7510:2006-07-07 09:56:37.520 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_branches": index scans: 1
        pages: 0 removed, 402 remain
        tuples: 4436 removed, 582 remain
        index pointers: 1362 removed
        total cost delay: 378
        system usage for first pass CPU 0.43s/0.43u sec elapsed 13.43 sec
        systema usage for second pass CPU 0.34s/0.34u sec elapsed 0.34 sec
        system usage for index scan CPU 0.72s/0.72u sec elapsed 0.72 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 14.50 sec
7510:2006-07-07 09:56:37.624 ISTLOG:  automatic analyze of table 
"postgres.public.pgbench_branches" total rows 50, dead rows 1896, system usage: 
CPU 0.00s/0.00u sec elapsed 0.04 sec
7510:2006-07-07 09:56:37.847 ISTLOG:  scanned index "pgbench_tellers_pkey" to 
remove 9794 row versions
7510:2006-07-07 09:56:37.847 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.12 sec.
7510:2006-07-07 09:56:38.309 ISTLOG:  "pgbench_tellers": removed 9794 row 
versions in 447 pages
7510:2006-07-07 09:56:38.309 ISTDETAIL:  CPU 0.00s/0.00u sec elapsed 0.46 sec.
7510:2006-07-07 09:56:38.309 ISTLOG:  index "pgbench_tellers_pkey" now contains 
500 row versions in 40 pages
7510:2006-07-07 09:56:38.309 ISTDETAIL:  9794 index row versions were removed.
        0 index pages have been deleted, 0 are currently reusable.
        CPU 0.00s/0.00u sec elapsed 0.00 sec.
7510:2006-07-07 09:56:38.310 ISTLOG:  automatic vacuum of table 
"postgres.public.pgbench_tellers": index scans: 1
        pages: 0 removed, 499 remain
        tuples: 3465 removed, 773 remain
        index pointers: 9794 removed
        total cost delay: 534
        system usage for first pass CPU 0.06s/0.06u sec elapsed 0.06 sec
        systema usage for second pass CPU 0.46s/0.46u sec elapsed 0.46 sec
        system usage for index scan CPU 0.12s/0.12u sec elapsed 0.12 sec
        total system usage: CPU 0.00s/0.00u sec elapsed 0.65 sec
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to