How to measure time - Mailing list pgsql-cygwin
| From | fsantini@freesurf.ch |
|---|---|
| Subject | How to measure time |
| Date | |
| Msg-id | 409AC66A00003592@mta-fs-be-02.sunrise.ch Whole thread Raw |
| Responses |
Re: How to measure time
|
| List | pgsql-cygwin |
Hi!
I wanted to measure the time for how long
PostreSQL would take to fulfill a query
under Windows2000, so I installed
Cygwin, G++ and libpqxx.
Once I let the test run (I don't get any error
message), I receive different results with
significant differences.
Sometimes I get for the query 0.0 milliseconds, another
time 1.16e-23 milliseconds and the third option is
16 milliseconds.
However, when I let the query run in pgAdmin III
I get about 96 seconds?!
My question is how can I measure the time for a query
effectively? Where do I make the error?
Below is my source code.
Thank you very much.
Fernando Santini
/*
* PostGreSQL -> SQBM
*/
#include <stdio.h>
#include <libpq-fe.h>
#include <iostream>
#include <all.h>
#include <time.h>
using namespace pqxx;
void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
main()
{
char *pghost,
*pgport,
*pgoptions,
*pgtty;
char *dbName;
int nFields;
int i,
j;
double time1=0.0;
double tstart;
/* FILE *debug; */
PGconn *conn;
PGresult *res;
pghost = NULL;
pgport = NULL;
pgoptions = NULL;
pgtty = NULL;
dbName = "tpch";
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName); /* Connection
to database */
if (PQstatus(conn) == CONNECTION_BAD) /*Connection successfully established*/
{
fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
//--------------------------------------------------------------------------------------------------------------
//The interesting part
std::cout << "--------------------------------------------------------"<<std::endl;
std::cout << " Query 14:" << std::endl;
res = PQexec(conn, "BEGIN");
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
tstart = clock();
/*fetch, select*/
res = PQexec(conn, "select 100.00 * sum(case when ptype like 'PROMO%'
then lextendedprice * (1 - ldiscount) else 0 end) / sum(lextendedprice *
(1 - ldiscount)) as promorevenue from lineitem, part where lpartkey = ppartkey
and lshipdate >= date '1993-11-01' and lshipdate < date '1993-12-01'");
time1 += clock() - tstart;
/* attributes */
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");
/* tuples (selected) */
for (i = 0; i < PQntuples(res); i++)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);
std::cout << " Query 14 zeit = " << time1 << " millisekunden " << std::endl;
time1 = time1/CLOCKS_PER_SEC;
std::cout << " Query 14 zeit = " << time1 << " sekunden " << std::endl;
std::cout << "--------------------------------------------------------"<<std::endl;
/* commit */
res = PQexec(conn, "COMMIT");
PQclear(res);
//--------------------------------------------------------------------------------------------------------------
//The interesting part
PQfinish(conn);
return 0;
}
ADSL - Gratis und so sicher wie noch nie
http://internet.sunrise.ch/de/internet/int_ads.asp
pgsql-cygwin by date: