Re: Block level parallel vacuum

Masahiko Sawada <[email protected]> Wed, 15 Jan 2020 13:34:33 +0900
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <CA+fd4k4ofFKrC5DM0BS27n3adC8g3_DKQixi1-YUSZh1Rw7nMg@mail.gmail.com>
--000000000000d30331059c263bca
Content-Type: text/plain; charset="UTF-8"

On Tue, 14 Jan 2020 at 21:43, Amit Kapila <[email protected]> wrote:
>
> On Tue, Jan 14, 2020 at 10:04 AM Masahiko Sawada
> <[email protected]> wrote:
> >
> > On Mon, 13 Jan 2020 at 12:50, Amit Kapila <[email protected]> wrote:
> > >
> > > On Sat, Jan 11, 2020 at 7:48 PM Masahiko Sawada
> > > <[email protected]> wrote:
> > >
> > > Okay, would it better if we get rid of this variable and have code like below?
> > >
> > > /* Skip the indexes that can be processed by parallel workers */
> > > if ( !(get_indstats(lps->lvshared, i) == NULL ||
> > > skip_parallel_vacuum_index(Irel[i], lps->lvshared)))
> > >     continue;
> >
> > Make sense to me.
> >
>
> I have changed the comment and condition to make it a positive test so
> that it is more clear.
>
> > > ...
> > > > Agreed. But with the updated patch the PARALLEL option without the
> > > > parallel degree doesn't display warning because params->nworkers = 0
> > > > in that case. So how about restoring params->nworkers at the end of
> > > > vacuum_rel()?
> > > >
> > >
> > > I had also thought on those lines, but I was not entirely sure about
> > > this resetting of workers.  Today, again thinking about it, it seems
> > > the idea Mahendra is suggesting that is giving an error if the
> > > parallel degree is not specified seems reasonable to me.  This means
> > > Vacuum (parallel), Vacuum (parallel) <tbl_name>, etc. will give an
> > > error "parallel degree must be specified".  This idea has merit as now
> > > we are supporting a parallel vacuum by default, so a 'parallel' option
> > > without a parallel degree doesn't have any meaning.  If we do that,
> > > then we don't need to do anything additional about the handling of
> > > temp tables (other than what patch is already doing) as well.  What do
> > > you think?
> > >
> >
> > Good point! Agreed.
> >
>
> Thanks, changed accordingly.
>

Thank you for updating the patch! I have a few small comments. The
rest looks good to me.

1.
+ * Compute the number of parallel worker processes to request.  Both index
+ * vacuum and index cleanup can be executed with parallel workers.  The
+ * relation size of the table don't affect the parallel degree for now.

s/don't/doesn't/

