Re: insert/update performance - Mailing list pgsql-hackers
From | Jinhua Luo |
---|---|
Subject | Re: insert/update performance |
Date | |
Msg-id | CAAc9rOwpfFojSQTCRBZRc-zMkEHD9Zg5RX1-27mBX2cxEy+moQ@mail.gmail.com Whole thread Raw |
In response to | Re: insert/update performance (Amit Kapila <amit.kapila16@gmail.com>) |
Responses |
Re: insert/update performance
|
List | pgsql-hackers |
Hi, The vacuum doesn't recycle the rows obsoleted by update? I don't think so. In the above vacuum result, I do not delete any rows, but the vacuum still recycles a fraction of rows, obviously they're obsoleted by update. I know plain vacuum (without full option) do not reduce the size of the whole table file/segments, but it should refresh the fsm. In my case, the update statement did modify the index column, but is it related to the fsm? I think anyways, the update would obsolete previous versions, as long as they are not hold by any active transactions, they would be recycled and count in the fsm, right? I just cannot understand why the recycle ratio is not 50%. Regards, Jinhua Luo 2016-01-23 15:13 GMT+08:00 Amit Kapila <amit.kapila16@gmail.com>: > On Sat, Jan 23, 2016 at 12:13 PM, Jinhua Luo <luajit.io@gmail.com> wrote: >> >> Hi All, >> >> Here is my test environment: >> >> postgresql 9.4.5, Ubuntu 14.04, 8 CPU core, 8GB ram, SCSI hard disk >> >> I have a table with 70 columns, and 6 indexes. The data flow is a >> special OLTP model: frequent inserts (2000 tps), and each inserted row >> would be updated very soon (i.e. the number of inserts is equal to the >> number of updates). >> >> >> At last, I found it's not the problem of autovacuum. >> I do a simple test: I truncate the table, disable the autovacuum, and >> run the application for a few minutes, then I invokes vacuum manually, >> it gives a strange output: >> found 598 removable, 25662 nonremovable row versions in 3476 pages >> DETAIL: 0 dead row versions cannot be removed yet >> >> As said before, the number of inserts is equal to the number of >> updates. So the bloat of the table should be 100%, and the number of >> removable rows should be equal to the number of nonremovable rows, >> which is the real number of inserts issued by the application. >> >> But the result shows that the number of nonremovable rows is just a >> small fraction. If it's true, then no wonder that the table would keep >> extending for a long time, because the free space is almost small. >> >> Why the free space after vacuum is not 50% of the original size in my >> case? >> > > Vacuum just removes the deleted rows (provided they are not visible to > any active transaction), it won't reduce the size which is already extended, > unless the empty space is at end of relation. > > Are you updating any index column? > > I think if you should once try with higher fill factor as you have lot > of updates. > > > > With Regards, > Amit Kapila. > EnterpriseDB: http://www.enterprisedb.com
pgsql-hackers by date: