<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial">Now vacuum full table takes an
AccessExclusiveLockon relation at start and select statement takes an AccessShareLock on relation. So 'vacuum full
table'blocks select statement on the same table until it is committed and select statement block 'vacuum full table'
untilit is finished. The concurency is very very bad.<br /><br />Proposal: vacuum full table takes an ExclusiveLock on
relationinstead of AccessExclusiveLock at start. It can' block select statement before call function
"finish_heap_swap".and select statement is safe because vacuum full table copys tuples from old relation to new
relationbefore calling function "finish_heap_swap". But it must take an AccessExclusiveLock on relation when call
function"finish_heap_swap" in order to block select statement on the same relation.<br /><br />This solution can
improvethe concurency. the following shows the reasons.<br />1. The Function 'copy_heap_data' which copys tuples from
oldrelation to new relation takes most elapsed time of vacuum full table. And it takes an ExclusiveLock on relation
whencall function "copy_heap_data". So select statement on the same relation can't be blocked in the most elapsed time
ofvacuum full table.<br />2. The elapsed time of "finish_heap_swap" is very short, So the blocking time window is very
short.<br/><br />This proposal can also improve the concurency of cluster table and select statement. Because the
executionsteps of cluster table is similar to vacuum full table. The select statement is safe before cluster table call
function"finish_heap_swap".<br /><br />Please let me know if I miss something.<br /><br />Jinyu Zhang<br
/>thanks</div><br/><br /><span title="neteasefooter"><p> </span>