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 1lUhxI-0000jG-0S for pgsql-hackers@arkaria.postgresql.org; Fri, 09 Apr 2021 03:37:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lUhxF-000361-Ok for pgsql-hackers@arkaria.postgresql.org; Fri, 09 Apr 2021 03:37:09 +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 1lUhxF-00030B-Hf for pgsql-hackers@lists.postgresql.org; Fri, 09 Apr 2021 03:37:09 +0000 Received: from mail-io1-xd2d.google.com ([2607:f8b0:4864:20::d2d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lUhxC-0003cw-Vo for pgsql-hackers@postgresql.org; Fri, 09 Apr 2021 03:37:08 +0000 Received: by mail-io1-xd2d.google.com with SMTP id v26so4478778iox.11 for ; Thu, 08 Apr 2021 20:37:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telsasoft-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=rOJseBr0Ds5wY0OQjShXZSu5L1dB/5h1F0IUopDXDew=; b=pUUjG2fFO64WYQgIxcMo335n4V/1XHTBUAQl9h5q4aJdPSsjn1h+T7s++TuUIPRrGr pSVJghH+G3hhm2V9jQiVzE/sq/33sXdh9NWpTCb0VQmFVfUVNwipf9W3P9ffUrytlmqJ 5JKPJCzcj1LDorvHCdWXpwx2sjbotUG/D6Su9KVdpTednMPzjDGvrUNtVIWNulzKamBd rwILkxK9xgzIkO7/KqS+fB0vryvCsPYOU/tPNHunn1aMZQGUke/VDCE4raqv2VQyuHAw /yj+W1ZzwF66hEtUCK3lQ8zRlO8Vi4V0yxYS7WHtqNzFVRfSiuqhBGgkPdKx2BOpDvvg 183w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=rOJseBr0Ds5wY0OQjShXZSu5L1dB/5h1F0IUopDXDew=; b=MfhSTHE2Z0mmEMiCXPv7XBAxsoP1QtySBtNI9l9wx75G4WfJl/i6v9vcoyZsaeZfd/ BcvFVMQwS5C0cLNd+FGbLZLMo7mq3t28CEUh0E3TriTFqV2bncy6r2EzcgKIkcyHNilF JNxLnTjC9DWwfnHnfNEOsa01zTaHg6Kbb7FwrCuuTSYExqH+Ootd3xq/up6A1PKYGsgN VEjsUs+WOogLJjtZwBnlX2ohgQEY4dusH8Napzp/2q60eeTKM4HkK9i0ia6tvugXghAF 2LxRoYAhty3A0xVXOoNDxZLd6GnvWuh4F36cnh59EAazti5a42/cYq18O3AOlhrqLoMT X75g== X-Gm-Message-State: AOAM531fjbI6lOc0Jgn/BTCcc9q5NwHaT4bDNGsbhYDjcQ823zxY+ozl i3gnBPGV17i3yMjlZUc3IQ3FeQ== X-Google-Smtp-Source: ABdhPJyDlpDSVpVu1N09tMEOqxkFe4O3N+iJsTDqX3RHJnowuSGE5lN3K984fU/+VcRjPp2l8w3iHQ== X-Received: by 2002:a02:a807:: with SMTP id f7mr10354015jaj.54.1617939425856; Thu, 08 Apr 2021 20:37:05 -0700 (PDT) Received: from pryzbyj.telsasoft (charmander.telsasoft.com. [50.244.222.1]) by smtp.gmail.com with ESMTPSA id m1sm660292ilh.69.2021.04.08.20.37.04 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Apr 2021 20:37:05 -0700 (PDT) Received: by pryzbyj.telsasoft (Postfix, from userid 1000) id 310CE801860; Thu, 8 Apr 2021 22:37:04 -0500 (CDT) Date: Thu, 8 Apr 2021 22:37:04 -0500 From: Justin Pryzby To: Thomas Munro Cc: Tomas Vondra , Stephen Frost , Andres Freund , Jakub Wartak , Alvaro Herrera , Tomas Vondra , Dmitry Dolgov <9erthalion6@gmail.com>, David Steele , pgsql-hackers@postgresql.org Subject: Re: WIP: WAL prefetch (another approach) Message-ID: <20210409033703.GP6592@telsasoft.com> References: <20210213213930.GM27507@tamriel.snowman.net> <20210214231815.GO27507@tamriel.snowman.net> <17b3f450-048c-f3a6-7086-259523f33cbc@enterprisedb.com> <20210317214331.GF20766@tamriel.snowman.net> <28c3352e-5388-6410-aae7-05907079e6c9@enterprisedb.com> <8dd2dcc2-0b6b-a4ab-c1b3-032c0a5ab1c3@enterprisedb.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Here's some little language fixes. BTW, before beginning "recovery", PG syncs all the data dirs. This can be slow, and it seems like the slowness is frequently due to file metadata. For example, that's an obvious consequence of an OS crash, after which the page cache is empty. I've made a habit of running find /zfs -ls |wc to pre-warm it, which can take a little bit, but then the recovery process starts moments later. I don't have any timing measurements, but I expect that starting to stat() all data files as soon as possible would be a win. commit cc9707de333fe8242607cde9f777beadc68dbf04 Author: Justin Pryzby Date: Thu Apr 8 10:43:14 2021 -0500 WIP: doc review: Optionally prefetch referenced data in recovery. 1d257577e08d3e598011d6850fd1025858de8c8c diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index bc4a8b2279..139dee7aa2 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3621,7 +3621,7 @@ include_dir 'conf.d' pool after that. However, on file systems with a block size larger than PostgreSQL's, prefetching can avoid a - costly read-before-write when a blocks are later written. + costly read-before-write when blocks are later written. The default is off. diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 24cf567ee2..36e00c92c2 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -816,9 +816,7 @@ prefetching mechanism is most likely to be effective on systems with full_page_writes set to off (where that is safe), and where the working - set is larger than RAM. By default, prefetching in recovery is enabled - on operating systems that have posix_fadvise - support. + set is larger than RAM. By default, prefetching in recovery is disabled. diff --git a/src/backend/access/transam/xlogprefetch.c b/src/backend/access/transam/xlogprefetch.c index 28764326bc..363c079964 100644 --- a/src/backend/access/transam/xlogprefetch.c +++ b/src/backend/access/transam/xlogprefetch.c @@ -31,7 +31,7 @@ * stall; this is counted with "skip_fpw". * * The only way we currently have to know that an I/O initiated with - * PrefetchSharedBuffer() has that recovery will eventually call ReadBuffer(), + * PrefetchSharedBuffer() has that recovery will eventually call ReadBuffer(), XXX: what ?? * and perform a synchronous read. Therefore, we track the number of * potentially in-flight I/Os by using a circular buffer of LSNs. When it's * full, we have to wait for recovery to replay records so that the queue @@ -660,7 +660,7 @@ XLogPrefetcherScanBlocks(XLogPrefetcher *prefetcher) /* * I/O has possibly been initiated (though we don't know if it was * already cached by the kernel, so we just have to assume that it - * has due to lack of better information). Record this as an I/O + * was due to lack of better information). Record this as an I/O * in progress until eventually we replay this LSN. */ XLogPrefetchIncrement(&SharedStats->prefetch); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 090abdad8b..8c72ba1f1a 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2774,7 +2774,7 @@ static struct config_int ConfigureNamesInt[] = { {"wal_decode_buffer_size", PGC_POSTMASTER, WAL_ARCHIVE_RECOVERY, gettext_noop("Maximum buffer size for reading ahead in the WAL during recovery."), - gettext_noop("This controls the maximum distance we can read ahead n the WAL to prefetch referenced blocks."), + gettext_noop("This controls the maximum distance we can read ahead in the WAL to prefetch referenced blocks."), GUC_UNIT_BYTE }, &wal_decode_buffer_size,