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 1ov2O2-0003nV-4R for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Nov 2022 20:18:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ov2O0-0003nb-II for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Nov 2022 20:18:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ov2Nz-0003nL-BG for pgsql-hackers@lists.postgresql.org; Tue, 15 Nov 2022 20:18:24 +0000 Received: from wout4-smtp.messagingengine.com ([64.147.123.20]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ov2Nu-0003VA-ID for pgsql-hackers@lists.postgresql.org; Tue, 15 Nov 2022 20:18:22 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 388603200942; Tue, 15 Nov 2022 15:18:13 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Tue, 15 Nov 2022 15:18:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=anarazel.de; h= cc:cc:content-type:date:date:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to; s=fm1; t=1668543492; x=1668629892; bh=RD1il6Cea+ NeKBrajheFcCgtXH4J+wmCnHwkiM4x1ZE=; b=XLe6d8tv3sYyhRLcUe31sCvI7u fj/D/Im+DDvQQ9lZ6EZ5Mgh1AXSavJuG9+xqaJyvCjKdGF8wo82kJXv9tzEeBOL4 sl18lHKbf3az8VOiSFvK3GPNn8HCzn8V3RjXRonQ6M3cCX3fijn3IYuxNhr5o56+ oftC2kadcrYdwVlnb1LeojmYxTI/Jk3117Bjt7J7Y5dw3leT1FtEFYag6ijZ9oME 9hD1CiAeiRwkN/94mmF+5Rbd2F+47M+ECNmOaNGQ8Hry0aAUsVpWYTUJ8b02hAvn FQyvXPc4mNQbAcQlZExNQSUiMn8tUhLt7BpCRhiPIBfX/au6lZyC3UXjNFCg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; t=1668543492; x=1668629892; bh=RD1il6Cea+NeKBrajheFcCgtXH4J +wmCnHwkiM4x1ZE=; b=wJ95ufePtYWJ3dxCR8kBCpbab0W+PqrPb2Uwl4SliCGm IYB3ruCVsWD9OzdFMvdCs9Dl3J3x0yURuQmt8FapoYBF89pF1f5Eb+rMwdUVDsfa yCE8oW14IT++0rtJwjEiB17AfbJdDIiU6TZnN832en1e2DD5dBhNi6grrIUqiAd5 FQcgalObBUTSzIhc8hgPvg3oJWsf90oxa+F6V8NVMItiMxVxbbmD/ygdkNDtsd6L XzXRF2aOyJv0ss4uPcXSpvaXnYLBvooICleyv/FcyiSYeNKNy4na2hErQcjBwx1m 9kwAkS1OTqvg2OaKjDbZh3EsLhFSr5F5Fvf/txErlg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvgedrgeeggddufeeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesthdtredttddtvdenucfhrhhomheptehnughr vghsucfhrhgvuhhnugcuoegrnhgurhgvshesrghnrghrrgiivghlrdguvgeqnecuggftrf grthhtvghrnhepvdfffeevhfetveffgeeiteefhfdtvdffjeevhfeuteegleduheetvedu ieettddunecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh eprghnughrvghssegrnhgrrhgriigvlhdruggv X-ME-Proxy: Feedback-ID: id4a34324:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 15 Nov 2022 15:18:12 -0500 (EST) Date: Tue, 15 Nov 2022 12:18:11 -0800 From: Andres Freund To: "Drouvot, Bertrand" Cc: Nitin Jadhav , Bharath Rupireddy , Matthias van de Meent , Ashutosh Sharma , Julien Rouhaud , Bruce Momjian , Tom Lane , Magnus Hagander , PostgreSQL Hackers Subject: Re: Report checkpoint progress with pg_stat_progress_checkpoint (was: Report checkpoint progress in server logs) Message-ID: <20221115201811.6tair4cyb3skayc4@awork3.anarazel.de> References: <20220319001556.atuqbmafvc73pa2k@alap3.anarazel.de> <20220707000446.hefgyu5xikxwt4md@alap3.anarazel.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, On 2022-11-04 09:25:52 +0100, Drouvot, Bertrand wrote: > > @@ -7023,29 +7048,63 @@ static void > CheckPointGuts(XLogRecPtr checkPointRedo, int flags) > { > CheckPointRelationMap(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_REPLI_SLOTS); > CheckPointReplicationSlots(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_SNAPSHOTS); > CheckPointSnapBuild(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_LOGICAL_REWRITE_MAPPINGS); > CheckPointLogicalRewriteHeap(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_REPLI_ORIGIN); > CheckPointReplicationOrigin(); > > /* Write out all dirty data in SLRUs and the main buffer pool */ > TRACE_POSTGRESQL_BUFFER_CHECKPOINT_START(flags); > CheckpointStats.ckpt_write_t = GetCurrentTimestamp(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_CLOG_PAGES); > CheckPointCLOG(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_COMMITTS_PAGES); > CheckPointCommitTs(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_SUBTRANS_PAGES); > CheckPointSUBTRANS(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_MULTIXACT_PAGES); > CheckPointMultiXact(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_PREDICATE_LOCK_PAGES); > CheckPointPredicate(); > + > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_BUFFERS); > CheckPointBuffers(flags); > > /* Perform all queued up fsyncs */ > TRACE_POSTGRESQL_BUFFER_CHECKPOINT_SYNC_START(); > CheckpointStats.ckpt_sync_t = GetCurrentTimestamp(); > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_SYNC_FILES); > ProcessSyncRequests(); > CheckpointStats.ckpt_sync_end_t = GetCurrentTimestamp(); > TRACE_POSTGRESQL_BUFFER_CHECKPOINT_DONE(); > > /* We deliberately delay 2PC checkpointing as long as possible */ > + pgstat_progress_update_param(PROGRESS_CHECKPOINT_PHASE, > + PROGRESS_CHECKPOINT_PHASE_TWO_PHASE); > CheckPointTwoPhase(checkPointRedo); > } This is quite the code bloat. Can we make this less duplicative? > +CREATE VIEW pg_stat_progress_checkpoint AS > + SELECT > + S.pid AS pid, > + CASE S.param1 WHEN 1 THEN 'checkpoint' > + WHEN 2 THEN 'restartpoint' > + END AS type, > + ( CASE WHEN (S.param2 & 4) > 0 THEN 'immediate ' ELSE '' END || > + CASE WHEN (S.param2 & 8) > 0 THEN 'force ' ELSE '' END || > + CASE WHEN (S.param2 & 16) > 0 THEN 'flush-all ' ELSE '' END || > + CASE WHEN (S.param2 & 32) > 0 THEN 'wait ' ELSE '' END || > + CASE WHEN (S.param2 & 128) > 0 THEN 'wal ' ELSE '' END || > + CASE WHEN (S.param2 & 256) > 0 THEN 'time ' ELSE '' END > + ) AS flags, > + ( '0/0'::pg_lsn + > + ((CASE > + WHEN S.param3 < 0 THEN pow(2::numeric, 64::numeric)::numeric > + ELSE 0::numeric > + END) + > + S.param3::numeric) > + ) AS start_lsn, I don't think we should embed this much complexity in the view defintions. It's hard to read, bloats the catalog, we can't fix them once released. This stuff seems like it should be in a helper function. I don't have any iea what that pow stuff is supposed to be doing. > + to_timestamp(946684800 + (S.param4::float8 / 1000000)) AS start_time, I don't think this is a reasonable path - embedding way too much low-level details about the timestamp format in the view definition. Why do we need to do this? Greetings, Andres Freund