2.
@@ -383,6 +435,7 @@ vacuum(List *relations, VacuumParams *params,
        VacuumPageHit = 0;
        VacuumPageMiss = 0;
        VacuumPageDirty = 0;
+       VacuumSharedCostBalance = NULL;

I think we can initialize VacuumCostBalanceLocal and
VacuumActiveNWorkers here. We use these parameters during parallel
index vacuum and reset at the end but we might want to initialize them
for safety.

3.
+   /* Set cost-based vacuum delay */
+   VacuumCostActive = (VacuumCostDelay > 0);
+   VacuumCostBalance = 0;
+   VacuumPageHit = 0;
+   VacuumPageMiss = 0;
+   VacuumPageDirty = 0;
+   VacuumSharedCostBalance = &(lvshared->cost_balance);
+   VacuumActiveNWorkers = &(lvshared->active_nworkers);

VacuumCostBalanceLocal also needs to be initialized.

4.
The regression tests don't have the test case of PARALLEL 0.

Since I guess you already modifies the code locally I've attached the
diff containing the above review comments.

Regards,

--
Masahiko Sawada            http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--000000000000d30331059c263bca
Content-Type: application/octet-stream; name="review_v47_masahiko.patch"
Content-Disposition: attachment; filename="review_v47_masahiko.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5et58jy0>
X-Attachment-Id: f_k5et58jy0

ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9i
YWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCBkMmM4OTVhNmZiLi5iZjU4NzNl
ZGIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKKysr
IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCkBAIC0yOTM5LDcgKzI5Mzks
NyBAQCBoZWFwX3BhZ2VfaXNfYWxsX3Zpc2libGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAog
LyoKICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzIHRv
IHJlcXVlc3QuICBCb3RoIGluZGV4CiAgKiB2YWN1dW0gYW5kIGluZGV4IGNsZWFudXAgY2FuIGJl
IGV4ZWN1dGVkIHdpdGggcGFyYWxsZWwgd29ya2Vycy4gIFRoZQotICogcmVsYXRpb24gc2l6ZSBv
ZiB0aGUgdGFibGUgZG9uJ3QgYWZmZWN0IHRoZSBwYXJhbGxlbCBkZWdyZWUgZm9yIG5vdy4KKyAq
IHJlbGF0aW9uIHNpemUgb2YgdGhlIHRhYmxlIGRvZXNuJ3QgYWZmZWN0IHRoZSBwYXJhbGxlbCBk
ZWdyZWUgZm9yIG5vdy4KICAqCiAgKiBucmVxdWVzdGVkIGlzIHRoZSBudW1iZXIgb2YgcGFyYWxs
ZWwgd29ya2VycyB0aGF0IHVzZXIgcmVxdWVzdGVkLiAgSWYKICAqIG5yZXF1ZXN0ZWQgaXMgMCwg
d2UgY29tcHV0ZSB0aGUgcGFyYWxsZWwgZGVncmVlIGJhc2VkIG9uIG5pbmRleGVzLCB0aGF0IGlz
CkBAIC0zMzY1LDYgKzMzNjUsNyBAQCBwYXJhbGxlbF92YWN1dW1fbWFpbihkc21fc2VnbWVudCAq
c2VnLCBzaG1fdG9jICp0b2MpCiAJVmFjdXVtUGFnZUhpdCA9IDA7CiAJVmFjdXVtUGFnZU1pc3Mg
PSAwOwogCVZhY3V1bVBhZ2VEaXJ0eSA9IDA7CisJVmFjdXVtQ29zdEJhbGFuY2VMb2NhbCA9IDA7
CiAJVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UgPSAmKGx2c2hhcmVkLT5jb3N0X2JhbGFuY2UpOwog
CVZhY3V1bUFjdGl2ZU5Xb3JrZXJzID0gJihsdnNoYXJlZC0+YWN0aXZlX253b3JrZXJzKTsKIApk
aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9j
b21tYW5kcy92YWN1dW0uYwppbmRleCAxY2Q3N2U3OWQyLi5jNjQ1ZDQ0NjNmIDEwMDY0NAotLS0g
YS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k
cy92YWN1dW0uYwpAQCAtNDM1LDcgKzQzNSw5IEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZh
Y3V1bVBhcmFtcyAqcGFyYW1zLAogCQlWYWN1dW1QYWdlSGl0ID0gMDsKIAkJVmFjdXVtUGFnZU1p
c3MgPSAwOwogCQlWYWN1dW1QYWdlRGlydHkgPSAwOworCQlWYWN1dW1Db3N0QmFsYW5jZUxvY2Fs
ID0gMDsKIAkJVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UgPSBOVUxMOworCQlWYWN1dW1BY3RpdmVO
V29ya2VycyA9IE5VTEw7CiAKIAkJLyoKIAkJICogTG9vcCB0byBwcm9jZXNzIGVhY2ggc2VsZWN0
ZWQgcmVsYXRpb24uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1
bS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKaW5kZXggMjJjY2E3
MDY4Ny4uNzc0ZmYyZmM3YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92
YWN1dW0ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdmFjdXVtLm91dApAQCAt
MTA3LDYgKzEwNyw4IEBAIFZBQ1VVTSAoUEFSQUxMRUwgMikgcHZhY3RzdDsKIC0tIFZBQ1VVTSBp
bnZva2VzIHBhcmFsbGVsIGJ1bGstZGVsZXRpb24KIFVQREFURSBwdmFjdHN0IFNFVCBpID0gaSBX
SEVSRSBpIDwgMTAwMDsKIFZBQ1VVTSAoUEFSQUxMRUwgMikgcHZhY3RzdDsKK1VQREFURSBwdmFj
dHN0IFNFVCBpID0gaSBXSEVSRSBpIDwgMTAwMDsKK1ZBQ1VVTSAoUEFSQUxMRUwgMCkgcHZhY3Rz
dDsgLS0gZGlzYWJsZSBwYXJhbGxlbCB2YWN1dW0KIFZBQ1VVTSAoUEFSQUxMRUwgLTEpIHB2YWN0
c3Q7IC0tIGVycm9yCiBFUlJPUjogIHBhcmFsbGVsIHZhY3V1bSBkZWdyZWUgbXVzdCBiZSBiZXR3
ZWVuIDAgYW5kIDEwMjQKIExJTkUgMTogVkFDVVVNIChQQVJBTExFTCAtMSkgcHZhY3RzdDsKZGlm
ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwgYi9zcmMvdGVzdC9yZWdy
ZXNzL3NxbC92YWN1dW0uc3FsCmluZGV4IGQ2ODU5YTViYzkuLmZiZDM2NGQ3ZDAgMTAwNjQ0Ci0t
LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz
cy9zcWwvdmFjdXVtLnNxbApAQCAtOTMsNiArOTMsOSBAQCBWQUNVVU0gKFBBUkFMTEVMIDIpIHB2
YWN0c3Q7CiBVUERBVEUgcHZhY3RzdCBTRVQgaSA9IGkgV0hFUkUgaSA8IDEwMDA7CiBWQUNVVU0g
KFBBUkFMTEVMIDIpIHB2YWN0c3Q7CiAKK1VQREFURSBwdmFjdHN0IFNFVCBpID0gaSBXSEVSRSBp
IDwgMTAwMDsKK1ZBQ1VVTSAoUEFSQUxMRUwgMCkgcHZhY3RzdDsgLS0gZGlzYWJsZSBwYXJhbGxl
bCB2YWN1dW0KKwogVkFDVVVNIChQQVJBTExFTCAtMSkgcHZhY3RzdDsgLS0gZXJyb3IKIFZBQ1VV
TSAoUEFSQUxMRUwgMiwgSU5ERVhfQ0xFQU5VUCBGQUxTRSkgcHZhY3RzdDsKIFZBQ1VVTSAoUEFS
QUxMRUwgMiwgRlVMTCBUUlVFKSBwdmFjdHN0OyAtLSBlcnJvciwgY2Fubm90IHVzZSBib3RoIFBB
UkFMTEVMIGFuZCBGVUxMCg==
--000000000000d30331059c263bca--