Re: [HACKERS] Open 6.5 items - Mailing list pgsql-hackers

From Tatsuo Ishii
Subject Re: [HACKERS] Open 6.5 items
Date
Msg-id 199906010847.RAA12672@srapc451.sra.co.jp
Whole thread Raw
List pgsql-hackers
[forwarded to hackers list]

>> Bingo! Your fix seems to solve the problem! Now 64 concurrent
>> transactions ran 100 transactions each without any problem. Thanks.  ~~~~~~~~~~~~users
>> 
>> BTW, the script I'm using for the heavy load testing is written in
>> Java(not written by me). Do you want to try it?
>
>I am doing some benchmarks and would really appreciate if you could
>let me have your Java routines.

It's "JDBCBench" available from:

http://www.worldserver.com/mm.mysql/performance/

Seems it is originally made for MySQL, can be used with PostgreSQL and
other commercial dbms including Oracle, however.

I like it since it:

o automatically creates test data
o simulates heavy loads with the specified number of users and transactions per user from the command line

I noticed minor bugs with JDBCBench 1.0. Also I added begin/end so
that the set of operations are performed in a transaction. Here are
diffs: (please make sure that the file is in Unix format. seems the
original file is in DOS format.)

*** JDBCBench.java.orig    Tue Jun  1 17:31:11 1999
--- JDBCBench.java    Tue Jun  1 17:32:04 1999
***************
*** 18,24 ****     public final static int TELLER  = 0;     public final static int BRANCH  = 1;     public final
staticint ACCOUNT = 2;
 
!              private Connection Conn = null;
--- 18,24 ----     public final static int TELLER  = 0;     public final static int BRANCH  = 1;     public final
staticint ACCOUNT = 2;
 
!   static String DBUrl = "";             private Connection Conn = null;
***************
*** 40,46 ****     public static void main(String[] Args)     {       String DriverName = "";
!       String DBUrl = "";       boolean initialize_dataset = false;              for (int i = 0; i < Args.length; i++)
{
--- 40,46 ----     public static void main(String[] Args)     {       String DriverName = "";
!        boolean initialize_dataset = false;              for (int i = 0; i < Args.length; i++) {
***************
*** 286,291 ****
--- 286,299 ----                  public void run()         {
+       Connection myC = null;
+       try {
+         myC = DriverManager.getConnection(DBUrl);
+       }
+       catch (Exception E) {
+         System.out.println(E.getMessage());
+         E.printStackTrace();
+       }             while (ntrans-- > 0) {                                  int account =
JDBCBench.getRandomID(ACCOUNT);
***************
*** 293,299 ****                 int teller  = JDBCBench.getRandomID(TELLER);                 int delta   =
JDBCBench.getRandomInt(0,1000);                
 
!                 doOne(account, branch, teller, delta);                 incrementTransactionCount();             }
       reportDone();
 
--- 301,307 ----                 int teller  = JDBCBench.getRandomID(TELLER);                 int delta   =
JDBCBench.getRandomInt(0,1000);                
 
!                 doOne(myC, account, branch, teller, delta);                 incrementTransactionCount();
}            reportDone();
 
***************
*** 303,320 ****          *  doOne() - Executes a single TPC BM B transaction.          */     
!         int doOne(int bid, int tid, int aid, int delta)         {             try {
!                 Statement Stmt = Conn.createStatement();                 
!                 String Query = "UPDATE accounts ";                        Query+= "SET     Abalance = Abalance + " +
delta+ " ";                        Query+= "WHERE   Aid = " + aid;
Stmt.executeUpdate(Query);                Stmt.clearWarnings();
 
!                                         Query = "SELECT Abalance ";                 Query+= "FROM   accounts ";
         Query+= "WHERE  Aid = " + aid;
 
--- 311,334 ----          *  doOne() - Executes a single TPC BM B transaction.          */     
!         int doOne(Connection myC, int aid, int bid, int tid, int delta)         {
+       int aBalance = 0;             try {
!           String Query;
!                 Statement Stmt = myC.createStatement();                 
!                 Stmt.executeUpdate("begin");
!                 Stmt.clearWarnings();
! 
!                 Query = "UPDATE accounts ";                        Query+= "SET     Abalance = Abalance + " + delta +
"";                        Query+= "WHERE   Aid = " + aid;
Stmt.executeUpdate(Query);                Stmt.clearWarnings();
 
! 
!                  Query = "SELECT Abalance ";                 Query+= "FROM   accounts ";                 Query+=
"WHERE Aid = " + aid;
 
***************
*** 322,333 ****                 ResultSet RS = Stmt.executeQuery(Query);                 Stmt.clearWarnings();
       
 
!                 int aBalance = 0;                                  while (RS.next()) {                     aBalance =
RS.getInt(1);                }
 
!                          Query = "UPDATE tellers ";                 Query+= "SET    Tbalance = Tbalance + " + delta +
"";                 Query+= "WHERE  Tid = " + tid;
 
--- 336,348 ----                 ResultSet RS = Stmt.executeQuery(Query);                 Stmt.clearWarnings();
       
 
!                 aBalance = 0;                 
+                  while (RS.next()) {                     aBalance = RS.getInt(1);                 }
!                  Query = "UPDATE tellers ";                 Query+= "SET    Tbalance = Tbalance + " + delta + " ";
            Query+= "WHERE  Tid = " + tid;
 
***************
*** 350,355 ****
--- 365,373 ----                 Query+= delta + ")";                                  Stmt.executeUpdate(Query);
+                 Stmt.clearWarnings();
+ 
+                 Stmt.executeUpdate("end");                 Stmt.clearWarnings();                          return
aBalance;


pgsql-hackers by date:

Previous
From: Theo Kramer
Date:
Subject: Re: [HACKERS] please?
Next
From: Vadim Mikheev
Date:
Subject: LOCKTAG updated -> gmake clean is required