Search Postgresql Archives

Autocommit, isolation level, and vacuum behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm trying to understand the effect of autocommit on vacuum behavior (postgres 8.3, if it matters). Let's suppose you have two tables, BIG and TINY in a database accessed through JDBC. BIG has lots of rows. There are inserts, updates, and every so often there is a scan of the entire table. The scan is slow, e.g. one row every 30 seconds. TINY has one row, which contains summary information from BIG. It is updated every time that BIG is inserted or updated. BIG is vacuumed weekly, and TINY is vacuumed every 1000 updates.

What I'm observing is that as my test program runs, transactions (insert/update BIG; update TINY) gets slower and slower, and the file storing the TINY table gets very big. I'm guessing that the long-running scan of BIG forces versions of the one row in TINY to accumulate, (just in case the TINY table is viewed, the connection has to have the correct view). As these accumulate, each update to TINY takes more and more time, and everything slows down.

I wrote a little JDBC test program to test this theory. Long scans (with the 30 second sleep) and with autocommit = false produces the problem described. Shorter scans (e.g. no sleep between rows of the BIG scan) produce better results. Also, if the scan is done on a connection with autocommit = true, everything works fine -- no slowdown, and no bloat of the TINY file.

Am I on the right track -- does autocommit = false for the BIG scan force versions of TINY to accumulate? I played around with a JDBC test program, and so far cannot see how the autocommit mode causes variations in what is seen by the scan. The behavior I've observed is consistent with the SERIALIZABLE isolation level, but 1) I thought the default was READ COMMITTED, and 2) why does the accumulation of row versions have anything to do with autocommit mode (as opposed to isolation level) on a connection used for the scan?

Jack Orenstein


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux