On Mon, 2003-11-03 at 01:07, Neil Conway wrote:
> (1) As Manfred originally noted, when we advance to a new XLOG segment,
> we can use POSIX_FADV_DONTNEED to let the kernel know we won't be
> accessing the old WAL segment anymore. I've attached a quick kludge of a
> patch that implements this. I haven't done any benchmarking of it yet,
> though (comments or benchmark results are welcome).
Woops, the patch is attached.
-Neil
Index: src/backend/access/transam/xlog.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/transam/xlog.c,v
retrieving revision 1.125
diff -c -r1.125 xlog.c
*** src/backend/access/transam/xlog.c 27 Sep 2003 18:16:35 -0000 1.125
--- src/backend/access/transam/xlog.c 3 Nov 2003 02:46:57 -0000
***************
*** 1043,1048 ****
--- 1043,1060 ----
*/
if (openLogFile >= 0)
{
+ /*
+ * Let the kernel know that we're not going to need
+ * this WAL segment anymore, so there's no need to
+ * keep it in the I/O cache
+ */
+ if (posix_fadvise(openLogFile, 0, 0, POSIX_FADV_DONTNEED) != 0)
+ {
+ ereport(WARNING,
+ (errcode_for_file_access(),
+ errmsg("could not posix_fadvise() log file %u: %m", openLogId)));
+ }
+
if (close(openLogFile) != 0)
ereport(PANIC,
(errcode_for_file_access(),
***************
*** 1159,1164 ****
--- 1171,1188 ----
if (openLogFile >= 0 &&
!XLByteInPrevSeg(LogwrtResult.Write, openLogId, openLogSeg))
{
+ /*
+ * Let the kernel know that we're not going to need
+ * this WAL segment anymore, so there's no need to
+ * keep it in the I/O cache
+ */
+ if (posix_fadvise(openLogFile, 0, 0, POSIX_FADV_DONTNEED) != 0)
+ {
+ ereport(WARNING,
+ (errcode_for_file_access(),
+ errmsg("could not posix_fadvise() log file %u: %m", openLogId)));
+ }
+
if (close(openLogFile) != 0)
ereport(PANIC,
(errcode_for_file_access(),
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
http://archives.postgresql.org