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.
This commit is contained in:
Tatsuo Ishii 2001-08-01 01:08:17 +00:00
parent da872534ac
commit b332dc358b

View File

@ -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 * pgbench: a simple TPC-B like benchmark program for PostgreSQL
* written by Tatsuo Ishii * written by Tatsuo Ishii
@ -417,6 +417,24 @@ init(char *pghost, char *pgport, char *dbName)
PQclear(res); PQclear(res);
} }
res = PQexec(con, "end");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "%s", PQerrorMessage(con));
exit(1);
}
/*
* occupy accounts table with some data
*/
fprintf(stderr, "creating tables...\n");
for (i = 0; i < naccounts * tps; i++)
{
int j = i + 1;
if (j % 10000 == 1)
{
res = PQexec(con, "copy accounts from stdin"); res = PQexec(con, "copy accounts from stdin");
if (PQresultStatus(res) != PGRES_COPY_IN) if (PQresultStatus(res) != PGRES_COPY_IN)
{ {
@ -424,21 +442,22 @@ init(char *pghost, char *pgport, char *dbName)
exit(1); exit(1);
} }
PQclear(res); PQclear(res);
}
fprintf(stderr, "creating tables...\n"); sprintf(sql, "%d\t%d\t%d\t\n", j, j / naccounts, 0);
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 (PQputline(con, sql)) if (PQputline(con, sql))
{ {
fprintf(stderr, "PQputline failed\n"); fprintf(stderr, "PQputline failed\n");
exit(1); exit(1);
} }
if (j % 10000 == 0) 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); fprintf(stderr, "%d tuples done.\n", j);
}
if (PQputline(con, "\\.\n")) if (PQputline(con, "\\.\n"))
{ {
fprintf(stderr, "very last PQputline failed\n"); fprintf(stderr, "very last PQputline failed\n");
@ -450,13 +469,17 @@ init(char *pghost, char *pgport, char *dbName)
fprintf(stderr, "PQendcopy failed\n"); fprintf(stderr, "PQendcopy failed\n");
exit(1); exit(1);
} }
/*
res = PQexec(con, "end"); * do a checkpoint to purge the old WAL logs
*/
res = PQexec(con, "checkpoint");
if (PQresultStatus(res) != PGRES_COMMAND_OK) if (PQresultStatus(res) != PGRES_COMMAND_OK)
{ {
fprintf(stderr, "%s", PQerrorMessage(con)); fprintf(stderr, "%s", PQerrorMessage(con));
exit(1); exit(1);
} }
}
}
/* vacuum */ /* vacuum */
fprintf(stderr, "vacuum..."); fprintf(stderr, "vacuum...");