aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-11-04 17:55:15 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-11-04 17:55:15 +0000
commit69500b05d6adb77d73fd5867f74167f17a608e3e (patch)
tree666c005e3ef0791bbb2613a1221bee745d4e221d
parenta2899ebdc28080eab0f4bb0b8a5f30aa7bb31a89 (diff)
downloadpostgresql-69500b05d6adb77d73fd5867f74167f17a608e3e.tar.gz
postgresql-69500b05d6adb77d73fd5867f74167f17a608e3e.zip
Prevent continuing disk-space bloat when profiling (with PROFILE_PID_DIR
enabled) and autovacuum is on. Since there will be a steady stream of autovac worker processes exiting and dropping gmon.out files, allowing them to make separate subdirectories results in serious bloat; and it seems unlikely that anyone will care about those profiles anyway. Limit the damage by forcing all autovac workers to dump in one subdirectory, PGDATA/gprof/avworker/. Per report from Jšrg Beyer and subsequent discussion.
-rw-r--r--src/backend/storage/ipc/ipc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c
index e2f398d2e45..8f32e36301c 100644
--- a/src/backend/storage/ipc/ipc.c
+++ b/src/backend/storage/ipc/ipc.c
@@ -13,7 +13,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/ipc/ipc.c,v 1.97 2007/07/25 19:58:56 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/ipc/ipc.c,v 1.98 2007/11/04 17:55:15 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -24,6 +24,9 @@
#include <sys/stat.h>
#include "miscadmin.h"
+#ifdef PROFILE_PID_DIR
+#include "postmaster/autovacuum.h"
+#endif
#include "storage/ipc.h"
@@ -126,6 +129,11 @@ proc_exit(int code)
* $PGDATA/gprof/8845/gmon.out
* ...
*
+ * To avoid undesirable disk space bloat, autovacuum workers are
+ * discriminated against: all their gmon.out files go into the same
+ * subdirectory. Without this, an installation that is "just sitting
+ * there" nonetheless eats megabytes of disk space every few seconds.
+ *
* Note that we do this here instead of in an on_proc_exit()
* callback because we want to ensure that this code executes
* last - we don't want to interfere with any other on_proc_exit()
@@ -133,7 +141,10 @@ proc_exit(int code)
*/
char gprofDirName[32];
- snprintf(gprofDirName, 32, "gprof/%d", (int) getpid());
+ if (IsAutoVacuumWorkerProcess())
+ snprintf(gprofDirName, 32, "gprof/avworker");
+ else
+ snprintf(gprofDirName, 32, "gprof/%d", (int) getpid());
mkdir("gprof", 0777);
mkdir(gprofDirName, 0777);