Add GUC log_temp_files to log the use of temporary files.
authorBruce Momjian <bruce@momjian.us>
Tue, 9 Jan 2007 21:31:17 +0000 (21:31 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 9 Jan 2007 21:31:17 +0000 (21:31 +0000)
Bill Moran

doc/src/sgml/config.sgml
src/backend/storage/file/fd.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/include/utils/guc.h

index 7c02d90f2e8269a176161c72640a97fde2c9a057..068a85f27bde7c8df12c2b625291f9107c0c3436 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.99 2006/12/12 21:30:33 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.100 2007/01/09 21:31:14 momjian Exp $ -->
 
 <chapter Id="runtime-config">
   <title>Server Configuration</title>
@@ -2920,6 +2920,23 @@ SELECT * FROM parent WHERE key = 2400;
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-log-temp-files" xreflabel="log_temp_files">
+      <term><varname>log_temp_files</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>log_temp_files</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Controls whether temporary files are logged when deleted.
+        A value of zero logs all temporary files, and positive
+        values log only files whose size is equal or greater than
+        the specified number of bytes.  Temporary files can be
+        created for sorts, hashes, and temporary results.  The
+        default is <literal>-1</> (off).
+       </para>
+      </listitem>
+     </varlistentry>
+
      </variablelist>
     </sect2>
    </sect1>
index 693c2e80141ca088690a95d28558ece5b70166c6..a485189f1ea8689c9566cbc507fd75896b1037b8 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/file/fd.c,v 1.132 2007/01/05 22:19:37 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/file/fd.c,v 1.133 2007/01/09 21:31:14 momjian Exp $
  *
  * NOTES:
  *
@@ -50,6 +50,7 @@
 #include "access/xact.h"
 #include "storage/fd.h"
 #include "storage/ipc.h"
+#include "utils/guc.h"
 
 
 /*
@@ -938,7 +939,8 @@ OpenTemporaryFile(bool interXact)
 void
 FileClose(File file)
 {
-       Vfd                *vfdP;
+       Vfd                     *vfdP;
+       struct stat     filestats;
 
        Assert(FileIsValid(file));
 
@@ -968,6 +970,19 @@ FileClose(File file)
        {
                /* reset flag so that die() interrupt won't cause problems */
                vfdP->fdstate &= ~FD_TEMPORARY;
+               PG_TRACE1(temp__file__cleanup, vfdP->fileName);
+               if (log_temp_files >= 0)
+               {
+                       if (stat(vfdP->fileName, &filestats) == 0)
+                       {
+                               if (filestats.st_size >= log_temp_files)
+                                       ereport(LOG,
+                                               (errmsg("temp file: path \"%s\" size %lu",
+                                                vfdP->fileName, (unsigned long)filestats.st_size)));
+                       }
+                       else
+                               elog(LOG, "Could not stat \"%s\": %m", vfdP->fileName);
+               }
                if (unlink(vfdP->fileName))
                        elog(LOG, "failed to unlink \"%s\": %m",
                                 vfdP->fileName);
index e2ad24f7f4fa11b8623ca5817f1ed0e4cedd1286..4d4ef07d2c7db8c0c0aed267bcdb4ea91de731db 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.365 2007/01/05 22:19:46 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.366 2007/01/09 21:31:14 momjian Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -182,6 +182,7 @@ int                 log_min_error_statement = ERROR;
 int                    log_min_messages = NOTICE;
 int                    client_min_messages = NOTICE;
 int                    log_min_duration_statement = -1;
+int                    log_temp_files = -1;
 
 int                    num_temp_buffers = 1000;
 
@@ -1660,6 +1661,16 @@ static struct config_int ConfigureNamesInt[] =
                &server_version_num,
                PG_VERSION_NUM, PG_VERSION_NUM, PG_VERSION_NUM, NULL, NULL
        },
+                               
+       {
+               {"log_temp_files", PGC_USERSET, LOGGING_WHAT,
+                       gettext_noop("Log the use of temporary files larger than this size."),
+                       gettext_noop("Zero logs all files. The default is -1 (turning this feature off)."),
+                       NULL
+               },
+               &log_temp_files,
+               -1, -1, INT_MAX, NULL, NULL
+       },
 
        /* End-of-list marker */
        {
index 196cae54a367923f96597e7257c81fa36d1cf5dd..989126477d1c7bc7426e939455c489a34f34959c 100644 (file)
 #log_statement = 'none'                        # none, ddl, mod, all
 #log_hostname = off
 
+#log_temp_files = -1                   # Log temporary files equal or larger
+                                       # than the specified number of bytes.  
+                                       # -1 disables;  0 logs all temp files
 
 #---------------------------------------------------------------------------
 # RUNTIME STATISTICS
index e1fc64e8689e0b01479c6cdafa62c7e1faed10f7..d324d66c22a84f1be388f8b60615047d9d11e5fe 100644 (file)
@@ -7,7 +7,7 @@
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
- * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.77 2007/01/05 22:19:59 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.78 2007/01/09 21:31:17 momjian Exp $
  *--------------------------------------------------------------------
  */
 #ifndef GUC_H
@@ -123,6 +123,7 @@ extern int  log_min_error_statement;
 extern int     log_min_messages;
 extern int     client_min_messages;
 extern int     log_min_duration_statement;
+extern int     log_temp_files;
 
 extern int     num_temp_buffers;