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  (Frank Seesink <frank@mail.wvnet.edu>)
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:

Previous
From: Tom Lane
Date:
Subject: Re: [ADMIN] INITDB-error - end-of-copy marker error
Next
From: Patrick Samson
Date:
Subject: Successful migration from Cygipc to Cygserver