From b332dc358b2260ed610137c36ca6a284060acdaf Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii <ishii@postgresql.org> Date: Wed, 1 Aug 2001 01:08:17 +0000 Subject: [PATCH] When invoked with -i (initialize mode), split the copy command every 10000 tuples, rather than one big copy. This will prevent generating too much WAL logs. --- contrib/pgbench/pgbench.c | 67 ++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index bdbabded5b2..eadc57bdf32 100644 --- 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 */ -- GitLab