git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: da87253)
When invoked with -i (initialize mode), split the copy command every
Wed, 1 Aug 2001 01:08:17 +0000 (01:08 +0000)
Wed, 1 Aug 2001 01:08:17 +0000 (01:08 +0000)
10000 tuples, rather than one big copy. This will prevent generating
too much WAL logs.


diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index bdbabded5b27bcb42e4c9dbef319a9e396307074..eadc57bdf3251b7aac9f496834270b9c51969abb 100644 (file)
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -1,5 +1,5 @@
/*
- * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.8 2001年02月10日 02:31:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.9 2001年08月01日 01:08:17 ishii Exp $
*
* pgbench: a simple TPC-B like benchmark program for PostgreSQL
* written by Tatsuo Ishii
@@ -417,45 +417,68 @@ init(char *pghost, char *pgport, char *dbName)
PQclear(res);
}
- res = PQexec(con, "copy accounts from stdin");
- if (PQresultStatus(res) != PGRES_COPY_IN)
+ res = PQexec(con, "end");
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "%s", PQerrorMessage(con));
exit(1);
}
- PQclear(res);
+
+ /*
+ * occupy accounts table with some data
+ */
fprintf(stderr, "creating tables...\n");
for (i = 0; i < naccounts * tps; i++)
{
int j = i + 1;
- sprintf(sql, "%d\t%d\t%d\t\n", i + 1, (i + 1) / naccounts, 0);
+ if (j % 10000 == 1)
+ {
+ res = PQexec(con, "copy accounts from stdin");
+ if (PQresultStatus(res) != PGRES_COPY_IN)
+ {
+ fprintf(stderr, "%s", PQerrorMessage(con));
+ exit(1);
+ }
+ PQclear(res);
+ }
+
+ sprintf(sql, "%d\t%d\t%d\t\n", j, j / naccounts, 0);
if (PQputline(con, sql))
{
fprintf(stderr, "PQputline failed\n");
exit(1);
}
+
if (j % 10000 == 0)
+ {
+ /*
+ * every 10000 tuples, we commit the copy command.
+ * this should avoid generating too much WAL logs
+ */
fprintf(stderr, "%d tuples done.\n", j);
- }
- if (PQputline(con, "\\.\n"))
- {
- fprintf(stderr, "very last PQputline failed\n");
- exit(1);
- }
-
- if (PQendcopy(con))
- {
- fprintf(stderr, "PQendcopy failed\n");
- exit(1);
- }
+ if (PQputline(con, "\\.\n"))
+ {
+ fprintf(stderr, "very last PQputline failed\n");
+ exit(1);
+ }
- res = PQexec(con, "end");
- if (PQresultStatus(res) != PGRES_COMMAND_OK)
- {
- fprintf(stderr, "%s", PQerrorMessage(con));
- exit(1);
+ if (PQendcopy(con))
+ {
+ fprintf(stderr, "PQendcopy failed\n");
+ exit(1);
+ }
+ /*
+ * do a checkpoint to purge the old WAL logs
+ */
+ res = PQexec(con, "checkpoint");
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ {
+ fprintf(stderr, "%s", PQerrorMessage(con));
+ exit(1);
+ }
+ }
}
/* vacuum */
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /