From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Jeff Janes <jeff(dot)janes(at)gmail(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Daniel Farina <daniel(at)heroku(dot)com>, Craig Ringer <ringerc(at)ringerc(dot)id(dot)au>, Harold A(dot) Giménez <harold(dot)gimenez(at)gmail(dot)com> |
Subject: | Re: [PERFORM] DELETE vs TRUNCATE explanation |
Date: | 2012-07-15 22:37:12 |
Message-ID: | 24158.1342391832@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-performance |
... btw, in the penny wise and pound foolish department, I observe that
smgrdounlink calls mdunlink separately for each possibly existing fork
of a relation to be dropped. That means we are queuing a separate fsync
queue entry for each fork, and could immediately save a factor of four
in FORGET_RELATION_FSYNC traffic if we were to redefine those queue
entries as applying to all forks. The only reason to have a per-fork
variant, AFAICS, is for smgrdounlinkfork(), which is used nowhere and
exists only because I was too chicken to remove the functionality
outright in commit ece01aae479227d9836294b287d872c5a6146a11. But given
that we know the fsync queue can be a bottleneck, my vote is to refactor
mdunlink to apply to all forks and send only one message.
I am also wondering whether it's really necessary to send fsync request
messages for backend-local relations. If rnode.backend says it's local,
can't we skip sending the fsync request? All local relations are
flush-on-crash anyway, no?
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2012-07-16 00:16:56 | Closing out the June commitfest |
Previous Message | Tom Lane | 2012-07-15 21:45:28 | Re: BUG #6733: All Tables Empty After pg_upgrade (PG 9.2.0 beta 2) |
From | Date | Subject | |
---|---|---|---|
Next Message | Craig Ringer | 2012-07-16 00:22:59 | Re: [PERFORM] DELETE vs TRUNCATE explanation |
Previous Message | Tom Lane | 2012-07-15 18:29:27 | Re: [PERFORM] DELETE vs TRUNCATE explanation |