Re: Get bytes sent to client - Mailing list pgsql-jdbc
From | Alexander Pyhalov |
---|---|
Subject | Re: Get bytes sent to client |
Date | |
Msg-id | 4B2B228C.8070008@rsu.ru Whole thread Raw |
In response to | Re: Get bytes sent to client (Craig Ringer <craig@postnewspapers.com.au>) |
Responses |
Re: Get bytes sent to client
|
List | pgsql-jdbc |
I've made patch for Postgres JDBC driver. Now driver accounts bytes sent/received from client ing PGStream. I hope I didn't miss anything. I made several tests. tcpdump shows about 10% overhead, but results are quite similar. I think that overhead is caused by auxiliary data (packets' headers and so on). Craig Ringer wrote: > On 17/12/2009 12:56 AM, Alexander Pyhalov wrote: >> Hello. >> Thanks for answer. I used dumpster in my tests. However, executing >> system tools from lava is not a brilliant idea. And I have to collect >> this statistics dynamically at runtime :( > > It sounds like you'll need to modify the JDBC driver to add the hooks > you need, then. > > Perhaps if you can raise it with the JDBC folks (wherever they hang out) > and talk it over first, you might be able to produce a patch that > doesn't affect people who don't use the feature, so they might accept > into the main JDBC driver. > > -- > Craig Ringer -- С уважением, Александр Пыхалов, системный администратор ЮГИНФО ЮФУ. diff -ur postgresql-jdbc-8.4-701.src/org/postgresql/core/BaseConnection.java postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/BaseConnection.java --- postgresql-jdbc-8.4-701.src/org/postgresql/core/BaseConnection.java 2008-04-15 08:23:54.000000000 +0400 +++ postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/BaseConnection.java 2009-12-17 21:47:47.000000000 +0300 @@ -139,4 +139,8 @@ // Get the bind-string-as-varchar config flag public boolean getStringVarcharFlag(); + + public int getRecvdBytes(); + + public int getSentBytes(); } diff -ur postgresql-jdbc-8.4-701.src/org/postgresql/core/PGStream.java postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/PGStream.java --- postgresql-jdbc-8.4-701.src/org/postgresql/core/PGStream.java 2008-01-08 09:56:27.000000000 +0300 +++ postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/PGStream.java 2009-12-17 21:31:00.000000000 +0300 @@ -46,6 +46,8 @@ private Encoding encoding; private Writer encodingWriter; + protected int sentBytes; + protected int recvdBytes; /** * Constructor: Connect to the PostgreSQL back end and return * a stream connection. @@ -56,6 +58,7 @@ */ public PGStream(String host, int port) throws IOException { + sentBytes=recvdBytes=0; this.host = host; this.port = port; @@ -78,6 +81,15 @@ return connection; } + public int getSentBytes() + { + return sentBytes; + } + + public int getRecvdBytes() + { + return recvdBytes; + } /** * Check for pending backend messages without blocking. * Might return false when there actually are messages @@ -172,6 +184,7 @@ public void SendChar(int val) throws IOException { pg_output.write(val); + sentBytes+=1; } /** @@ -187,6 +200,7 @@ _int4buf[2] = (byte)(val >>> 8); _int4buf[3] = (byte)(val); pg_output.write(_int4buf); + sentBytes+=4; } /** @@ -203,6 +217,7 @@ _int2buf[0] = (byte)(val >>> 8); _int2buf[1] = (byte)val; pg_output.write(_int2buf); + sentBytes+=2; } /** @@ -214,6 +229,7 @@ public void Send(byte buf[]) throws IOException { pg_output.write(buf); + sentBytes+=buf.length; } /** @@ -246,6 +262,7 @@ { pg_output.write(0); } + sentBytes+= siz; } /** @@ -259,6 +276,7 @@ int c = pg_input.read(); if (c < 0) throw new EOFException(); + recvdBytes++; return c; } @@ -272,7 +290,7 @@ { if (pg_input.read(_int4buf) != 4) throw new EOFException(); - + recvdBytes+=4; return (_int4buf[0] & 0xFF) << 24 | (_int4buf[1] & 0xFF) << 16 | (_int4buf[2] & 0xFF) << 8 | _int4buf[3] & 0xFF; } @@ -286,7 +304,7 @@ { if (pg_input.read(_int2buf) != 2) throw new EOFException(); - + recvdBytes+=2; return (_int2buf[0] & 0xFF) << 8 | _int2buf[1] & 0xFF; } @@ -304,6 +322,7 @@ String res = encoding.decode(pg_input.getBuffer(), pg_input.getIndex(), len); pg_input.skip(len); + recvdBytes+=len; return res; } @@ -320,6 +339,7 @@ String res = encoding.decode(pg_input.getBuffer(), pg_input.getIndex(), len - 1); pg_input.skip(len); + recvdBytes+=len; return res; } @@ -447,6 +467,7 @@ throw new EOFException(); s += w; } + recvdBytes+=siz; } public void Skip(int size) throws IOException { @@ -454,6 +475,7 @@ while (s < size) { s += pg_input.skip(size - s); } + recvdBytes+=size; } diff -ur postgresql-jdbc-8.4-701.src/org/postgresql/core/ProtocolConnection.java postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/ProtocolConnection.java --- postgresql-jdbc-8.4-701.src/org/postgresql/core/ProtocolConnection.java 2008-01-08 09:56:27.000000000 +0300 +++ postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/ProtocolConnection.java 2009-12-17 21:48:01.000000000 +0300 @@ -132,4 +132,8 @@ * @return the version of the implementation */ public int getProtocolVersion(); + + public int getRecvdBytes(); + + public int getSentBytes(); } diff -ur postgresql-jdbc-8.4-701.src/org/postgresql/core/v2/ProtocolConnectionImpl.java postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/v2/ProtocolConnectionImpl.java --- postgresql-jdbc-8.4-701.src/org/postgresql/core/v2/ProtocolConnectionImpl.java 2008-04-01 11:19:20.000000000 +0400 +++ postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/v2/ProtocolConnectionImpl.java 2009-12-17 21:49:51.000000000+0300 @@ -218,4 +218,18 @@ private final String database; private final QueryExecutorImpl executor; private final Logger logger; + + public int getRecvdBytes() { + if(pgStream==null) + return 0; + else + return pgStream.getRecvdBytes(); + } + + public int getSentBytes() { + if(pgStream==null) + return 0; + else + return pgStream.getSentBytes(); + } } diff -ur postgresql-jdbc-8.4-701.src/org/postgresql/core/v3/ProtocolConnectionImpl.java postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/v3/ProtocolConnectionImpl.java --- postgresql-jdbc-8.4-701.src/org/postgresql/core/v3/ProtocolConnectionImpl.java 2008-04-01 11:19:20.000000000 +0400 +++ postgresql-jdbc-8.4-701.src_modified/org/postgresql/core/v3/ProtocolConnectionImpl.java 2009-12-17 21:50:21.000000000+0300 @@ -200,6 +200,20 @@ return 3; } + public int getRecvdBytes() { + if(pgStream==null) + return 0; + else + return pgStream.getRecvdBytes(); + } + + public int getSentBytes() { + if(pgStream==null) + return 0; + else + return pgStream.getSentBytes(); + } + private String serverVersion; private int cancelPid; private int cancelKey; diff -ur postgresql-jdbc-8.4-701.src/org/postgresql/jdbc2/AbstractJdbc2Connection.java postgresql-jdbc-8.4-701.src_modified/org/postgresql/jdbc2/AbstractJdbc2Connection.java --- postgresql-jdbc-8.4-701.src/org/postgresql/jdbc2/AbstractJdbc2Connection.java 2009-07-01 09:00:40.000000000 +0400 +++ postgresql-jdbc-8.4-701.src_modified/org/postgresql/jdbc2/AbstractJdbc2Connection.java 2009-12-17 21:52:26.000000000+0300 @@ -1068,4 +1068,18 @@ copyManager = new CopyManager(this); return copyManager; } + + public int getRecvdBytes() { + if(protoConnection==null) + return 0; + else + return protoConnection.getRecvdBytes(); + } + + public int getSentBytes() { + if(protoConnection==null) + return 0; + else + return protoConnection.getSentBytes(); + } }
pgsql-jdbc by date: