Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lICRE-0001wO-1Q for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Mar 2021 15:32:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lICRC-00005s-N6 for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Mar 2021 15:32:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lICRC-00005k-Gm for pgsql-hackers@lists.postgresql.org; Fri, 05 Mar 2021 15:32:22 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lICR5-0001Nm-63 for pgsql-hackers@lists.postgresql.org; Fri, 05 Mar 2021 15:32:22 +0000 Received: from hnk.local (p2386004-ipbf1026funabasi.chiba.ocn.ne.jp [118.6.4.4]) by oss.nttdata.com (Postfix) with ESMTPSA id 7BA1A625C2; Sat, 6 Mar 2021 00:32:07 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com Subject: Re: shared-memory based stats collector To: Kyotaro Horiguchi , gkokolatos@protonmail.com Cc: pgsql-hackers@lists.postgresql.org References: <20210108.102434.253483097897189339.horikyota.ntt@gmail.com> <20210114.151425.2043098307171137735.horikyota.ntt@gmail.com> <20210121.120348.195305077048770640.horikyota.ntt@gmail.com> <20210305.171856.303779618961522117.horikyota.ntt@gmail.com> From: Fujii Masao Message-ID: Date: Sat, 6 Mar 2021 00:32:07 +0900 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: <20210305.171856.303779618961522117.horikyota.ntt@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2021/03/05 17:18, Kyotaro Horiguchi wrote: > At Thu, 21 Jan 2021 12:03:48 +0900 (JST), Kyotaro Horiguchi wrote in >> Commit 960869da08 (database statistics) conflicted with this. Rebased. >> >> I'm concerned about the behavior that pgstat_update_connstats calls >> GetCurrentTimestamp() every time stats update happens (with intervals >> of 10s-60s in this patch). But I didn't change that design since that >> happens with about 0.5s intervals in master and the rate is largely >> reduced in this patch, to make this patch simpler. > > I stepped on my foot, and another commit coflicted. Just rebased. Thanks for rebasing the patches! I think that 0003 patch is self-contained and useful, for example which enables us to monitor archiver process in pg_stat_activity. So IMO it's worth pusing 0003 patch firstly. Here are the review comments for 0003 patch. + /* Archiver process's latch */ + Latch *archiverLatch; + /* Current shared estimate of appropriate spins_per_delay value */ The last line in the above seems not necessary. In proc.h, NUM_AUXILIARY_PROCS needs to be incremented. /* ---------- * Functions called from postmaster * ---------- */ extern int pgarch_start(void); In pgarch.h, the above is not necessary. +extern void XLogArchiveWakeup(void); This seems no longer necessary. +extern void XLogArchiveWakeupStart(void); +extern void XLogArchiveWakeupEnd(void); +extern void XLogArchiveWakeup(void); These seem also no longer necessary. PgArchPID = 0; if (!EXIT_STATUS_0(exitstatus)) - LogChildExit(LOG, _("archiver process"), - pid, exitstatus); - if (PgArchStartupAllowed()) - PgArchPID = pgarch_start(); + HandleChildCrash(pid, exitstatus, + _("archiver process")); I don't think that we should treat non-zero exit condition as a crash, as before. Otherwise when archive_command fails on a signal, archiver emits FATAL error and which leads the server restart. - * walwriter, autovacuum, or background worker. + * walwriter, autovacuum, archiver or background worker. * * The objectives here are to clean up our local state about the child * process, and to signal all other remaining children to quickdie. @@ -3609,6 +3606,18 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) signal_child(AutoVacPID, (SendStop ? SIGSTOP : SIGQUIT)); } + /* Take care of the archiver too */ + if (pid == PgArchPID) + PgArchPID = 0; + else if (PgArchPID != 0 && take_action) + { + ereport(DEBUG2, + (errmsg_internal("sending %s to process %d", + (SendStop ? "SIGSTOP" : "SIGQUIT"), + (int) PgArchPID))); + signal_child(PgArchPID, (SendStop ? SIGSTOP : SIGQUIT)); + } + Same as above. In xlogarchive.c, "#include "storage/pmsignal.h"" is no longer necessary. pgarch_forkexec() should be removed from pgarch.c because it's no longer used. /* ------------------------------------------------------------ * Public functions called from postmaster follow * ------------------------------------------------------------ */ The definition of PgArchiverMain() should be placed just after the above comment. exit(0) in PgArchiverMain() should be proc_exit(0)? Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION