Обсуждение: About binaryTransfer.

Поиск
Список
Период
Сортировка

About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi,

I have a peformance trouble with 9.3-1100 driver.
Running same application(*) with 9.2-1004 and 9.3-1100,
It does another behavior.
(*) Retrieving 9990 rows with preparedStatement.

9.2-1004:
Always flags = 16.
----
14:09:55.730 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@8232a5d,
maxRows=0, fetchSize=0, flags=16
14:09:55.878 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@34e671de,
maxRows=0, fetchSize=0, flags=16
----

9.3-1100
Repeatedly flags = 48 and 16.
The count of "flags=16" is same with 9.2-1004, so
"flags=48" is extra executing.
----
14:20:34.991 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@19cdbc83,
maxRows=0, fetchSize=0, flags=48
14:20:34.992 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@304b0cbc,
maxRows=0, fetchSize=0, flags=16
----

This change has caused by below commit.
https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f

It seems that binarytransfer mode is good at dealing with
big-data(many columns?many rows?), but some packets are
sent/received for this function, right?

I want to make 9.3-1100 driver do old behavior like 9.2-1004.
What can I do ?

regards,
----------------
Tomonari Katsumata




Re: About binaryTransfer.

От
Mikko Tiihonen
Дата:
Before the patch the functionality was (if binaryTransfer=true):
- prepared statements after prepareThreshold were done in binary mode
- forceBinary=true could be enabled to force all statements (prepared + one-shot) to be executed in binary mode (at
costof extra round-trip) 

After the patch in question (if binaryTransfer=true):
- All prepared statements have extra round-trip before on first use and are immediately in binary mode
- forceBinary=true can be enabled to force also one-shot statements to be executed in binary mode (at cost of extra
round-trip)

Since there are users that use prepared statements in one-shot way (prepare+execute+discard) the patch adds a mandatory
extraround-trip for them. 

As a side note: the forceBinary is meant only as a debug flag (used for example in pgjdbc tests), not for production
use.

So the only thing the before-state could not do was to use binary transfers for the first prepared statement execution.
Thisis because setting prepareThreshold=0 disables the prepare instead of preparing before first use. 

I propose we revert that patch and instead add support for prepareThreshold=-1 which would force prepare+describe to be
doneeven for the first execution. That would allow users to keep controlling the behavior instead of forcing binary
transfersimmediately? 
Alternatively we can separate the binary transfer logic from statement prepare threshold and add a separate
binaryThreshold.

-Mikko
________________________________________
From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.org> on behalf of Tomonari Katsumata
<katsumata.tomonari@po.ntts.co.jp>
Sent: 21 February 2014 08:40
To: pgsql-jdbc@postgresql.org
Subject: [JDBC] About binaryTransfer.

Hi,

I have a peformance trouble with 9.3-1100 driver.
Running same application(*) with 9.2-1004 and 9.3-1100,
It does another behavior.
(*) Retrieving 9990 rows with preparedStatement.

9.2-1004:
Always flags = 16.
----
14:09:55.730 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@8232a5d,
maxRows=0, fetchSize=0, flags=16
14:09:55.878 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@34e671de,
maxRows=0, fetchSize=0, flags=16
----

9.3-1100
Repeatedly flags = 48 and 16.
The count of "flags=16" is same with 9.2-1004, so
"flags=48" is extra executing.
----
14:20:34.991 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@19cdbc83,
maxRows=0, fetchSize=0, flags=48
14:20:34.992 (1) simple execute,
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@304b0cbc,
maxRows=0, fetchSize=0, flags=16
----

This change has caused by below commit.
https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f

It seems that binarytransfer mode is good at dealing with
big-data(many columns?many rows?), but some packets are
sent/received for this function, right?

I want to make 9.3-1100 driver do old behavior like 9.2-1004.
What can I do ?

regards,
----------------
Tomonari Katsumata




--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc


Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Mikko,

Thank you for the explanation.

I agree with your proposal adding prepareThreshold=-1.

If there are no objection, I'll do for it!

regards,
----------------
Tomonari Katsumata

(2014/02/21 16:50), Mikko Tiihonen wrote:
 > Before the patch the functionality was (if binaryTransfer=true):
 > - prepared statements after prepareThreshold were done in binary mode
 > - forceBinary=true could be enabled to force all statements (prepared
+ one-shot) to be executed in binary mode (at cost of extra round-trip)
 >
 > After the patch in question (if binaryTransfer=true):
 > - All prepared statements have extra round-trip before on first use
and are immediately in binary mode
 > - forceBinary=true can be enabled to force also one-shot statements
to be executed in binary mode (at cost of extra round-trip)
 >
 > Since there are users that use prepared statements in one-shot way
(prepare+execute+discard) the patch adds a mandatory extra round-trip
for them.
 >
 > As a side note: the forceBinary is meant only as a debug flag (used
for example in pgjdbc tests), not for production use.
 >
 > So the only thing the before-state could not do was to use binary
transfers for the first prepared statement execution. This is because
setting prepareThreshold=0 disables the prepare instead of preparing
before first use.
 >
 > I propose we revert that patch and instead add support for
prepareThreshold=-1 which would force prepare+describe to be done even
for the first execution. That would allow users to keep controlling the
behavior instead of forcing binary transfers immediately?
 > Alternatively we can separate the binary transfer logic from
statement prepare threshold and add a separate binaryThreshold.
 >
 > -Mikko
 > ________________________________________
 > From: pgsql-jdbc-owner@postgresql.org
<pgsql-jdbc-owner@postgresql.org> on behalf of Tomonari Katsumata
<katsumata.tomonari@po.ntts.co.jp>
 > Sent: 21 February 2014 08:40
 > To: pgsql-jdbc@postgresql.org
 > Subject: [JDBC] About binaryTransfer.
 >
 > Hi,
 >
 > I have a peformance trouble with 9.3-1100 driver.
 > Running same application(*) with 9.2-1004 and 9.3-1100,
 > It does another behavior.
 > (*) Retrieving 9990 rows with preparedStatement.
 >
 > 9.2-1004:
 > Always flags = 16.
 > ----
 > 14:09:55.730 (1) simple execute,
 >
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@8232a5d,
 > maxRows=0, fetchSize=0, flags=16
 > 14:09:55.878 (1) simple execute,
 >
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@34e671de,
 > maxRows=0, fetchSize=0, flags=16
 > ----
 >
 > 9.3-1100
 > Repeatedly flags = 48 and 16.
 > The count of "flags=16" is same with 9.2-1004, so
 > "flags=48" is extra executing.
 > ----
 > 14:20:34.991 (1) simple execute,
 >
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@19cdbc83,
 > maxRows=0, fetchSize=0, flags=48
 > 14:20:34.992 (1) simple execute,
 >
handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@304b0cbc,
 > maxRows=0, fetchSize=0, flags=16
 > ----
 >
 > This change has caused by below commit.
 >
https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f
 >
 > It seems that binarytransfer mode is good at dealing with
 > big-data(many columns?many rows?), but some packets are
 > sent/received for this function, right?
 >
 > I want to make 9.3-1100 driver do old behavior like 9.2-1004.
 > What can I do ?
 >
 > regards,
 > ----------------
 > Tomonari Katsumata
 >
 >
 >
 >
 > --
 > Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 > To make changes to your subscription:
 > http://www.postgresql.org/mailpref/pgsql-jdbc
 >
 >




Re: About binaryTransfer.

От
Dave Cramer
Дата:
Please submit a Pull Request

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Mikko,

Thank you for the explanation.

I agree with your proposal adding prepareThreshold=-1.

If there are no objection, I'll do for it!

regards,
----------------
Tomonari Katsumata


(2014/02/21 16:50), Mikko Tiihonen wrote:
> Before the patch the functionality was (if binaryTransfer=true):
> - prepared statements after prepareThreshold were done in binary mode
> - forceBinary=true could be enabled to force all statements (prepared + one-shot) to be executed in binary mode (at cost of extra round-trip)
>
> After the patch in question (if binaryTransfer=true):
> - All prepared statements have extra round-trip before on first use and are immediately in binary mode
> - forceBinary=true can be enabled to force also one-shot statements to be executed in binary mode (at cost of extra round-trip)
>
> Since there are users that use prepared statements in one-shot way (prepare+execute+discard) the patch adds a mandatory extra round-trip for them.
>
> As a side note: the forceBinary is meant only as a debug flag (used for example in pgjdbc tests), not for production use.
>
> So the only thing the before-state could not do was to use binary transfers for the first prepared statement execution. This is because setting prepareThreshold=0 disables the prepare instead of preparing before first use.
>
> I propose we revert that patch and instead add support for prepareThreshold=-1 which would force prepare+describe to be done even for the first execution. That would allow users to keep controlling the behavior instead of forcing binary transfers immediately?
> Alternatively we can separate the binary transfer logic from statement prepare threshold and add a separate binaryThreshold.
>
> -Mikko
> ________________________________________
> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.org> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
> Sent: 21 February 2014 08:40
> To: pgsql-jdbc@postgresql.org
> Subject: [JDBC] About binaryTransfer.
>
> Hi,
>
> I have a peformance trouble with 9.3-1100 driver.
> Running same application(*) with 9.2-1004 and 9.3-1100,
> It does another behavior.
> (*) Retrieving 9990 rows with preparedStatement.
>
> 9.2-1004:
> Always flags = 16.
> ----
> 14:09:55.730 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@8232a5d,
> maxRows=0, fetchSize=0, flags=16
> 14:09:55.878 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@34e671de,
> maxRows=0, fetchSize=0, flags=16
> ----
>
> 9.3-1100
> Repeatedly flags = 48 and 16.
> The count of "flags=16" is same with 9.2-1004, so
> "flags=48" is extra executing.
> ----
> 14:20:34.991 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@19cdbc83,
> maxRows=0, fetchSize=0, flags=48
> 14:20:34.992 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@304b0cbc,
> maxRows=0, fetchSize=0, flags=16
> ----
>
> This change has caused by below commit.
> https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f
>
> It seems that binarytransfer mode is good at dealing with
> big-data(many columns?many rows?), but some packets are
> sent/received for this function, right?
>
> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
> What can I do ?
>
> regards,
> ----------------
> Tomonari Katsumata
>
>
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>
>




--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc

Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,
I sent a Pull Request about this.
https://github.com/pgjdbc/pgjdbc/pull/124

regards,
-------------------
Tomonari Katsumata


2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
Please submit a Pull Request

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Mikko,

Thank you for the explanation.

I agree with your proposal adding prepareThreshold=-1.

If there are no objection, I'll do for it!

regards,
----------------
Tomonari Katsumata


(2014/02/21 16:50), Mikko Tiihonen wrote:
> Before the patch the functionality was (if binaryTransfer=true):
> - prepared statements after prepareThreshold were done in binary mode
> - forceBinary=true could be enabled to force all statements (prepared + one-shot) to be executed in binary mode (at cost of extra round-trip)
>
> After the patch in question (if binaryTransfer=true):
> - All prepared statements have extra round-trip before on first use and are immediately in binary mode
> - forceBinary=true can be enabled to force also one-shot statements to be executed in binary mode (at cost of extra round-trip)
>
> Since there are users that use prepared statements in one-shot way (prepare+execute+discard) the patch adds a mandatory extra round-trip for them.
>
> As a side note: the forceBinary is meant only as a debug flag (used for example in pgjdbc tests), not for production use.
>
> So the only thing the before-state could not do was to use binary transfers for the first prepared statement execution. This is because setting prepareThreshold=0 disables the prepare instead of preparing before first use.
>
> I propose we revert that patch and instead add support for prepareThreshold=-1 which would force prepare+describe to be done even for the first execution. That would allow users to keep controlling the behavior instead of forcing binary transfers immediately?
> Alternatively we can separate the binary transfer logic from statement prepare threshold and add a separate binaryThreshold.
>
> -Mikko
> ________________________________________
> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.org> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
> Sent: 21 February 2014 08:40
> To: pgsql-jdbc@postgresql.org
> Subject: [JDBC] About binaryTransfer.
>
> Hi,
>
> I have a peformance trouble with 9.3-1100 driver.
> Running same application(*) with 9.2-1004 and 9.3-1100,
> It does another behavior.
> (*) Retrieving 9990 rows with preparedStatement.
>
> 9.2-1004:
> Always flags = 16.
> ----
> 14:09:55.730 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@8232a5d,
> maxRows=0, fetchSize=0, flags=16
> 14:09:55.878 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@34e671de,
> maxRows=0, fetchSize=0, flags=16
> ----
>
> 9.3-1100
> Repeatedly flags = 48 and 16.
> The count of "flags=16" is same with 9.2-1004, so
> "flags=48" is extra executing.
> ----
> 14:20:34.991 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@19cdbc83,
> maxRows=0, fetchSize=0, flags=48
> 14:20:34.992 (1) simple execute,
> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler@304b0cbc,
> maxRows=0, fetchSize=0, flags=16
> ----
>
> This change has caused by below commit.
> https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f
>
> It seems that binarytransfer mode is good at dealing with
> big-data(many columns?many rows?), but some packets are
> sent/received for this function, right?
>
> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
> What can I do ?
>
> regards,
> ----------------
> Tomonari Katsumata
>
>
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>
>




--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc


Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,

I've misunderstood the behavior of this problem.
The main problem is that the Describe message is send/receive
repeatedly, if user don't want to do so.

The pull-request I've sent before(#124) didn't solve the problem.

Now, I fixed it and sent a new pull-request.
https://github.com/pgjdbc/pgjdbc/pull/128

Please check it!

regards,
----------------------
Tomonari Katsumata

(2014/02/23 9:34), Tomonari Katsumata wrote:
 > Hi Dave,
 > I sent a Pull Request about this.
 > https://github.com/pgjdbc/pgjdbc/pull/124
 >
 > regards,
 > -------------------
 > Tomonari Katsumata
 >
 >
 > 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
 >
 >> Please submit a Pull Request
 >>
 >> Dave Cramer
 >>
 >> dave.cramer(at)credativ(dot)ca
 >> http://www.credativ.ca
 >>
 >>
 >> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
 >> katsumata.tomonari@po.ntts.co.jp> wrote:
 >>
 >>> Hi Mikko,
 >>>
 >>> Thank you for the explanation.
 >>>
 >>> I agree with your proposal adding prepareThreshold=-1.
 >>>
 >>> If there are no objection, I'll do for it!
 >>>
 >>> regards,
 >>> ----------------
 >>> Tomonari Katsumata
 >>>
 >>>
 >>> (2014/02/21 16:50), Mikko Tiihonen wrote:
 >>>> Before the patch the functionality was (if binaryTransfer=true):
 >>>> - prepared statements after prepareThreshold were done in binary mode
 >>>> - forceBinary=true could be enabled to force all statements
(prepared +
 >>> one-shot) to be executed in binary mode (at cost of extra round-trip)
 >>>>
 >>>> After the patch in question (if binaryTransfer=true):
 >>>> - All prepared statements have extra round-trip before on first
use and
 >>> are immediately in binary mode
 >>>> - forceBinary=true can be enabled to force also one-shot statements to
 >>> be executed in binary mode (at cost of extra round-trip)
 >>>>
 >>>> Since there are users that use prepared statements in one-shot way
 >>> (prepare+execute+discard) the patch adds a mandatory extra
round-trip for
 >>> them.
 >>>>
 >>>> As a side note: the forceBinary is meant only as a debug flag
(used for
 >>> example in pgjdbc tests), not for production use.
 >>>>
 >>>> So the only thing the before-state could not do was to use binary
 >>> transfers for the first prepared statement execution. This is because
 >>> setting prepareThreshold=0 disables the prepare instead of
preparing before
 >>> first use.
 >>>>
 >>>> I propose we revert that patch and instead add support for
 >>> prepareThreshold=-1 which would force prepare+describe to be done
even for
 >>> the first execution. That would allow users to keep controlling the
 >>> behavior instead of forcing binary transfers immediately?
 >>>> Alternatively we can separate the binary transfer logic from statement
 >>> prepare threshold and add a separate binaryThreshold.
 >>>>
 >>>> -Mikko
 >>>> ________________________________________
 >>>> From: pgsql-jdbc-owner@postgresql.org
<pgsql-jdbc-owner@postgresql.org>
 >>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
 >>>> Sent: 21 February 2014 08:40
 >>>> To: pgsql-jdbc@postgresql.org
 >>>> Subject: [JDBC] About binaryTransfer.
 >>>>
 >>>> Hi,
 >>>>
 >>>> I have a peformance trouble with 9.3-1100 driver.
 >>>> Running same application(*) with 9.2-1004 and 9.3-1100,
 >>>> It does another behavior.
 >>>> (*) Retrieving 9990 rows with preparedStatement.
 >>>>
 >>>> 9.2-1004:
 >>>> Always flags = 16.
 >>>> ----
 >>>> 14:09:55.730 (1) simple execute,
 >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>> StatementResultHandler@8232a5d,
 >>>> maxRows=0, fetchSize=0, flags=16
 >>>> 14:09:55.878 (1) simple execute,
 >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>> StatementResultHandler@34e671de,
 >>>> maxRows=0, fetchSize=0, flags=16
 >>>> ----
 >>>>
 >>>> 9.3-1100
 >>>> Repeatedly flags = 48 and 16.
 >>>> The count of "flags=16" is same with 9.2-1004, so
 >>>> "flags=48" is extra executing.
 >>>> ----
 >>>> 14:20:34.991 (1) simple execute,
 >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>> StatementResultHandler@19cdbc83,
 >>>> maxRows=0, fetchSize=0, flags=48
 >>>> 14:20:34.992 (1) simple execute,
 >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>> StatementResultHandler@304b0cbc,
 >>>> maxRows=0, fetchSize=0, flags=16
 >>>> ----
 >>>>
 >>>> This change has caused by below commit.
 >>>> https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1
 >>> d061e1e43f
 >>>>
 >>>> It seems that binarytransfer mode is good at dealing with
 >>>> big-data(many columns?many rows?), but some packets are
 >>>> sent/received for this function, right?
 >>>>
 >>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
 >>>> What can I do ?
 >>>>
 >>>> regards,
 >>>> ----------------
 >>>> Tomonari Katsumata
 >>>>
 >>>>
 >>>>
 >>>>
 >>>> --
 >>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>>> To make changes to your subscription:
 >>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>
 >>>>
 >>>
 >>>
 >>>
 >>>
 >>> --
 >>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>> To make changes to your subscription:
 >>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>
 >>
 >>
 >




Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,

Did you check my pull-request?
https://github.com/pgjdbc/pgjdbc/pull/128

I don't want to use 9.2-1004 Driver, because it has some bugs
about setQueryTimeout fixed by Heikki(*).
(*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com

So I need the PostgreSQL Driver 9.3-1101 have good performance
like 9.2-1004 as soon as possible.

Could you check it please?
If I'm missing something, please tell me it!

regards,
------------------------
Tomonari Katsumata


(2014/03/06 18:13), Tomonari Katsumata wrote:
 > Hi Dave,
 >
 > I've misunderstood the behavior of this problem.
 > The main problem is that the Describe message is send/receive
 > repeatedly, if user don't want to do so.
 >
 > The pull-request I've sent before(#124) didn't solve the problem.
 >
 > Now, I fixed it and sent a new pull-request.
 > https://github.com/pgjdbc/pgjdbc/pull/128
 >
 > Please check it!
 >
 > regards,
 > ----------------------
 > Tomonari Katsumata
 >
 > (2014/02/23 9:34), Tomonari Katsumata wrote:
 > > Hi Dave,
 > > I sent a Pull Request about this.
 > > https://github.com/pgjdbc/pgjdbc/pull/124
 > >
 > > regards,
 > > -------------------
 > > Tomonari Katsumata
 > >
 > >
 > > 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
 > >
 > >> Please submit a Pull Request
 > >>
 > >> Dave Cramer
 > >>
 > >> dave.cramer(at)credativ(dot)ca
 > >> http://www.credativ.ca
 > >>
 > >>
 > >> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
 > >> katsumata.tomonari@po.ntts.co.jp> wrote:
 > >>
 > >>> Hi Mikko,
 > >>>
 > >>> Thank you for the explanation.
 > >>>
 > >>> I agree with your proposal adding prepareThreshold=-1.
 > >>>
 > >>> If there are no objection, I'll do for it!
 > >>>
 > >>> regards,
 > >>> ----------------
 > >>> Tomonari Katsumata
 > >>>
 > >>>
 > >>> (2014/02/21 16:50), Mikko Tiihonen wrote:
 > >>>> Before the patch the functionality was (if binaryTransfer=true):
 > >>>> - prepared statements after prepareThreshold were done in binary
mode
 > >>>> - forceBinary=true could be enabled to force all statements
(prepared +
 > >>> one-shot) to be executed in binary mode (at cost of extra round-trip)
 > >>>>
 > >>>> After the patch in question (if binaryTransfer=true):
 > >>>> - All prepared statements have extra round-trip before on first
use and
 > >>> are immediately in binary mode
 > >>>> - forceBinary=true can be enabled to force also one-shot
statements to
 > >>> be executed in binary mode (at cost of extra round-trip)
 > >>>>
 > >>>> Since there are users that use prepared statements in one-shot way
 > >>> (prepare+execute+discard) the patch adds a mandatory extra
round-trip for
 > >>> them.
 > >>>>
 > >>>> As a side note: the forceBinary is meant only as a debug flag
(used for
 > >>> example in pgjdbc tests), not for production use.
 > >>>>
 > >>>> So the only thing the before-state could not do was to use binary
 > >>> transfers for the first prepared statement execution. This is because
 > >>> setting prepareThreshold=0 disables the prepare instead of
preparing before
 > >>> first use.
 > >>>>
 > >>>> I propose we revert that patch and instead add support for
 > >>> prepareThreshold=-1 which would force prepare+describe to be done
even for
 > >>> the first execution. That would allow users to keep controlling the
 > >>> behavior instead of forcing binary transfers immediately?
 > >>>> Alternatively we can separate the binary transfer logic from
statement
 > >>> prepare threshold and add a separate binaryThreshold.
 > >>>>
 > >>>> -Mikko
 > >>>> ________________________________________
 > >>>> From: pgsql-jdbc-owner@postgresql.org
<pgsql-jdbc-owner@postgresql.org>
 > >>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
 > >>>> Sent: 21 February 2014 08:40
 > >>>> To: pgsql-jdbc@postgresql.org
 > >>>> Subject: [JDBC] About binaryTransfer.
 > >>>>
 > >>>> Hi,
 > >>>>
 > >>>> I have a peformance trouble with 9.3-1100 driver.
 > >>>> Running same application(*) with 9.2-1004 and 9.3-1100,
 > >>>> It does another behavior.
 > >>>> (*) Retrieving 9990 rows with preparedStatement.
 > >>>>
 > >>>> 9.2-1004:
 > >>>> Always flags = 16.
 > >>>> ----
 > >>>> 14:09:55.730 (1) simple execute,
 > >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 > >>> StatementResultHandler@8232a5d,
 > >>>> maxRows=0, fetchSize=0, flags=16
 > >>>> 14:09:55.878 (1) simple execute,
 > >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 > >>> StatementResultHandler@34e671de,
 > >>>> maxRows=0, fetchSize=0, flags=16
 > >>>> ----
 > >>>>
 > >>>> 9.3-1100
 > >>>> Repeatedly flags = 48 and 16.
 > >>>> The count of "flags=16" is same with 9.2-1004, so
 > >>>> "flags=48" is extra executing.
 > >>>> ----
 > >>>> 14:20:34.991 (1) simple execute,
 > >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 > >>> StatementResultHandler@19cdbc83,
 > >>>> maxRows=0, fetchSize=0, flags=48
 > >>>> 14:20:34.992 (1) simple execute,
 > >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 > >>> StatementResultHandler@304b0cbc,
 > >>>> maxRows=0, fetchSize=0, flags=16
 > >>>> ----
 > >>>>
 > >>>> This change has caused by below commit.
 > >>>>
https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1
 > >>> d061e1e43f
 > >>>>
 > >>>> It seems that binarytransfer mode is good at dealing with
 > >>>> big-data(many columns?many rows?), but some packets are
 > >>>> sent/received for this function, right?
 > >>>>
 > >>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
 > >>>> What can I do ?
 > >>>>
 > >>>> regards,
 > >>>> ----------------
 > >>>> Tomonari Katsumata
 > >>>>
 > >>>>
 > >>>>
 > >>>>
 > >>>> --
 > >>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 > >>>> To make changes to your subscription:
 > >>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 > >>>>
 > >>>>
 > >>>
 > >>>
 > >>>
 > >>>
 > >>> --
 > >>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 > >>> To make changes to your subscription:
 > >>> http://www.postgresql.org/mailpref/pgsql-jdbc
 > >>>
 > >>
 > >>
 > >
 >
 >
 >




Re: About binaryTransfer.

От
Dave Cramer
Дата:
Tomonari,

I pulled this into master. I'm not quite sure I want this back patched into 9.3 though. This is new behaviour.



Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 3 April 2014 04:37, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Dave,

Did you check my pull-request?
https://github.com/pgjdbc/pgjdbc/pull/128

I don't want to use 9.2-1004 Driver, because it has some bugs
about setQueryTimeout fixed by Heikki(*).
(*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com

So I need the PostgreSQL Driver 9.3-1101 have good performance
like 9.2-1004 as soon as possible.

Could you check it please?
If I'm missing something, please tell me it!

regards,
------------------------
Tomonari Katsumata


(2014/03/06 18:13), Tomonari Katsumata wrote:
> Hi Dave,
>
> I've misunderstood the behavior of this problem.
> The main problem is that the Describe message is send/receive
> repeatedly, if user don't want to do so.
>
> The pull-request I've sent before(#124) didn't solve the problem.
>
> Now, I fixed it and sent a new pull-request.
> https://github.com/pgjdbc/pgjdbc/pull/128
>
> Please check it!
>
> regards,
> ----------------------
> Tomonari Katsumata

>
> (2014/02/23 9:34), Tomonari Katsumata wrote:
> > Hi Dave,
> > I sent a Pull Request about this.
> > https://github.com/pgjdbc/pgjdbc/pull/124
> >
> > regards,
> > -------------------
> > Tomonari Katsumata
> >
> >
> > 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
> >
> >> Please submit a Pull Request
> >>
> >> Dave Cramer
> >>
> >> dave.cramer(at)credativ(dot)ca
> >> http://www.credativ.ca
> >>
> >>
> >> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
> >> katsumata.tomonari@po.ntts.co.jp> wrote:
> >>
> >>> Hi Mikko,
> >>>
> >>> Thank you for the explanation.
> >>>
> >>> I agree with your proposal adding prepareThreshold=-1.
> >>>
> >>> If there are no objection, I'll do for it!
> >>>
> >>> regards,
> >>> ----------------
> >>> Tomonari Katsumata
> >>>
> >>>
> >>> (2014/02/21 16:50), Mikko Tiihonen wrote:
> >>>> Before the patch the functionality was (if binaryTransfer=true):
> >>>> - prepared statements after prepareThreshold were done in binary mode
> >>>> - forceBinary=true could be enabled to force all statements (prepared +
> >>> one-shot) to be executed in binary mode (at cost of extra round-trip)
> >>>>
> >>>> After the patch in question (if binaryTransfer=true):
> >>>> - All prepared statements have extra round-trip before on first use and
> >>> are immediately in binary mode
> >>>> - forceBinary=true can be enabled to force also one-shot statements to
> >>> be executed in binary mode (at cost of extra round-trip)
> >>>>
> >>>> Since there are users that use prepared statements in one-shot way
> >>> (prepare+execute+discard) the patch adds a mandatory extra round-trip for
> >>> them.
> >>>>
> >>>> As a side note: the forceBinary is meant only as a debug flag (used for
> >>> example in pgjdbc tests), not for production use.
> >>>>
> >>>> So the only thing the before-state could not do was to use binary
> >>> transfers for the first prepared statement execution. This is because
> >>> setting prepareThreshold=0 disables the prepare instead of preparing before
> >>> first use.
> >>>>
> >>>> I propose we revert that patch and instead add support for
> >>> prepareThreshold=-1 which would force prepare+describe to be done even for
> >>> the first execution. That would allow users to keep controlling the
> >>> behavior instead of forcing binary transfers immediately?
> >>>> Alternatively we can separate the binary transfer logic from statement
> >>> prepare threshold and add a separate binaryThreshold.
> >>>>
> >>>> -Mikko
> >>>> ________________________________________
> >>>> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.org>
> >>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
> >>>> Sent: 21 February 2014 08:40
> >>>> To: pgsql-jdbc@postgresql.org
> >>>> Subject: [JDBC] About binaryTransfer.
> >>>>
> >>>> Hi,
> >>>>
> >>>> I have a peformance trouble with 9.3-1100 driver.
> >>>> Running same application(*) with 9.2-1004 and 9.3-1100,
> >>>> It does another behavior.
> >>>> (*) Retrieving 9990 rows with preparedStatement.
> >>>>
> >>>> 9.2-1004:
> >>>> Always flags = 16.
> >>>> ----
> >>>> 14:09:55.730 (1) simple execute,
> >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
> >>> StatementResultHandler@8232a5d,
> >>>> maxRows=0, fetchSize=0, flags=16
> >>>> 14:09:55.878 (1) simple execute,
> >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
> >>> StatementResultHandler@34e671de,
> >>>> maxRows=0, fetchSize=0, flags=16
> >>>> ----
> >>>>
> >>>> 9.3-1100
> >>>> Repeatedly flags = 48 and 16.
> >>>> The count of "flags=16" is same with 9.2-1004, so
> >>>> "flags=48" is extra executing.
> >>>> ----
> >>>> 14:20:34.991 (1) simple execute,
> >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
> >>> StatementResultHandler@19cdbc83,
> >>>> maxRows=0, fetchSize=0, flags=48
> >>>> 14:20:34.992 (1) simple execute,
> >>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
> >>> StatementResultHandler@304b0cbc,
> >>>> maxRows=0, fetchSize=0, flags=16
> >>>> ----
> >>>>
> >>>> This change has caused by below commit.
> >>>> https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1
> >>> d061e1e43f
> >>>>
> >>>> It seems that binarytransfer mode is good at dealing with
> >>>> big-data(many columns?many rows?), but some packets are
> >>>> sent/received for this function, right?
> >>>>
> >>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
> >>>> What can I do ?
> >>>>
> >>>> regards,
> >>>> ----------------
> >>>> Tomonari Katsumata
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> >>>> To make changes to your subscription:
> >>>> http://www.postgresql.org/mailpref/pgsql-jdbc
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> >>> To make changes to your subscription:
> >>> http://www.postgresql.org/mailpref/pgsql-jdbc
> >>>
> >>
> >>
> >
>
>
>



Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,

 > I pulled this into master.
 >
Thanks for merging my fix against master!

 > I'm not quite sure I want this back patched into
 > 9.3 though. This is new behaviour.
 >
I think the original change(*) was done for rare case.
But this change would cause a performance issue
in many cases like me.

So I want this fix into 9.3.
If we cannot do so, we should revert
the original change(*) at least.
(*)https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f

regards,
---------------
Tomonari Katsumata

 >
 >
 > Dave Cramer
 >
 > dave.cramer(at)credativ(dot)ca
 > http://www.credativ.ca
 >
 >
 > On 3 April 2014 04:37, Tomonari Katsumata
 > <katsumata.tomonari@po.ntts.co.jp>wrote:
 >
 >> Hi Dave,
 >>
 >> Did you check my pull-request?
 >> https://github.com/pgjdbc/pgjdbc/pull/128
 >>
 >> I don't want to use 9.2-1004 Driver, because it has some bugs
 >> about setQueryTimeout fixed by Heikki(*).
 >> (*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
 >>
 >> So I need the PostgreSQL Driver 9.3-1101 have good performance
 >> like 9.2-1004 as soon as possible.
 >>
 >> Could you check it please?
 >> If I'm missing something, please tell me it!
 >>
 >> regards,
 >> ------------------------
 >> Tomonari Katsumata
 >>
 >>
 >> (2014/03/06 18:13), Tomonari Katsumata wrote:
 >>> Hi Dave,
 >>>
 >>> I've misunderstood the behavior of this problem.
 >>> The main problem is that the Describe message is send/receive
 >>> repeatedly, if user don't want to do so.
 >>>
 >>> The pull-request I've sent before(#124) didn't solve the problem.
 >>>
 >>> Now, I fixed it and sent a new pull-request.
 >>> https://github.com/pgjdbc/pgjdbc/pull/128
 >>>
 >>> Please check it!
 >>>
 >>> regards,
 >>> ----------------------
 >>> Tomonari Katsumata
 >>
 >>>
 >>> (2014/02/23 9:34), Tomonari Katsumata wrote:
 >>>> Hi Dave,
 >>>> I sent a Pull Request about this.
 >>>> https://github.com/pgjdbc/pgjdbc/pull/124
 >>>>
 >>>> regards,
 >>>> -------------------
 >>>> Tomonari Katsumata
 >>>>
 >>>>
 >>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
 >>>>
 >>>>> Please submit a Pull Request
 >>>>>
 >>>>> Dave Cramer
 >>>>>
 >>>>> dave.cramer(at)credativ(dot)ca
 >>>>> http://www.credativ.ca
 >>>>>
 >>>>>
 >>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
 >>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
 >>>>>
 >>>>>> Hi Mikko,
 >>>>>>
 >>>>>> Thank you for the explanation.
 >>>>>>
 >>>>>> I agree with your proposal adding prepareThreshold=-1.
 >>>>>>
 >>>>>> If there are no objection, I'll do for it!
 >>>>>>
 >>>>>> regards,
 >>>>>> ----------------
 >>>>>> Tomonari Katsumata
 >>>>>>
 >>>>>>
 >>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
 >>>>>>> Before the patch the functionality was (if binaryTransfer=true):
 >>>>>>> - prepared statements after prepareThreshold were done in binary
 >> mode
 >>>>>>> - forceBinary=true could be enabled to force all statements
 >> (prepared +
 >>>>>> one-shot) to be executed in binary mode (at cost of extra
round-trip)
 >>>>>>>
 >>>>>>> After the patch in question (if binaryTransfer=true):
 >>>>>>> - All prepared statements have extra round-trip before on first use
 >> and
 >>>>>> are immediately in binary mode
 >>>>>>> - forceBinary=true can be enabled to force also one-shot statements
 >> to
 >>>>>> be executed in binary mode (at cost of extra round-trip)
 >>>>>>>
 >>>>>>> Since there are users that use prepared statements in one-shot way
 >>>>>> (prepare+execute+discard) the patch adds a mandatory extra
 >> round-trip for
 >>>>>> them.
 >>>>>>>
 >>>>>>> As a side note: the forceBinary is meant only as a debug flag (used
 >> for
 >>>>>> example in pgjdbc tests), not for production use.
 >>>>>>>
 >>>>>>> So the only thing the before-state could not do was to use binary
 >>>>>> transfers for the first prepared statement execution. This is
because
 >>>>>> setting prepareThreshold=0 disables the prepare instead of preparing
 >> before
 >>>>>> first use.
 >>>>>>>
 >>>>>>> I propose we revert that patch and instead add support for
 >>>>>> prepareThreshold=-1 which would force prepare+describe to be done
 >> even for
 >>>>>> the first execution. That would allow users to keep controlling the
 >>>>>> behavior instead of forcing binary transfers immediately?
 >>>>>>> Alternatively we can separate the binary transfer logic from
 >> statement
 >>>>>> prepare threshold and add a separate binaryThreshold.
 >>>>>>>
 >>>>>>> -Mikko
 >>>>>>> ________________________________________
 >>>>>>> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.
 >> org>
 >>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
 >>>>>>> Sent: 21 February 2014 08:40
 >>>>>>> To: pgsql-jdbc@postgresql.org
 >>>>>>> Subject: [JDBC] About binaryTransfer.
 >>>>>>>
 >>>>>>> Hi,
 >>>>>>>
 >>>>>>> I have a peformance trouble with 9.3-1100 driver.
 >>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
 >>>>>>> It does another behavior.
 >>>>>>> (*) Retrieving 9990 rows with preparedStatement.
 >>>>>>>
 >>>>>>> 9.2-1004:
 >>>>>>> Always flags = 16.
 >>>>>>> ----
 >>>>>>> 14:09:55.730 (1) simple execute,
 >>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>> StatementResultHandler@8232a5d,
 >>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>> 14:09:55.878 (1) simple execute,
 >>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>> StatementResultHandler@34e671de,
 >>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>> ----
 >>>>>>>
 >>>>>>> 9.3-1100
 >>>>>>> Repeatedly flags = 48 and 16.
 >>>>>>> The count of "flags=16" is same with 9.2-1004, so
 >>>>>>> "flags=48" is extra executing.
 >>>>>>> ----
 >>>>>>> 14:20:34.991 (1) simple execute,
 >>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>> StatementResultHandler@19cdbc83,
 >>>>>>> maxRows=0, fetchSize=0, flags=48
 >>>>>>> 14:20:34.992 (1) simple execute,
 >>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>> StatementResultHandler@304b0cbc,
 >>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>> ----
 >>>>>>>
 >>>>>>> This change has caused by below commit.
 >>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
 >> dbf76c2d662896c5703cf20d7362e1
 >>>>>> d061e1e43f
 >>>>>>>
 >>>>>>> It seems that binarytransfer mode is good at dealing with
 >>>>>>> big-data(many columns?many rows?), but some packets are
 >>>>>>> sent/received for this function, right?
 >>>>>>>
 >>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
 >>>>>>> What can I do ?
 >>>>>>>
 >>>>>>> regards,
 >>>>>>> ----------------
 >>>>>>> Tomonari Katsumata
 >>>>>>>
 >>>>>>>
 >>>>>>>
 >>>>>>>
 >>>>>>> --
 >>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>>>>>> To make changes to your subscription:
 >>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>>>>
 >>>>>>>
 >>>>>>
 >>>>>>
 >>>>>>
 >>>>>>
 >>>>>> --
 >>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>>>>> To make changes to your subscription:
 >>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>>>
 >>>>>
 >>>>>
 >>>>
 >>>
 >>>
 >>>
 >>
 >>
 >>
 >





Re: About binaryTransfer.

От
Dave Cramer
Дата:
Tomonari,

So the desired behaviour you want is what? You want the first query to be able to use binary, or not ?

Dave

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 15 April 2014 04:20, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Dave,


> I pulled this into master.
>
Thanks for merging my fix against master!


> I'm not quite sure I want this back patched into
> 9.3 though. This is new behaviour.
>
I think the original change(*) was done for rare case.
But this change would cause a performance issue
in many cases like me.

So I want this fix into 9.3.
If we cannot do so, we should revert
the original change(*) at least.
(*)https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f

regards,
---------------
Tomonari Katsumata


>
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 3 April 2014 04:37, Tomonari Katsumata
> <katsumata.tomonari@po.ntts.co.jp>wrote:
>
>> Hi Dave,
>>
>> Did you check my pull-request?
>> https://github.com/pgjdbc/pgjdbc/pull/128
>>
>> I don't want to use 9.2-1004 Driver, because it has some bugs
>> about setQueryTimeout fixed by Heikki(*).
>> (*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>>
>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>> like 9.2-1004 as soon as possible.
>>
>> Could you check it please?
>> If I'm missing something, please tell me it!
>>
>> regards,
>> ------------------------
>> Tomonari Katsumata
>>
>>
>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>>> Hi Dave,
>>>
>>> I've misunderstood the behavior of this problem.
>>> The main problem is that the Describe message is send/receive
>>> repeatedly, if user don't want to do so.
>>>
>>> The pull-request I've sent before(#124) didn't solve the problem.
>>>
>>> Now, I fixed it and sent a new pull-request.
>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>
>>> Please check it!
>>>
>>> regards,
>>> ----------------------
>>> Tomonari Katsumata
>>
>>>
>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>>>> Hi Dave,
>>>> I sent a Pull Request about this.
>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>>>>
>>>> regards,
>>>> -------------------
>>>> Tomonari Katsumata
>>>>
>>>>
>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>>>>
>>>>> Please submit a Pull Request
>>>>>
>>>>> Dave Cramer
>>>>>
>>>>> dave.cramer(at)credativ(dot)ca
>>>>> http://www.credativ.ca
>>>>>
>>>>>
>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>>>>
>>>>>> Hi Mikko,
>>>>>>
>>>>>> Thank you for the explanation.
>>>>>>
>>>>>> I agree with your proposal adding prepareThreshold=-1.
>>>>>>
>>>>>> If there are no objection, I'll do for it!
>>>>>>
>>>>>> regards,
>>>>>> ----------------
>>>>>> Tomonari Katsumata
>>>>>>
>>>>>>
>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>>>>>>> Before the patch the functionality was (if binaryTransfer=true):
>>>>>>> - prepared statements after prepareThreshold were done in binary
>> mode
>>>>>>> - forceBinary=true could be enabled to force all statements
>> (prepared +
>>>>>> one-shot) to be executed in binary mode (at cost of extra round-trip)
>>>>>>>
>>>>>>> After the patch in question (if binaryTransfer=true):
>>>>>>> - All prepared statements have extra round-trip before on first use
>> and
>>>>>> are immediately in binary mode
>>>>>>> - forceBinary=true can be enabled to force also one-shot statements
>> to
>>>>>> be executed in binary mode (at cost of extra round-trip)
>>>>>>>
>>>>>>> Since there are users that use prepared statements in one-shot way
>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>> round-trip for
>>>>>> them.
>>>>>>>
>>>>>>> As a side note: the forceBinary is meant only as a debug flag (used
>> for
>>>>>> example in pgjdbc tests), not for production use.
>>>>>>>
>>>>>>> So the only thing the before-state could not do was to use binary
>>>>>> transfers for the first prepared statement execution. This is because
>>>>>> setting prepareThreshold=0 disables the prepare instead of preparing
>> before
>>>>>> first use.
>>>>>>>
>>>>>>> I propose we revert that patch and instead add support for
>>>>>> prepareThreshold=-1 which would force prepare+describe to be done
>> even for
>>>>>> the first execution. That would allow users to keep controlling the
>>>>>> behavior instead of forcing binary transfers immediately?
>>>>>>> Alternatively we can separate the binary transfer logic from
>> statement
>>>>>> prepare threshold and add a separate binaryThreshold.
>>>>>>>
>>>>>>> -Mikko
>>>>>>> ________________________________________
>>>>>>> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.
>> org>
>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
>>>>>>> Sent: 21 February 2014 08:40
>>>>>>> To: pgsql-jdbc@postgresql.org
>>>>>>> Subject: [JDBC] About binaryTransfer.
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>>>>>>> It does another behavior.
>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>>>>>>>
>>>>>>> 9.2-1004:
>>>>>>> Always flags = 16.
>>>>>>> ----
>>>>>>> 14:09:55.730 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@8232a5d,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> 14:09:55.878 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@34e671de,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> ----
>>>>>>>
>>>>>>> 9.3-1100
>>>>>>> Repeatedly flags = 48 and 16.
>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>>>>>>> "flags=48" is extra executing.
>>>>>>> ----
>>>>>>> 14:20:34.991 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@19cdbc83,
>>>>>>> maxRows=0, fetchSize=0, flags=48
>>>>>>> 14:20:34.992 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@304b0cbc,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> ----
>>>>>>>
>>>>>>> This change has caused by below commit.
>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>> dbf76c2d662896c5703cf20d7362e1
>>>>>> d061e1e43f
>>>>>>>
>>>>>>> It seems that binarytransfer mode is good at dealing with
>>>>>>> big-data(many columns?many rows?), but some packets are
>>>>>>> sent/received for this function, right?
>>>>>>>
>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>>>>>>> What can I do ?
>>>>>>>
>>>>>>> regards,
>>>>>>> ----------------
>>>>>>> Tomonari Katsumata
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>>> To make changes to your subscription:
>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>> To make changes to your subscription:
>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>




Re: About binaryTransfer.

От
Mikko Tiihonen
Дата:

I think the changes in the driver go like this:


1) initial binary transfer implementation

- first n queries use text and after that binary (no extra round-trips)

- there was a debug flag to enable binary transfers for first query (with the cost of extra round-trip)


2) someone wanted the binary transfers for one-shot operations too

- but modified the code so that the extra driver-server round trip cost is now on _every_ execution of prepared statement


3) tomonari created a patch the fixes the extra round-trip but still allows binary transfers for first query - all configurable


Now the request is to either revert 2) change or apply 3) change. The extra round-trip between each execution is really a killer for many installations.


-Mikko


From: davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave Cramer <pg@fastcrypt.com>
Sent: 15 April 2014 15:34
To: Tomonari Katsumata
Cc: Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
Subject: Re: [JDBC] About binaryTransfer.
 
Tomonari,

So the desired behaviour you want is what? You want the first query to be able to use binary, or not ?

Dave

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 15 April 2014 04:20, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Dave,


> I pulled this into master.
>
Thanks for merging my fix against master!


> I'm not quite sure I want this back patched into
> 9.3 though. This is new behaviour.
>
I think the original change(*) was done for rare case.
But this change would cause a performance issue
in many cases like me.

So I want this fix into 9.3.
If we cannot do so, we should revert
the original change(*) at least.
(*)https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f

regards,
---------------
Tomonari Katsumata


>
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 3 April 2014 04:37, Tomonari Katsumata
> <katsumata.tomonari@po.ntts.co.jp>wrote:
>
>> Hi Dave,
>>
>> Did you check my pull-request?
>> https://github.com/pgjdbc/pgjdbc/pull/128
>>
>> I don't want to use 9.2-1004 Driver, because it has some bugs
>> about setQueryTimeout fixed by Heikki(*).
>> (*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>>
>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>> like 9.2-1004 as soon as possible.
>>
>> Could you check it please?
>> If I'm missing something, please tell me it!
>>
>> regards,
>> ------------------------
>> Tomonari Katsumata
>>
>>
>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>>> Hi Dave,
>>>
>>> I've misunderstood the behavior of this problem.
>>> The main problem is that the Describe message is send/receive
>>> repeatedly, if user don't want to do so.
>>>
>>> The pull-request I've sent before(#124) didn't solve the problem.
>>>
>>> Now, I fixed it and sent a new pull-request.
>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>
>>> Please check it!
>>>
>>> regards,
>>> ----------------------
>>> Tomonari Katsumata
>>
>>>
>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>>>> Hi Dave,
>>>> I sent a Pull Request about this.
>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>>>>
>>>> regards,
>>>> -------------------
>>>> Tomonari Katsumata
>>>>
>>>>
>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>>>>
>>>>> Please submit a Pull Request
>>>>>
>>>>> Dave Cramer
>>>>>
>>>>> dave.cramer(at)credativ(dot)ca
>>>>> http://www.credativ.ca
>>>>>
>>>>>
>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>>>>
>>>>>> Hi Mikko,
>>>>>>
>>>>>> Thank you for the explanation.
>>>>>>
>>>>>> I agree with your proposal adding prepareThreshold=-1.
>>>>>>
>>>>>> If there are no objection, I'll do for it!
>>>>>>
>>>>>> regards,
>>>>>> ----------------
>>>>>> Tomonari Katsumata
>>>>>>
>>>>>>
>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>>>>>>> Before the patch the functionality was (if binaryTransfer=true):
>>>>>>> - prepared statements after prepareThreshold were done in binary
>> mode
>>>>>>> - forceBinary=true could be enabled to force all statements
>> (prepared +
>>>>>> one-shot) to be executed in binary mode (at cost of extra round-trip)
>>>>>>>
>>>>>>> After the patch in question (if binaryTransfer=true):
>>>>>>> - All prepared statements have extra round-trip before on first use
>> and
>>>>>> are immediately in binary mode
>>>>>>> - forceBinary=true can be enabled to force also one-shot statements
>> to
>>>>>> be executed in binary mode (at cost of extra round-trip)
>>>>>>>
>>>>>>> Since there are users that use prepared statements in one-shot way
>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>> round-trip for
>>>>>> them.
>>>>>>>
>>>>>>> As a side note: the forceBinary is meant only as a debug flag (used
>> for
>>>>>> example in pgjdbc tests), not for production use.
>>>>>>>
>>>>>>> So the only thing the before-state could not do was to use binary
>>>>>> transfers for the first prepared statement execution. This is because
>>>>>> setting prepareThreshold=0 disables the prepare instead of preparing
>> before
>>>>>> first use.
>>>>>>>
>>>>>>> I propose we revert that patch and instead add support for
>>>>>> prepareThreshold=-1 which would force prepare+describe to be done
>> even for
>>>>>> the first execution. That would allow users to keep controlling the
>>>>>> behavior instead of forcing binary transfers immediately?
>>>>>>> Alternatively we can separate the binary transfer logic from
>> statement
>>>>>> prepare threshold and add a separate binaryThreshold.
>>>>>>>
>>>>>>> -Mikko
>>>>>>> ________________________________________
>>>>>>> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.
>> org>
>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
>>>>>>> Sent: 21 February 2014 08:40
>>>>>>> To: pgsql-jdbc@postgresql.org
>>>>>>> Subject: [JDBC] About binaryTransfer.
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>>>>>>> It does another behavior.
>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>>>>>>>
>>>>>>> 9.2-1004:
>>>>>>> Always flags = 16.
>>>>>>> ----
>>>>>>> 14:09:55.730 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@8232a5d,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> 14:09:55.878 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@34e671de,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> ----
>>>>>>>
>>>>>>> 9.3-1100
>>>>>>> Repeatedly flags = 48 and 16.
>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>>>>>>> "flags=48" is extra executing.
>>>>>>> ----
>>>>>>> 14:20:34.991 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@19cdbc83,
>>>>>>> maxRows=0, fetchSize=0, flags=48
>>>>>>> 14:20:34.992 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@304b0cbc,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> ----
>>>>>>>
>>>>>>> This change has caused by below commit.
>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>> dbf76c2d662896c5703cf20d7362e1
>>>>>> d061e1e43f
>>>>>>>
>>>>>>> It seems that binarytransfer mode is good at dealing with
>>>>>>> big-data(many columns?many rows?), but some packets are
>>>>>>> sent/received for this function, right?
>>>>>>>
>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>>>>>>> What can I do ?
>>>>>>>
>>>>>>> regards,
>>>>>>> ----------------
>>>>>>> Tomonari Katsumata
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>>> To make changes to your subscription:
>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>> To make changes to your subscription:
>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>




Re: About binaryTransfer.

От
Dave Cramer
Дата:
Mikko,

Thanks for clearing that up.

I think the only problem with Tomonari's patch is some conventions such as Capitalization of the first letter, and the use of a static field in the statement as opposed to a per statement setting



Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@nitorcreations.com> wrote:

I think the changes in the driver go like this:


1) initial binary transfer implementation

- first n queries use text and after that binary (no extra round-trips)

- there was a debug flag to enable binary transfers for first query (with the cost of extra round-trip)


2) someone wanted the binary transfers for one-shot operations too

- but modified the code so that the extra driver-server round trip cost is now on _every_ execution of prepared statement


3) tomonari created a patch the fixes the extra round-trip but still allows binary transfers for first query - all configurable


Now the request is to either revert 2) change or apply 3) change. The extra round-trip between each execution is really a killer for many installations.


-Mikko


From: davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave Cramer <pg@fastcrypt.com>
Sent: 15 April 2014 15:34
To: Tomonari Katsumata
Cc: Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
Subject: Re: [JDBC] About binaryTransfer.
 
Tomonari,

So the desired behaviour you want is what? You want the first query to be able to use binary, or not ?

Dave

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 15 April 2014 04:20, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Dave,


> I pulled this into master.
>
Thanks for merging my fix against master!


> I'm not quite sure I want this back patched into
> 9.3 though. This is new behaviour.
>
I think the original change(*) was done for rare case.
But this change would cause a performance issue
in many cases like me.

So I want this fix into 9.3.
If we cannot do so, we should revert
the original change(*) at least.
(*)https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1d061e1e43f

regards,
---------------
Tomonari Katsumata


>
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 3 April 2014 04:37, Tomonari Katsumata
> <katsumata.tomonari@po.ntts.co.jp>wrote:
>
>> Hi Dave,
>>
>> Did you check my pull-request?
>> https://github.com/pgjdbc/pgjdbc/pull/128
>>
>> I don't want to use 9.2-1004 Driver, because it has some bugs
>> about setQueryTimeout fixed by Heikki(*).
>> (*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>>
>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>> like 9.2-1004 as soon as possible.
>>
>> Could you check it please?
>> If I'm missing something, please tell me it!
>>
>> regards,
>> ------------------------
>> Tomonari Katsumata
>>
>>
>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>>> Hi Dave,
>>>
>>> I've misunderstood the behavior of this problem.
>>> The main problem is that the Describe message is send/receive
>>> repeatedly, if user don't want to do so.
>>>
>>> The pull-request I've sent before(#124) didn't solve the problem.
>>>
>>> Now, I fixed it and sent a new pull-request.
>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>
>>> Please check it!
>>>
>>> regards,
>>> ----------------------
>>> Tomonari Katsumata
>>
>>>
>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>>>> Hi Dave,
>>>> I sent a Pull Request about this.
>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>>>>
>>>> regards,
>>>> -------------------
>>>> Tomonari Katsumata
>>>>
>>>>
>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>>>>
>>>>> Please submit a Pull Request
>>>>>
>>>>> Dave Cramer
>>>>>
>>>>> dave.cramer(at)credativ(dot)ca
>>>>> http://www.credativ.ca
>>>>>
>>>>>
>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>>>>
>>>>>> Hi Mikko,
>>>>>>
>>>>>> Thank you for the explanation.
>>>>>>
>>>>>> I agree with your proposal adding prepareThreshold=-1.
>>>>>>
>>>>>> If there are no objection, I'll do for it!
>>>>>>
>>>>>> regards,
>>>>>> ----------------
>>>>>> Tomonari Katsumata
>>>>>>
>>>>>>
>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>>>>>>> Before the patch the functionality was (if binaryTransfer=true):
>>>>>>> - prepared statements after prepareThreshold were done in binary
>> mode
>>>>>>> - forceBinary=true could be enabled to force all statements
>> (prepared +
>>>>>> one-shot) to be executed in binary mode (at cost of extra round-trip)
>>>>>>>
>>>>>>> After the patch in question (if binaryTransfer=true):
>>>>>>> - All prepared statements have extra round-trip before on first use
>> and
>>>>>> are immediately in binary mode
>>>>>>> - forceBinary=true can be enabled to force also one-shot statements
>> to
>>>>>> be executed in binary mode (at cost of extra round-trip)
>>>>>>>
>>>>>>> Since there are users that use prepared statements in one-shot way
>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>> round-trip for
>>>>>> them.
>>>>>>>
>>>>>>> As a side note: the forceBinary is meant only as a debug flag (used
>> for
>>>>>> example in pgjdbc tests), not for production use.
>>>>>>>
>>>>>>> So the only thing the before-state could not do was to use binary
>>>>>> transfers for the first prepared statement execution. This is because
>>>>>> setting prepareThreshold=0 disables the prepare instead of preparing
>> before
>>>>>> first use.
>>>>>>>
>>>>>>> I propose we revert that patch and instead add support for
>>>>>> prepareThreshold=-1 which would force prepare+describe to be done
>> even for
>>>>>> the first execution. That would allow users to keep controlling the
>>>>>> behavior instead of forcing binary transfers immediately?
>>>>>>> Alternatively we can separate the binary transfer logic from
>> statement
>>>>>> prepare threshold and add a separate binaryThreshold.
>>>>>>>
>>>>>>> -Mikko
>>>>>>> ________________________________________
>>>>>>> From: pgsql-jdbc-owner@postgresql.org <pgsql-jdbc-owner@postgresql.
>> org>
>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
>>>>>>> Sent: 21 February 2014 08:40
>>>>>>> To: pgsql-jdbc@postgresql.org
>>>>>>> Subject: [JDBC] About binaryTransfer.
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>>>>>>> It does another behavior.
>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>>>>>>>
>>>>>>> 9.2-1004:
>>>>>>> Always flags = 16.
>>>>>>> ----
>>>>>>> 14:09:55.730 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@8232a5d,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> 14:09:55.878 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@34e671de,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> ----
>>>>>>>
>>>>>>> 9.3-1100
>>>>>>> Repeatedly flags = 48 and 16.
>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>>>>>>> "flags=48" is extra executing.
>>>>>>> ----
>>>>>>> 14:20:34.991 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@19cdbc83,
>>>>>>> maxRows=0, fetchSize=0, flags=48
>>>>>>> 14:20:34.992 (1) simple execute,
>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>> StatementResultHandler@304b0cbc,
>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>> ----
>>>>>>>
>>>>>>> This change has caused by below commit.
>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>> dbf76c2d662896c5703cf20d7362e1
>>>>>> d061e1e43f
>>>>>>>
>>>>>>> It seems that binarytransfer mode is good at dealing with
>>>>>>> big-data(many columns?many rows?), but some packets are
>>>>>>> sent/received for this function, right?
>>>>>>>
>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>>>>>>> What can I do ?
>>>>>>>
>>>>>>> regards,
>>>>>>> ----------------
>>>>>>> Tomonari Katsumata
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>>> To make changes to your subscription:
>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>> To make changes to your subscription:
>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>





Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave, Mikko,

Sorry for slow response.

Mikko, thanks for cleaning things up.
My thought is all that Mikko says.

 >>  So the desired behaviour you want is what? You want the first query to
 >> be able to use binary, or not ?
 >>
I don't need using binary transfer for the first query.
But someone need and added this feature, I've thought to
remain this feature.

 > I think the only problem with Tomonari's patch is some conventions
such as
 > Capitalization of the first letter, and the use of a static field in the
 > statement as opposed to a per statement setting
 >
I've changed the behavior drastically for including
both "first query binaryTransfer" and "No extra round-trips".
As Dave says, this may cause some trouble...

Then, I create a new patch for REL9_3_STABLE.
Please see attached patch.
This patch will just reduce extra round-trips.
A extra round-trip would occur only once, but this can not be helped.

regards,
----------------
Tomonari Katsumata

(2014/04/15 22:12), Dave Cramer wrote:
 > Mikko,
 >
 > Thanks for clearing that up.
 >
 > I think the only problem with Tomonari's patch is some conventions
such as
 > Capitalization of the first letter, and the use of a static field in the
 > statement as opposed to a per statement setting
 >
 >
 >
 > Dave Cramer
 >
 > dave.cramer(at)credativ(dot)ca
 > http://www.credativ.ca
 >
 >
 > On 15 April 2014 08:53, Mikko Tiihonen
<Mikko.Tiihonen@nitorcreations.com>wrote:
 >
 >>  I think the changes in the driver go like this:
 >>
 >>
 >>  1) initial binary transfer implementation
 >>
 >> - first n queries use text and after that binary (no extra round-trips)
 >>
 >> - there was a debug flag to enable binary transfers for first query
(with
 >> the cost of extra round-trip)
 >>
 >>
 >>  2) someone wanted the binary transfers for one-shot operations too
 >>
 >> - but modified the code so that the extra driver-server round trip
cost is
 >> now on _every_ execution of prepared statement
 >>
 >>
 >>  3) tomonari created a patch the fixes the extra round-trip but still
 >> allows binary transfers for first query - all configurable
 >>
 >>
 >>  Now the request is to either revert 2) change or apply 3) change. The
 >> extra round-trip between each execution is really a killer for many
 >> installations.
 >>
 >>
 >>  -Mikko
 >>  ------------------------------
 >> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave
 >> Cramer <pg@fastcrypt.com>
 >> *Sent:* 15 April 2014 15:34
 >> *To:* Tomonari Katsumata
 >> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
 >> *Subject:* Re: [JDBC] About binaryTransfer.
 >>
 >>  Tomonari,
 >>
 >>  So the desired behaviour you want is what? You want the first query to
 >> be able to use binary, or not ?
 >>
 >>  Dave
 >>
 >> Dave Cramer
 >>
 >> dave.cramer(at)credativ(dot)ca
 >> http://www.credativ.ca
 >>
 >>
 >> On 15 April 2014 04:20, Tomonari Katsumata <
 >> katsumata.tomonari@po.ntts.co.jp> wrote:
 >>
 >>> Hi Dave,
 >>>
 >>>
 >>>> I pulled this into master.
 >>>>
 >>>  Thanks for merging my fix against master!
 >>>
 >>>
 >>>> I'm not quite sure I want this back patched into
 >>>> 9.3 though. This is new behaviour.
 >>>>
 >>>  I think the original change(*) was done for rare case.
 >>> But this change would cause a performance issue
 >>> in many cases like me.
 >>>
 >>> So I want this fix into 9.3.
 >>> If we cannot do so, we should revert
 >>> the original change(*) at least.
 >>>
(*)https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1
 >>> d061e1e43f
 >>>
 >>> regards,
 >>> ---------------
 >>> Tomonari Katsumata
 >>>
 >>>
 >>>>
 >>>>
 >>>> Dave Cramer
 >>>>
 >>>> dave.cramer(at)credativ(dot)ca
 >>>> http://www.credativ.ca
 >>>>
 >>>>
 >>>> On 3 April 2014 04:37, Tomonari Katsumata
 >>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
 >>>>
 >>>>> Hi Dave,
 >>>>>
 >>>>> Did you check my pull-request?
 >>>>> https://github.com/pgjdbc/pgjdbc/pull/128
 >>>>>
 >>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
 >>>>> about setQueryTimeout fixed by Heikki(*).
 >>>>> (*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
 >>>>>
 >>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
 >>>>> like 9.2-1004 as soon as possible.
 >>>>>
 >>>>> Could you check it please?
 >>>>> If I'm missing something, please tell me it!
 >>>>>
 >>>>> regards,
 >>>>> ------------------------
 >>>>> Tomonari Katsumata
 >>>>>
 >>>>>
 >>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
 >>>>>> Hi Dave,
 >>>>>>
 >>>>>> I've misunderstood the behavior of this problem.
 >>>>>> The main problem is that the Describe message is send/receive
 >>>>>> repeatedly, if user don't want to do so.
 >>>>>>
 >>>>>> The pull-request I've sent before(#124) didn't solve the problem.
 >>>>>>
 >>>>>> Now, I fixed it and sent a new pull-request.
 >>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
 >>>>>>
 >>>>>> Please check it!
 >>>>>>
 >>>>>> regards,
 >>>>>> ----------------------
 >>>>>> Tomonari Katsumata
 >>>>>
 >>>>>>
 >>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
 >>>>>>> Hi Dave,
 >>>>>>> I sent a Pull Request about this.
 >>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
 >>>>>>>
 >>>>>>> regards,
 >>>>>>> -------------------
 >>>>>>> Tomonari Katsumata
 >>>>>>>
 >>>>>>>
 >>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
 >>>>>>>
 >>>>>>>> Please submit a Pull Request
 >>>>>>>>
 >>>>>>>> Dave Cramer
 >>>>>>>>
 >>>>>>>> dave.cramer(at)credativ(dot)ca
 >>>>>>>> http://www.credativ.ca
 >>>>>>>>
 >>>>>>>>
 >>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
 >>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
 >>>>>>>>
 >>>>>>>>> Hi Mikko,
 >>>>>>>>>
 >>>>>>>>> Thank you for the explanation.
 >>>>>>>>>
 >>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
 >>>>>>>>>
 >>>>>>>>> If there are no objection, I'll do for it!
 >>>>>>>>>
 >>>>>>>>> regards,
 >>>>>>>>> ----------------
 >>>>>>>>> Tomonari Katsumata
 >>>>>>>>>
 >>>>>>>>>
 >>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
 >>>>>>>>>> Before the patch the functionality was (if binaryTransfer=true):
 >>>>>>>>>> - prepared statements after prepareThreshold were done in binary
 >>>>> mode
 >>>>>>>>>> - forceBinary=true could be enabled to force all statements
 >>>>> (prepared +
 >>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
 >>> round-trip)
 >>>>>>>>>>
 >>>>>>>>>> After the patch in question (if binaryTransfer=true):
 >>>>>>>>>> - All prepared statements have extra round-trip before on first
 >>> use
 >>>>> and
 >>>>>>>>> are immediately in binary mode
 >>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
 >>> statements
 >>>>> to
 >>>>>>>>> be executed in binary mode (at cost of extra round-trip)
 >>>>>>>>>>
 >>>>>>>>>> Since there are users that use prepared statements in
one-shot way
 >>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
 >>>>> round-trip for
 >>>>>>>>> them.
 >>>>>>>>>>
 >>>>>>>>>> As a side note: the forceBinary is meant only as a debug flag
 >>> (used
 >>>>> for
 >>>>>>>>> example in pgjdbc tests), not for production use.
 >>>>>>>>>>
 >>>>>>>>>> So the only thing the before-state could not do was to use
binary
 >>>>>>>>> transfers for the first prepared statement execution. This is
 >>> because
 >>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
 >>> preparing
 >>>>> before
 >>>>>>>>> first use.
 >>>>>>>>>>
 >>>>>>>>>> I propose we revert that patch and instead add support for
 >>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be done
 >>>>> even for
 >>>>>>>>> the first execution. That would allow users to keep
controlling the
 >>>>>>>>> behavior instead of forcing binary transfers immediately?
 >>>>>>>>>> Alternatively we can separate the binary transfer logic from
 >>>>> statement
 >>>>>>>>> prepare threshold and add a separate binaryThreshold.
 >>>>>>>>>>
 >>>>>>>>>> -Mikko
 >>>>>>>>>> ________________________________________
 >>>>>>>>>> From:
pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@postgresql.
 >>>>> org>
 >>>>>>>>> on behalf of Tomonari Katsumata
<katsumata.tomonari@po.ntts.co.jp>
 >>>>>>>>>> Sent: 21 February 2014 08:40
 >>>>>>>>>> To: pgsql-jdbc@postgresql.org
 >>>>>>>>>> Subject: [JDBC] About binaryTransfer.
 >>>>>>>>>>
 >>>>>>>>>> Hi,
 >>>>>>>>>>
 >>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
 >>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
 >>>>>>>>>> It does another behavior.
 >>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
 >>>>>>>>>>
 >>>>>>>>>> 9.2-1004:
 >>>>>>>>>> Always flags = 16.
 >>>>>>>>>> ----
 >>>>>>>>>> 14:09:55.730 (1) simple execute,
 >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>> StatementResultHandler@8232a5d,
 >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>>>>> 14:09:55.878 (1) simple execute,
 >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>> StatementResultHandler@34e671de,
 >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>>>>> ----
 >>>>>>>>>>
 >>>>>>>>>> 9.3-1100
 >>>>>>>>>> Repeatedly flags = 48 and 16.
 >>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
 >>>>>>>>>> "flags=48" is extra executing.
 >>>>>>>>>> ----
 >>>>>>>>>> 14:20:34.991 (1) simple execute,
 >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>> StatementResultHandler@19cdbc83,
 >>>>>>>>>> maxRows=0, fetchSize=0, flags=48
 >>>>>>>>>> 14:20:34.992 (1) simple execute,
 >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>> StatementResultHandler@304b0cbc,
 >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>>>>> ----
 >>>>>>>>>>
 >>>>>>>>>> This change has caused by below commit.
 >>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
 >>>>> dbf76c2d662896c5703cf20d7362e1
 >>>>>>>>> d061e1e43f
 >>>>>>>>>>
 >>>>>>>>>> It seems that binarytransfer mode is good at dealing with
 >>>>>>>>>> big-data(many columns?many rows?), but some packets are
 >>>>>>>>>> sent/received for this function, right?
 >>>>>>>>>>
 >>>>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
 >>>>>>>>>> What can I do ?
 >>>>>>>>>>
 >>>>>>>>>> regards,
 >>>>>>>>>> ----------------
 >>>>>>>>>> Tomonari Katsumata
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>> --
 >>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>>>>>>>>> To make changes to your subscription:
 >>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>
 >>>>>>>>>
 >>>>>>>>>
 >>>>>>>>>
 >>>>>>>>> --
 >>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>>>>>>>> To make changes to your subscription:
 >>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>
 >>>>>>
 >>>>>>
 >>>>>>
 >>>>>
 >>>>>
 >>>>>
 >>>>
 >>>
 >>>
 >>>
 >>>
 >>
 >



Вложения

Re: About binaryTransfer.

От
Dave Cramer
Дата:
Tomonari,

We still have to deal with the static variable ForceBinaryTransfer. It has to be per statement. The static variable will change the behaviour of all statements.

It should also be named forceBinaryTransfer.


Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 17 April 2014 05:15, Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp> wrote:
Hi Dave, Mikko,

Sorry for slow response.

Mikko, thanks for cleaning things up.
My thought is all that Mikko says.


>>  So the desired behaviour you want is what? You want the first query to
>> be able to use binary, or not ?
>>
I don't need using binary transfer for the first query.
But someone need and added this feature, I've thought to
remain this feature.


> I think the only problem with Tomonari's patch is some conventions such as
> Capitalization of the first letter, and the use of a static field in the
> statement as opposed to a per statement setting
>
I've changed the behavior drastically for including
both "first query binaryTransfer" and "No extra round-trips".
As Dave says, this may cause some trouble...

Then, I create a new patch for REL9_3_STABLE.
Please see attached patch.
This patch will just reduce extra round-trips.
A extra round-trip would occur only once, but this can not be helped.

regards,
----------------
Tomonari Katsumata


(2014/04/15 22:12), Dave Cramer wrote:
> Mikko,
>
> Thanks for clearing that up.
>
> I think the only problem with Tomonari's patch is some conventions such as
> Capitalization of the first letter, and the use of a static field in the
> statement as opposed to a per statement setting
>
>
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@nitorcreations.com>wrote:
>
>>  I think the changes in the driver go like this:
>>
>>
>>  1) initial binary transfer implementation
>>
>> - first n queries use text and after that binary (no extra round-trips)
>>
>> - there was a debug flag to enable binary transfers for first query (with
>> the cost of extra round-trip)
>>
>>
>>  2) someone wanted the binary transfers for one-shot operations too
>>
>> - but modified the code so that the extra driver-server round trip cost is
>> now on _every_ execution of prepared statement
>>
>>
>>  3) tomonari created a patch the fixes the extra round-trip but still
>> allows binary transfers for first query - all configurable
>>
>>
>>  Now the request is to either revert 2) change or apply 3) change. The
>> extra round-trip between each execution is really a killer for many
>> installations.
>>
>>
>>  -Mikko
>>  ------------------------------
>> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave
>> Cramer <pg@fastcrypt.com>
>> *Sent:* 15 April 2014 15:34
>> *To:* Tomonari Katsumata
>> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
>> *Subject:* Re: [JDBC] About binaryTransfer.

>>
>>  Tomonari,
>>
>>  So the desired behaviour you want is what? You want the first query to
>> be able to use binary, or not ?
>>
>>  Dave
>>
>> Dave Cramer
>>
>> dave.cramer(at)credativ(dot)ca
>> http://www.credativ.ca
>>
>>
>> On 15 April 2014 04:20, Tomonari Katsumata <
>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>
>>> Hi Dave,
>>>
>>>
>>>> I pulled this into master.
>>>>
>>>  Thanks for merging my fix against master!
>>>
>>>
>>>> I'm not quite sure I want this back patched into
>>>> 9.3 though. This is new behaviour.
>>>>
>>>  I think the original change(*) was done for rare case.
>>> But this change would cause a performance issue
>>> in many cases like me.
>>>
>>> So I want this fix into 9.3.
>>> If we cannot do so, we should revert
>>> the original change(*) at least.
>>> (*)https://github.com/pgjdbc/pgjdbc/commit/dbf76c2d662896c5703cf20d7362e1
>>> d061e1e43f
>>>
>>> regards,
>>> ---------------
>>> Tomonari Katsumata
>>>
>>>
>>>>
>>>>
>>>> Dave Cramer
>>>>
>>>> dave.cramer(at)credativ(dot)ca
>>>> http://www.credativ.ca
>>>>
>>>>
>>>> On 3 April 2014 04:37, Tomonari Katsumata
>>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
>>>>
>>>>> Hi Dave,
>>>>>
>>>>> Did you check my pull-request?
>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>>>
>>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
>>>>> about setQueryTimeout fixed by Heikki(*).
>>>>> (*) http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>>>>>
>>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>>>>> like 9.2-1004 as soon as possible.
>>>>>
>>>>> Could you check it please?
>>>>> If I'm missing something, please tell me it!
>>>>>
>>>>> regards,
>>>>> ------------------------
>>>>> Tomonari Katsumata
>>>>>
>>>>>
>>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>>>>>> Hi Dave,
>>>>>>
>>>>>> I've misunderstood the behavior of this problem.
>>>>>> The main problem is that the Describe message is send/receive
>>>>>> repeatedly, if user don't want to do so.
>>>>>>
>>>>>> The pull-request I've sent before(#124) didn't solve the problem.
>>>>>>
>>>>>> Now, I fixed it and sent a new pull-request.
>>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>>>>
>>>>>> Please check it!
>>>>>>
>>>>>> regards,
>>>>>> ----------------------
>>>>>> Tomonari Katsumata
>>>>>
>>>>>>
>>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>>>>>>> Hi Dave,
>>>>>>> I sent a Pull Request about this.
>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>>>>>>>
>>>>>>> regards,
>>>>>>> -------------------
>>>>>>> Tomonari Katsumata
>>>>>>>
>>>>>>>
>>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>>>>>>>
>>>>>>>> Please submit a Pull Request
>>>>>>>>
>>>>>>>> Dave Cramer
>>>>>>>>
>>>>>>>> dave.cramer(at)credativ(dot)ca
>>>>>>>> http://www.credativ.ca
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>>>>>>>
>>>>>>>>> Hi Mikko,
>>>>>>>>>
>>>>>>>>> Thank you for the explanation.
>>>>>>>>>
>>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
>>>>>>>>>
>>>>>>>>> If there are no objection, I'll do for it!
>>>>>>>>>
>>>>>>>>> regards,
>>>>>>>>> ----------------
>>>>>>>>> Tomonari Katsumata
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>>>>>>>>>> Before the patch the functionality was (if binaryTransfer=true):
>>>>>>>>>> - prepared statements after prepareThreshold were done in binary
>>>>> mode
>>>>>>>>>> - forceBinary=true could be enabled to force all statements
>>>>> (prepared +
>>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
>>> round-trip)
>>>>>>>>>>
>>>>>>>>>> After the patch in question (if binaryTransfer=true):
>>>>>>>>>> - All prepared statements have extra round-trip before on first
>>> use
>>>>> and
>>>>>>>>> are immediately in binary mode
>>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
>>> statements
>>>>> to
>>>>>>>>> be executed in binary mode (at cost of extra round-trip)
>>>>>>>>>>
>>>>>>>>>> Since there are users that use prepared statements in one-shot way
>>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>>>>> round-trip for
>>>>>>>>> them.
>>>>>>>>>>
>>>>>>>>>> As a side note: the forceBinary is meant only as a debug flag
>>> (used
>>>>> for
>>>>>>>>> example in pgjdbc tests), not for production use.
>>>>>>>>>>
>>>>>>>>>> So the only thing the before-state could not do was to use binary
>>>>>>>>> transfers for the first prepared statement execution. This is
>>> because
>>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
>>> preparing
>>>>> before
>>>>>>>>> first use.
>>>>>>>>>>
>>>>>>>>>> I propose we revert that patch and instead add support for
>>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be done
>>>>> even for
>>>>>>>>> the first execution. That would allow users to keep controlling the
>>>>>>>>> behavior instead of forcing binary transfers immediately?
>>>>>>>>>> Alternatively we can separate the binary transfer logic from
>>>>> statement
>>>>>>>>> prepare threshold and add a separate binaryThreshold.
>>>>>>>>>>
>>>>>>>>>> -Mikko
>>>>>>>>>> ________________________________________
>>>>>>>>>> From: pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@postgresql.
>>>>> org>
>>>>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>
>>>>>>>>>> Sent: 21 February 2014 08:40
>>>>>>>>>> To: pgsql-jdbc@postgresql.org
>>>>>>>>>> Subject: [JDBC] About binaryTransfer.
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>>>>>>>>>> It does another behavior.
>>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>>>>>>>>>>
>>>>>>>>>> 9.2-1004:
>>>>>>>>>> Always flags = 16.
>>>>>>>>>> ----
>>>>>>>>>> 14:09:55.730 (1) simple execute,
>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>> StatementResultHandler@8232a5d,
>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>>>>> 14:09:55.878 (1) simple execute,
>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>> StatementResultHandler@34e671de,
>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>>>>> ----
>>>>>>>>>>
>>>>>>>>>> 9.3-1100
>>>>>>>>>> Repeatedly flags = 48 and 16.
>>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>>>>>>>>>> "flags=48" is extra executing.
>>>>>>>>>> ----
>>>>>>>>>> 14:20:34.991 (1) simple execute,
>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>> StatementResultHandler@19cdbc83,
>>>>>>>>>> maxRows=0, fetchSize=0, flags=48
>>>>>>>>>> 14:20:34.992 (1) simple execute,
>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>> StatementResultHandler@304b0cbc,
>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>>>>> ----
>>>>>>>>>>
>>>>>>>>>> This change has caused by below commit.
>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>>>>> dbf76c2d662896c5703cf20d7362e1
>>>>>>>>> d061e1e43f
>>>>>>>>>>
>>>>>>>>>> It seems that binarytransfer mode is good at dealing with
>>>>>>>>>> big-data(many columns?many rows?), but some packets are
>>>>>>>>>> sent/received for this function, right?
>>>>>>>>>>
>>>>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>>>>>>>>>> What can I do ?
>>>>>>>>>>
>>>>>>>>>> regards,
>>>>>>>>>> ----------------
>>>>>>>>>> Tomonari Katsumata
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>>>>>> To make changes to your subscription:
>>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>>>>> To make changes to your subscription:
>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>



Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,

Thank you for check.

> We still have to deal with the static variable ForceBinaryTransfer. It has
> to be per statement. The static variable will change the behaviour of all
> statements.
>
> It should also be named forceBinaryTransfer.
>
I've misunderstood what you say.
Now I could understand it.

I changed public variable "forceBinaryTransfers" to
static variable "ForceBinaryTransfers" .
Please check fix_ForceBinaryTranfers-part2.patch.
This patch is for current master(*1).
(*1)0eadcb873c68715cc3d0e9478c13ce3e38b798ae

Because this patch is for new feature, I think
it is not necessary to be applyed to REL9_3_STABLE.
But I want to apply a patch which I sent in last mail(*2)
to REL9_3_STABLE for resolving performance problem.
(*2) sending again. see attached fix_ForceBinaryTranfers-for-93stable.patch

Still am I missing something?

regards,
-----------------
Tomonari Katsumata

>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 17 April 2014 05:15, Tomonari Katsumata
> <katsumata.tomonari@po.ntts.co.jp
>> wrote:
>
>> Hi Dave, Mikko,
>>
>> Sorry for slow response.
>>
>> Mikko, thanks for cleaning things up.
>> My thought is all that Mikko says.
>>
>>
>> >>  So the desired behaviour you want is what? You want the first query
>> >> to
>> >> be able to use binary, or not ?
>> >>
>> I don't need using binary transfer for the first query.
>> But someone need and added this feature, I've thought to
>> remain this feature.
>>
>>
>> > I think the only problem with Tomonari's patch is some conventions such
>> as
>> > Capitalization of the first letter, and the use of a static field in
>> > the
>> > statement as opposed to a per statement setting
>> >
>> I've changed the behavior drastically for including
>> both "first query binaryTransfer" and "No extra round-trips".
>> As Dave says, this may cause some trouble...
>>
>> Then, I create a new patch for REL9_3_STABLE.
>> Please see attached patch.
>> This patch will just reduce extra round-trips.
>> A extra round-trip would occur only once, but this can not be helped.
>>
>> regards,
>> ----------------
>> Tomonari Katsumata
>>
>>
>> (2014/04/15 22:12), Dave Cramer wrote:
>> > Mikko,
>> >
>> > Thanks for clearing that up.
>> >
>> > I think the only problem with Tomonari's patch is some conventions such
>> as
>> > Capitalization of the first letter, and the use of a static field in
>> > the
>> > statement as opposed to a per statement setting
>> >
>> >
>> >
>> > Dave Cramer
>> >
>> > dave.cramer(at)credativ(dot)ca
>> > http://www.credativ.ca
>> >
>> >
>> > On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@
>> nitorcreations.com>wrote:
>> >
>> >>  I think the changes in the driver go like this:
>> >>
>> >>
>> >>  1) initial binary transfer implementation
>> >>
>> >> - first n queries use text and after that binary (no extra
>> >> round-trips)
>> >>
>> >> - there was a debug flag to enable binary transfers for first query
>> (with
>> >> the cost of extra round-trip)
>> >>
>> >>
>> >>  2) someone wanted the binary transfers for one-shot operations too
>> >>
>> >> - but modified the code so that the extra driver-server round trip
>> >> cost
>> is
>> >> now on _every_ execution of prepared statement
>> >>
>> >>
>> >>  3) tomonari created a patch the fixes the extra round-trip but still
>> >> allows binary transfers for first query - all configurable
>> >>
>> >>
>> >>  Now the request is to either revert 2) change or apply 3) change. The
>> >> extra round-trip between each execution is really a killer for many
>> >> installations.
>> >>
>> >>
>> >>  -Mikko
>> >>  ------------------------------
>> >> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave
>> >> Cramer <pg@fastcrypt.com>
>> >> *Sent:* 15 April 2014 15:34
>> >> *To:* Tomonari Katsumata
>> >> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
>> >> *Subject:* Re: [JDBC] About binaryTransfer.
>>
>> >>
>> >>  Tomonari,
>> >>
>> >>  So the desired behaviour you want is what? You want the first query
>> >> to
>> >> be able to use binary, or not ?
>> >>
>> >>  Dave
>> >>
>> >> Dave Cramer
>> >>
>> >> dave.cramer(at)credativ(dot)ca
>> >> http://www.credativ.ca
>> >>
>> >>
>> >> On 15 April 2014 04:20, Tomonari Katsumata <
>> >> katsumata.tomonari@po.ntts.co.jp> wrote:
>> >>
>> >>> Hi Dave,
>> >>>
>> >>>
>> >>>> I pulled this into master.
>> >>>>
>> >>>  Thanks for merging my fix against master!
>> >>>
>> >>>
>> >>>> I'm not quite sure I want this back patched into
>> >>>> 9.3 though. This is new behaviour.
>> >>>>
>> >>>  I think the original change(*) was done for rare case.
>> >>> But this change would cause a performance issue
>> >>> in many cases like me.
>> >>>
>> >>> So I want this fix into 9.3.
>> >>> If we cannot do so, we should revert
>> >>> the original change(*) at least.
>> >>> (*)https://github.com/pgjdbc/pgjdbc/commit/
>> dbf76c2d662896c5703cf20d7362e1
>> >>> d061e1e43f
>> >>>
>> >>> regards,
>> >>> ---------------
>> >>> Tomonari Katsumata
>> >>>
>> >>>
>> >>>>
>> >>>>
>> >>>> Dave Cramer
>> >>>>
>> >>>> dave.cramer(at)credativ(dot)ca
>> >>>> http://www.credativ.ca
>> >>>>
>> >>>>
>> >>>> On 3 April 2014 04:37, Tomonari Katsumata
>> >>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
>> >>>>
>> >>>>> Hi Dave,
>> >>>>>
>> >>>>> Did you check my pull-request?
>> >>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>> >>>>>
>> >>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
>> >>>>> about setQueryTimeout fixed by Heikki(*).
>> >>>>> (*)
>> >>>>> http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>> >>>>>
>> >>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>> >>>>> like 9.2-1004 as soon as possible.
>> >>>>>
>> >>>>> Could you check it please?
>> >>>>> If I'm missing something, please tell me it!
>> >>>>>
>> >>>>> regards,
>> >>>>> ------------------------
>> >>>>> Tomonari Katsumata
>> >>>>>
>> >>>>>
>> >>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>> >>>>>> Hi Dave,
>> >>>>>>
>> >>>>>> I've misunderstood the behavior of this problem.
>> >>>>>> The main problem is that the Describe message is send/receive
>> >>>>>> repeatedly, if user don't want to do so.
>> >>>>>>
>> >>>>>> The pull-request I've sent before(#124) didn't solve the problem.
>> >>>>>>
>> >>>>>> Now, I fixed it and sent a new pull-request.
>> >>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>> >>>>>>
>> >>>>>> Please check it!
>> >>>>>>
>> >>>>>> regards,
>> >>>>>> ----------------------
>> >>>>>> Tomonari Katsumata
>> >>>>>
>> >>>>>>
>> >>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>> >>>>>>> Hi Dave,
>> >>>>>>> I sent a Pull Request about this.
>> >>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>> >>>>>>>
>> >>>>>>> regards,
>> >>>>>>> -------------------
>> >>>>>>> Tomonari Katsumata
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>> >>>>>>>
>> >>>>>>>> Please submit a Pull Request
>> >>>>>>>>
>> >>>>>>>> Dave Cramer
>> >>>>>>>>
>> >>>>>>>> dave.cramer(at)credativ(dot)ca
>> >>>>>>>> http://www.credativ.ca
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>> >>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>> >>>>>>>>
>> >>>>>>>>> Hi Mikko,
>> >>>>>>>>>
>> >>>>>>>>> Thank you for the explanation.
>> >>>>>>>>>
>> >>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
>> >>>>>>>>>
>> >>>>>>>>> If there are no objection, I'll do for it!
>> >>>>>>>>>
>> >>>>>>>>> regards,
>> >>>>>>>>> ----------------
>> >>>>>>>>> Tomonari Katsumata
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>> >>>>>>>>>> Before the patch the functionality was (if
>> >>>>>>>>>> binaryTransfer=true):
>> >>>>>>>>>> - prepared statements after prepareThreshold were done in
>> >>>>>>>>>> binary
>> >>>>> mode
>> >>>>>>>>>> - forceBinary=true could be enabled to force all statements
>> >>>>> (prepared +
>> >>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
>> >>> round-trip)
>> >>>>>>>>>>
>> >>>>>>>>>> After the patch in question (if binaryTransfer=true):
>> >>>>>>>>>> - All prepared statements have extra round-trip before on
>> >>>>>>>>>> first
>> >>> use
>> >>>>> and
>> >>>>>>>>> are immediately in binary mode
>> >>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
>> >>> statements
>> >>>>> to
>> >>>>>>>>> be executed in binary mode (at cost of extra round-trip)
>> >>>>>>>>>>
>> >>>>>>>>>> Since there are users that use prepared statements in one-shot
>> way
>> >>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>> >>>>> round-trip for
>> >>>>>>>>> them.
>> >>>>>>>>>>
>> >>>>>>>>>> As a side note: the forceBinary is meant only as a debug flag
>> >>> (used
>> >>>>> for
>> >>>>>>>>> example in pgjdbc tests), not for production use.
>> >>>>>>>>>>
>> >>>>>>>>>> So the only thing the before-state could not do was to use
>> binary
>> >>>>>>>>> transfers for the first prepared statement execution. This is
>> >>> because
>> >>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
>> >>> preparing
>> >>>>> before
>> >>>>>>>>> first use.
>> >>>>>>>>>>
>> >>>>>>>>>> I propose we revert that patch and instead add support for
>> >>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be
>> >>>>>>>>> done
>> >>>>> even for
>> >>>>>>>>> the first execution. That would allow users to keep controlling
>> the
>> >>>>>>>>> behavior instead of forcing binary transfers immediately?
>> >>>>>>>>>> Alternatively we can separate the binary transfer logic from
>> >>>>> statement
>> >>>>>>>>> prepare threshold and add a separate binaryThreshold.
>> >>>>>>>>>>
>> >>>>>>>>>> -Mikko
>> >>>>>>>>>> ________________________________________
>> >>>>>>>>>> From: pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@
>> postgresql.
>> >>>>> org>
>> >>>>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.
>> co.jp>
>> >>>>>>>>>> Sent: 21 February 2014 08:40
>> >>>>>>>>>> To: pgsql-jdbc@postgresql.org
>> >>>>>>>>>> Subject: [JDBC] About binaryTransfer.
>> >>>>>>>>>>
>> >>>>>>>>>> Hi,
>> >>>>>>>>>>
>> >>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>> >>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>> >>>>>>>>>> It does another behavior.
>> >>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>> >>>>>>>>>>
>> >>>>>>>>>> 9.2-1004:
>> >>>>>>>>>> Always flags = 16.
>> >>>>>>>>>> ----
>> >>>>>>>>>> 14:09:55.730 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@8232a5d,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> 14:09:55.878 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@34e671de,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> ----
>> >>>>>>>>>>
>> >>>>>>>>>> 9.3-1100
>> >>>>>>>>>> Repeatedly flags = 48 and 16.
>> >>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>> >>>>>>>>>> "flags=48" is extra executing.
>> >>>>>>>>>> ----
>> >>>>>>>>>> 14:20:34.991 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@19cdbc83,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=48
>> >>>>>>>>>> 14:20:34.992 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@304b0cbc,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> ----
>> >>>>>>>>>>
>> >>>>>>>>>> This change has caused by below commit.
>> >>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>> >>>>> dbf76c2d662896c5703cf20d7362e1
>> >>>>>>>>> d061e1e43f
>> >>>>>>>>>>
>> >>>>>>>>>> It seems that binarytransfer mode is good at dealing with
>> >>>>>>>>>> big-data(many columns?many rows?), but some packets are
>> >>>>>>>>>> sent/received for this function, right?
>> >>>>>>>>>>
>> >>>>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>> >>>>>>>>>> What can I do ?
>> >>>>>>>>>>
>> >>>>>>>>>> regards,
>> >>>>>>>>>> ----------------
>> >>>>>>>>>> Tomonari Katsumata
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> --
>> >>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> >>>>>>>>>> To make changes to your subscription:
>> >>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> --
>> >>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> >>>>>>>>> To make changes to your subscription:
>> >>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>
>> >
>>
>>
>>
>

Вложения

Re: About binaryTransfer.

От
Dave Cramer
Дата:
Tomonari,

I'm hesitant to apply the first patch, as the static variable means every statement will have the same behaviour. Think about this. What if another statement sets it to false after you have set it to true ? 

You have to keep in mind there is only copy of the driver inside a JVM.



 

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 17 April 2014 11:29, Tomonari Katsumata <t.katsumata1122@gmail.com> wrote:
Hi Dave,

Thank you for check.

> We still have to deal with the static variable ForceBinaryTransfer. It has
> to be per statement. The static variable will change the behaviour of all
> statements.
>
> It should also be named forceBinaryTransfer.
>
I've misunderstood what you say.
Now I could understand it.

I changed public variable "forceBinaryTransfers" to
static variable "ForceBinaryTransfers" .
Please check fix_ForceBinaryTranfers-part2.patch.
This patch is for current master(*1).
(*1)0eadcb873c68715cc3d0e9478c13ce3e38b798ae

Because this patch is for new feature, I think
it is not necessary to be applyed to REL9_3_STABLE.
But I want to apply a patch which I sent in last mail(*2)
to REL9_3_STABLE for resolving performance problem.
(*2) sending again. see attached fix_ForceBinaryTranfers-for-93stable.patch

Still am I missing something?

regards,
-----------------
Tomonari Katsumata

>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 17 April 2014 05:15, Tomonari Katsumata
> <katsumata.tomonari@po.ntts.co.jp
>> wrote:
>
>> Hi Dave, Mikko,
>>
>> Sorry for slow response.
>>
>> Mikko, thanks for cleaning things up.
>> My thought is all that Mikko says.
>>
>>
>> >>  So the desired behaviour you want is what? You want the first query
>> >> to
>> >> be able to use binary, or not ?
>> >>
>> I don't need using binary transfer for the first query.
>> But someone need and added this feature, I've thought to
>> remain this feature.
>>
>>
>> > I think the only problem with Tomonari's patch is some conventions such
>> as
>> > Capitalization of the first letter, and the use of a static field in
>> > the
>> > statement as opposed to a per statement setting
>> >
>> I've changed the behavior drastically for including
>> both "first query binaryTransfer" and "No extra round-trips".
>> As Dave says, this may cause some trouble...
>>
>> Then, I create a new patch for REL9_3_STABLE.
>> Please see attached patch.
>> This patch will just reduce extra round-trips.
>> A extra round-trip would occur only once, but this can not be helped.
>>
>> regards,
>> ----------------
>> Tomonari Katsumata
>>
>>
>> (2014/04/15 22:12), Dave Cramer wrote:
>> > Mikko,
>> >
>> > Thanks for clearing that up.
>> >
>> > I think the only problem with Tomonari's patch is some conventions such
>> as
>> > Capitalization of the first letter, and the use of a static field in
>> > the
>> > statement as opposed to a per statement setting
>> >
>> >
>> >
>> > Dave Cramer
>> >
>> > dave.cramer(at)credativ(dot)ca
>> > http://www.credativ.ca
>> >
>> >
>> > On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@
>> nitorcreations.com>wrote:
>> >
>> >>  I think the changes in the driver go like this:
>> >>
>> >>
>> >>  1) initial binary transfer implementation
>> >>
>> >> - first n queries use text and after that binary (no extra
>> >> round-trips)
>> >>
>> >> - there was a debug flag to enable binary transfers for first query
>> (with
>> >> the cost of extra round-trip)
>> >>
>> >>
>> >>  2) someone wanted the binary transfers for one-shot operations too
>> >>
>> >> - but modified the code so that the extra driver-server round trip
>> >> cost
>> is
>> >> now on _every_ execution of prepared statement
>> >>
>> >>
>> >>  3) tomonari created a patch the fixes the extra round-trip but still
>> >> allows binary transfers for first query - all configurable
>> >>
>> >>
>> >>  Now the request is to either revert 2) change or apply 3) change. The
>> >> extra round-trip between each execution is really a killer for many
>> >> installations.
>> >>
>> >>
>> >>  -Mikko
>> >>  ------------------------------
>> >> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave
>> >> Cramer <pg@fastcrypt.com>
>> >> *Sent:* 15 April 2014 15:34
>> >> *To:* Tomonari Katsumata
>> >> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
>> >> *Subject:* Re: [JDBC] About binaryTransfer.
>>
>> >>
>> >>  Tomonari,
>> >>
>> >>  So the desired behaviour you want is what? You want the first query
>> >> to
>> >> be able to use binary, or not ?
>> >>
>> >>  Dave
>> >>
>> >> Dave Cramer
>> >>
>> >> dave.cramer(at)credativ(dot)ca
>> >> http://www.credativ.ca
>> >>
>> >>
>> >> On 15 April 2014 04:20, Tomonari Katsumata <
>> >> katsumata.tomonari@po.ntts.co.jp> wrote:
>> >>
>> >>> Hi Dave,
>> >>>
>> >>>
>> >>>> I pulled this into master.
>> >>>>
>> >>>  Thanks for merging my fix against master!
>> >>>
>> >>>
>> >>>> I'm not quite sure I want this back patched into
>> >>>> 9.3 though. This is new behaviour.
>> >>>>
>> >>>  I think the original change(*) was done for rare case.
>> >>> But this change would cause a performance issue
>> >>> in many cases like me.
>> >>>
>> >>> So I want this fix into 9.3.
>> >>> If we cannot do so, we should revert
>> >>> the original change(*) at least.
>> >>> (*)https://github.com/pgjdbc/pgjdbc/commit/
>> dbf76c2d662896c5703cf20d7362e1
>> >>> d061e1e43f
>> >>>
>> >>> regards,
>> >>> ---------------
>> >>> Tomonari Katsumata
>> >>>
>> >>>
>> >>>>
>> >>>>
>> >>>> Dave Cramer
>> >>>>
>> >>>> dave.cramer(at)credativ(dot)ca
>> >>>> http://www.credativ.ca
>> >>>>
>> >>>>
>> >>>> On 3 April 2014 04:37, Tomonari Katsumata
>> >>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
>> >>>>
>> >>>>> Hi Dave,
>> >>>>>
>> >>>>> Did you check my pull-request?
>> >>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>> >>>>>
>> >>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
>> >>>>> about setQueryTimeout fixed by Heikki(*).
>> >>>>> (*)
>> >>>>> http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>> >>>>>
>> >>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>> >>>>> like 9.2-1004 as soon as possible.
>> >>>>>
>> >>>>> Could you check it please?
>> >>>>> If I'm missing something, please tell me it!
>> >>>>>
>> >>>>> regards,
>> >>>>> ------------------------
>> >>>>> Tomonari Katsumata
>> >>>>>
>> >>>>>
>> >>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>> >>>>>> Hi Dave,
>> >>>>>>
>> >>>>>> I've misunderstood the behavior of this problem.
>> >>>>>> The main problem is that the Describe message is send/receive
>> >>>>>> repeatedly, if user don't want to do so.
>> >>>>>>
>> >>>>>> The pull-request I've sent before(#124) didn't solve the problem.
>> >>>>>>
>> >>>>>> Now, I fixed it and sent a new pull-request.
>> >>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>> >>>>>>
>> >>>>>> Please check it!
>> >>>>>>
>> >>>>>> regards,
>> >>>>>> ----------------------
>> >>>>>> Tomonari Katsumata
>> >>>>>
>> >>>>>>
>> >>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>> >>>>>>> Hi Dave,
>> >>>>>>> I sent a Pull Request about this.
>> >>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>> >>>>>>>
>> >>>>>>> regards,
>> >>>>>>> -------------------
>> >>>>>>> Tomonari Katsumata
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>> >>>>>>>
>> >>>>>>>> Please submit a Pull Request
>> >>>>>>>>
>> >>>>>>>> Dave Cramer
>> >>>>>>>>
>> >>>>>>>> dave.cramer(at)credativ(dot)ca
>> >>>>>>>> http://www.credativ.ca
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>> >>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>> >>>>>>>>
>> >>>>>>>>> Hi Mikko,
>> >>>>>>>>>
>> >>>>>>>>> Thank you for the explanation.
>> >>>>>>>>>
>> >>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
>> >>>>>>>>>
>> >>>>>>>>> If there are no objection, I'll do for it!
>> >>>>>>>>>
>> >>>>>>>>> regards,
>> >>>>>>>>> ----------------
>> >>>>>>>>> Tomonari Katsumata
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>> >>>>>>>>>> Before the patch the functionality was (if
>> >>>>>>>>>> binaryTransfer=true):
>> >>>>>>>>>> - prepared statements after prepareThreshold were done in
>> >>>>>>>>>> binary
>> >>>>> mode
>> >>>>>>>>>> - forceBinary=true could be enabled to force all statements
>> >>>>> (prepared +
>> >>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
>> >>> round-trip)
>> >>>>>>>>>>
>> >>>>>>>>>> After the patch in question (if binaryTransfer=true):
>> >>>>>>>>>> - All prepared statements have extra round-trip before on
>> >>>>>>>>>> first
>> >>> use
>> >>>>> and
>> >>>>>>>>> are immediately in binary mode
>> >>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
>> >>> statements
>> >>>>> to
>> >>>>>>>>> be executed in binary mode (at cost of extra round-trip)
>> >>>>>>>>>>
>> >>>>>>>>>> Since there are users that use prepared statements in one-shot
>> way
>> >>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>> >>>>> round-trip for
>> >>>>>>>>> them.
>> >>>>>>>>>>
>> >>>>>>>>>> As a side note: the forceBinary is meant only as a debug flag
>> >>> (used
>> >>>>> for
>> >>>>>>>>> example in pgjdbc tests), not for production use.
>> >>>>>>>>>>
>> >>>>>>>>>> So the only thing the before-state could not do was to use
>> binary
>> >>>>>>>>> transfers for the first prepared statement execution. This is
>> >>> because
>> >>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
>> >>> preparing
>> >>>>> before
>> >>>>>>>>> first use.
>> >>>>>>>>>>
>> >>>>>>>>>> I propose we revert that patch and instead add support for
>> >>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be
>> >>>>>>>>> done
>> >>>>> even for
>> >>>>>>>>> the first execution. That would allow users to keep controlling
>> the
>> >>>>>>>>> behavior instead of forcing binary transfers immediately?
>> >>>>>>>>>> Alternatively we can separate the binary transfer logic from
>> >>>>> statement
>> >>>>>>>>> prepare threshold and add a separate binaryThreshold.
>> >>>>>>>>>>
>> >>>>>>>>>> -Mikko
>> >>>>>>>>>> ________________________________________
>> >>>>>>>>>> From: pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@
>> postgresql.
>> >>>>> org>
>> >>>>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.
>> co.jp>
>> >>>>>>>>>> Sent: 21 February 2014 08:40
>> >>>>>>>>>> To: pgsql-jdbc@postgresql.org
>> >>>>>>>>>> Subject: [JDBC] About binaryTransfer.
>> >>>>>>>>>>
>> >>>>>>>>>> Hi,
>> >>>>>>>>>>
>> >>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>> >>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>> >>>>>>>>>> It does another behavior.
>> >>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>> >>>>>>>>>>
>> >>>>>>>>>> 9.2-1004:
>> >>>>>>>>>> Always flags = 16.
>> >>>>>>>>>> ----
>> >>>>>>>>>> 14:09:55.730 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@8232a5d,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> 14:09:55.878 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@34e671de,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> ----
>> >>>>>>>>>>
>> >>>>>>>>>> 9.3-1100
>> >>>>>>>>>> Repeatedly flags = 48 and 16.
>> >>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>> >>>>>>>>>> "flags=48" is extra executing.
>> >>>>>>>>>> ----
>> >>>>>>>>>> 14:20:34.991 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@19cdbc83,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=48
>> >>>>>>>>>> 14:20:34.992 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@304b0cbc,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> ----
>> >>>>>>>>>>
>> >>>>>>>>>> This change has caused by below commit.
>> >>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>> >>>>> dbf76c2d662896c5703cf20d7362e1
>> >>>>>>>>> d061e1e43f
>> >>>>>>>>>>
>> >>>>>>>>>> It seems that binarytransfer mode is good at dealing with
>> >>>>>>>>>> big-data(many columns?many rows?), but some packets are
>> >>>>>>>>>> sent/received for this function, right?
>> >>>>>>>>>>
>> >>>>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>> >>>>>>>>>> What can I do ?
>> >>>>>>>>>>
>> >>>>>>>>>> regards,
>> >>>>>>>>>> ----------------
>> >>>>>>>>>> Tomonari Katsumata
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> --
>> >>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> >>>>>>>>>> To make changes to your subscription:
>> >>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> --
>> >>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> >>>>>>>>> To make changes to your subscription:
>> >>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>
>> >
>>
>>
>>
>

Re: About binaryTransfer.

От
Dave Cramer
Дата:
Tomonari,

I committed the code to REL9_3_STABLE. As the "new" functionality is invoked by setting prepareThreshold to -1 it should not be intrusive.

Can you please test the current REL9_3_STABLE code ?

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 21 April 2014 06:31, Dave Cramer <pg@fastcrypt.com> wrote:
Tomonari,

I'm hesitant to apply the first patch, as the static variable means every statement will have the same behaviour. Think about this. What if another statement sets it to false after you have set it to true ? 

You have to keep in mind there is only copy of the driver inside a JVM.



 

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 17 April 2014 11:29, Tomonari Katsumata <t.katsumata1122@gmail.com> wrote:
Hi Dave,

Thank you for check.

> We still have to deal with the static variable ForceBinaryTransfer. It has
> to be per statement. The static variable will change the behaviour of all
> statements.
>
> It should also be named forceBinaryTransfer.
>
I've misunderstood what you say.
Now I could understand it.

I changed public variable "forceBinaryTransfers" to
static variable "ForceBinaryTransfers" .
Please check fix_ForceBinaryTranfers-part2.patch.
This patch is for current master(*1).
(*1)0eadcb873c68715cc3d0e9478c13ce3e38b798ae

Because this patch is for new feature, I think
it is not necessary to be applyed to REL9_3_STABLE.
But I want to apply a patch which I sent in last mail(*2)
to REL9_3_STABLE for resolving performance problem.
(*2) sending again. see attached fix_ForceBinaryTranfers-for-93stable.patch

Still am I missing something?

regards,
-----------------
Tomonari Katsumata

>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 17 April 2014 05:15, Tomonari Katsumata
> <katsumata.tomonari@po.ntts.co.jp
>> wrote:
>
>> Hi Dave, Mikko,
>>
>> Sorry for slow response.
>>
>> Mikko, thanks for cleaning things up.
>> My thought is all that Mikko says.
>>
>>
>> >>  So the desired behaviour you want is what? You want the first query
>> >> to
>> >> be able to use binary, or not ?
>> >>
>> I don't need using binary transfer for the first query.
>> But someone need and added this feature, I've thought to
>> remain this feature.
>>
>>
>> > I think the only problem with Tomonari's patch is some conventions such
>> as
>> > Capitalization of the first letter, and the use of a static field in
>> > the
>> > statement as opposed to a per statement setting
>> >
>> I've changed the behavior drastically for including
>> both "first query binaryTransfer" and "No extra round-trips".
>> As Dave says, this may cause some trouble...
>>
>> Then, I create a new patch for REL9_3_STABLE.
>> Please see attached patch.
>> This patch will just reduce extra round-trips.
>> A extra round-trip would occur only once, but this can not be helped.
>>
>> regards,
>> ----------------
>> Tomonari Katsumata
>>
>>
>> (2014/04/15 22:12), Dave Cramer wrote:
>> > Mikko,
>> >
>> > Thanks for clearing that up.
>> >
>> > I think the only problem with Tomonari's patch is some conventions such
>> as
>> > Capitalization of the first letter, and the use of a static field in
>> > the
>> > statement as opposed to a per statement setting
>> >
>> >
>> >
>> > Dave Cramer
>> >
>> > dave.cramer(at)credativ(dot)ca
>> > http://www.credativ.ca
>> >
>> >
>> > On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@
>> nitorcreations.com>wrote:
>> >
>> >>  I think the changes in the driver go like this:
>> >>
>> >>
>> >>  1) initial binary transfer implementation
>> >>
>> >> - first n queries use text and after that binary (no extra
>> >> round-trips)
>> >>
>> >> - there was a debug flag to enable binary transfers for first query
>> (with
>> >> the cost of extra round-trip)
>> >>
>> >>
>> >>  2) someone wanted the binary transfers for one-shot operations too
>> >>
>> >> - but modified the code so that the extra driver-server round trip
>> >> cost
>> is
>> >> now on _every_ execution of prepared statement
>> >>
>> >>
>> >>  3) tomonari created a patch the fixes the extra round-trip but still
>> >> allows binary transfers for first query - all configurable
>> >>
>> >>
>> >>  Now the request is to either revert 2) change or apply 3) change. The
>> >> extra round-trip between each execution is really a killer for many
>> >> installations.
>> >>
>> >>
>> >>  -Mikko
>> >>  ------------------------------
>> >> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of Dave
>> >> Cramer <pg@fastcrypt.com>
>> >> *Sent:* 15 April 2014 15:34
>> >> *To:* Tomonari Katsumata
>> >> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
>> >> *Subject:* Re: [JDBC] About binaryTransfer.
>>
>> >>
>> >>  Tomonari,
>> >>
>> >>  So the desired behaviour you want is what? You want the first query
>> >> to
>> >> be able to use binary, or not ?
>> >>
>> >>  Dave
>> >>
>> >> Dave Cramer
>> >>
>> >> dave.cramer(at)credativ(dot)ca
>> >> http://www.credativ.ca
>> >>
>> >>
>> >> On 15 April 2014 04:20, Tomonari Katsumata <
>> >> katsumata.tomonari@po.ntts.co.jp> wrote:
>> >>
>> >>> Hi Dave,
>> >>>
>> >>>
>> >>>> I pulled this into master.
>> >>>>
>> >>>  Thanks for merging my fix against master!
>> >>>
>> >>>
>> >>>> I'm not quite sure I want this back patched into
>> >>>> 9.3 though. This is new behaviour.
>> >>>>
>> >>>  I think the original change(*) was done for rare case.
>> >>> But this change would cause a performance issue
>> >>> in many cases like me.
>> >>>
>> >>> So I want this fix into 9.3.
>> >>> If we cannot do so, we should revert
>> >>> the original change(*) at least.
>> >>> (*)https://github.com/pgjdbc/pgjdbc/commit/
>> dbf76c2d662896c5703cf20d7362e1
>> >>> d061e1e43f
>> >>>
>> >>> regards,
>> >>> ---------------
>> >>> Tomonari Katsumata
>> >>>
>> >>>
>> >>>>
>> >>>>
>> >>>> Dave Cramer
>> >>>>
>> >>>> dave.cramer(at)credativ(dot)ca
>> >>>> http://www.credativ.ca
>> >>>>
>> >>>>
>> >>>> On 3 April 2014 04:37, Tomonari Katsumata
>> >>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
>> >>>>
>> >>>>> Hi Dave,
>> >>>>>
>> >>>>> Did you check my pull-request?
>> >>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>> >>>>>
>> >>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
>> >>>>> about setQueryTimeout fixed by Heikki(*).
>> >>>>> (*)
>> >>>>> http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>> >>>>>
>> >>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>> >>>>> like 9.2-1004 as soon as possible.
>> >>>>>
>> >>>>> Could you check it please?
>> >>>>> If I'm missing something, please tell me it!
>> >>>>>
>> >>>>> regards,
>> >>>>> ------------------------
>> >>>>> Tomonari Katsumata
>> >>>>>
>> >>>>>
>> >>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>> >>>>>> Hi Dave,
>> >>>>>>
>> >>>>>> I've misunderstood the behavior of this problem.
>> >>>>>> The main problem is that the Describe message is send/receive
>> >>>>>> repeatedly, if user don't want to do so.
>> >>>>>>
>> >>>>>> The pull-request I've sent before(#124) didn't solve the problem.
>> >>>>>>
>> >>>>>> Now, I fixed it and sent a new pull-request.
>> >>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>> >>>>>>
>> >>>>>> Please check it!
>> >>>>>>
>> >>>>>> regards,
>> >>>>>> ----------------------
>> >>>>>> Tomonari Katsumata
>> >>>>>
>> >>>>>>
>> >>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>> >>>>>>> Hi Dave,
>> >>>>>>> I sent a Pull Request about this.
>> >>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>> >>>>>>>
>> >>>>>>> regards,
>> >>>>>>> -------------------
>> >>>>>>> Tomonari Katsumata
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>> >>>>>>>
>> >>>>>>>> Please submit a Pull Request
>> >>>>>>>>
>> >>>>>>>> Dave Cramer
>> >>>>>>>>
>> >>>>>>>> dave.cramer(at)credativ(dot)ca
>> >>>>>>>> http://www.credativ.ca
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>> >>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>> >>>>>>>>
>> >>>>>>>>> Hi Mikko,
>> >>>>>>>>>
>> >>>>>>>>> Thank you for the explanation.
>> >>>>>>>>>
>> >>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
>> >>>>>>>>>
>> >>>>>>>>> If there are no objection, I'll do for it!
>> >>>>>>>>>
>> >>>>>>>>> regards,
>> >>>>>>>>> ----------------
>> >>>>>>>>> Tomonari Katsumata
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>> >>>>>>>>>> Before the patch the functionality was (if
>> >>>>>>>>>> binaryTransfer=true):
>> >>>>>>>>>> - prepared statements after prepareThreshold were done in
>> >>>>>>>>>> binary
>> >>>>> mode
>> >>>>>>>>>> - forceBinary=true could be enabled to force all statements
>> >>>>> (prepared +
>> >>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
>> >>> round-trip)
>> >>>>>>>>>>
>> >>>>>>>>>> After the patch in question (if binaryTransfer=true):
>> >>>>>>>>>> - All prepared statements have extra round-trip before on
>> >>>>>>>>>> first
>> >>> use
>> >>>>> and
>> >>>>>>>>> are immediately in binary mode
>> >>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
>> >>> statements
>> >>>>> to
>> >>>>>>>>> be executed in binary mode (at cost of extra round-trip)
>> >>>>>>>>>>
>> >>>>>>>>>> Since there are users that use prepared statements in one-shot
>> way
>> >>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>> >>>>> round-trip for
>> >>>>>>>>> them.
>> >>>>>>>>>>
>> >>>>>>>>>> As a side note: the forceBinary is meant only as a debug flag
>> >>> (used
>> >>>>> for
>> >>>>>>>>> example in pgjdbc tests), not for production use.
>> >>>>>>>>>>
>> >>>>>>>>>> So the only thing the before-state could not do was to use
>> binary
>> >>>>>>>>> transfers for the first prepared statement execution. This is
>> >>> because
>> >>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
>> >>> preparing
>> >>>>> before
>> >>>>>>>>> first use.
>> >>>>>>>>>>
>> >>>>>>>>>> I propose we revert that patch and instead add support for
>> >>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be
>> >>>>>>>>> done
>> >>>>> even for
>> >>>>>>>>> the first execution. That would allow users to keep controlling
>> the
>> >>>>>>>>> behavior instead of forcing binary transfers immediately?
>> >>>>>>>>>> Alternatively we can separate the binary transfer logic from
>> >>>>> statement
>> >>>>>>>>> prepare threshold and add a separate binaryThreshold.
>> >>>>>>>>>>
>> >>>>>>>>>> -Mikko
>> >>>>>>>>>> ________________________________________
>> >>>>>>>>>> From: pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@
>> postgresql.
>> >>>>> org>
>> >>>>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.
>> co.jp>
>> >>>>>>>>>> Sent: 21 February 2014 08:40
>> >>>>>>>>>> To: pgsql-jdbc@postgresql.org
>> >>>>>>>>>> Subject: [JDBC] About binaryTransfer.
>> >>>>>>>>>>
>> >>>>>>>>>> Hi,
>> >>>>>>>>>>
>> >>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>> >>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>> >>>>>>>>>> It does another behavior.
>> >>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>> >>>>>>>>>>
>> >>>>>>>>>> 9.2-1004:
>> >>>>>>>>>> Always flags = 16.
>> >>>>>>>>>> ----
>> >>>>>>>>>> 14:09:55.730 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@8232a5d,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> 14:09:55.878 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@34e671de,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> ----
>> >>>>>>>>>>
>> >>>>>>>>>> 9.3-1100
>> >>>>>>>>>> Repeatedly flags = 48 and 16.
>> >>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>> >>>>>>>>>> "flags=48" is extra executing.
>> >>>>>>>>>> ----
>> >>>>>>>>>> 14:20:34.991 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@19cdbc83,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=48
>> >>>>>>>>>> 14:20:34.992 (1) simple execute,
>> >>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>> >>>>>>>>> StatementResultHandler@304b0cbc,
>> >>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>> >>>>>>>>>> ----
>> >>>>>>>>>>
>> >>>>>>>>>> This change has caused by below commit.
>> >>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>> >>>>> dbf76c2d662896c5703cf20d7362e1
>> >>>>>>>>> d061e1e43f
>> >>>>>>>>>>
>> >>>>>>>>>> It seems that binarytransfer mode is good at dealing with
>> >>>>>>>>>> big-data(many columns?many rows?), but some packets are
>> >>>>>>>>>> sent/received for this function, right?
>> >>>>>>>>>>
>> >>>>>>>>>> I want to make 9.3-1100 driver do old behavior like 9.2-1004.
>> >>>>>>>>>> What can I do ?
>> >>>>>>>>>>
>> >>>>>>>>>> regards,
>> >>>>>>>>>> ----------------
>> >>>>>>>>>> Tomonari Katsumata
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> --
>> >>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> >>>>>>>>>> To make changes to your subscription:
>> >>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> --
>> >>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> >>>>>>>>> To make changes to your subscription:
>> >>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>
>> >
>>
>>
>>
>


Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,

Thank you for a lot!

 > Can you please test the current REL9_3_STABLE code ?

OK, I'll test it.

regards,
-------------
Tomonari Katsumata

(2014/04/23 23:56), Dave Cramer wrote:
 > Tomonari,
 >
 > I committed the code to REL9_3_STABLE. As the "new" functionality is
 > invoked by setting prepareThreshold to -1 it should not be intrusive.
 >
 > Can you please test the current REL9_3_STABLE code ?
 >
 > Dave Cramer
 >
 > dave.cramer(at)credativ(dot)ca
 > http://www.credativ.ca
 >
 >
 > On 21 April 2014 06:31, Dave Cramer <pg@fastcrypt.com> wrote:
 >
 >> Tomonari,
 >>
 >> I'm hesitant to apply the first patch, as the static variable means
every
 >> statement will have the same behaviour. Think about this. What if
another
 >> statement sets it to false after you have set it to true ?
 >>
 >> You have to keep in mind there is only copy of the driver inside a JVM.
 >>
 >>
 >>
 >>
 >>
 >> Dave Cramer
 >>
 >> dave.cramer(at)credativ(dot)ca
 >> http://www.credativ.ca
 >>
 >>
 >> On 17 April 2014 11:29, Tomonari Katsumata
<t.katsumata1122@gmail.com>wrote:
 >>
 >>> Hi Dave,
 >>>
 >>> Thank you for check.
 >>>
 >>>> We still have to deal with the static variable ForceBinaryTransfer. It
 >>> has
 >>>> to be per statement. The static variable will change the behaviour of
 >>> all
 >>>> statements.
 >>>>
 >>>> It should also be named forceBinaryTransfer.
 >>>>
 >>> I've misunderstood what you say.
 >>> Now I could understand it.
 >>>
 >>> I changed public variable "forceBinaryTransfers" to
 >>> static variable "ForceBinaryTransfers" .
 >>> Please check fix_ForceBinaryTranfers-part2.patch.
 >>> This patch is for current master(*1).
 >>> (*1)0eadcb873c68715cc3d0e9478c13ce3e38b798ae
 >>>
 >>> Because this patch is for new feature, I think
 >>> it is not necessary to be applyed to REL9_3_STABLE.
 >>> But I want to apply a patch which I sent in last mail(*2)
 >>> to REL9_3_STABLE for resolving performance problem.
 >>> (*2) sending again. see attached
 >>> fix_ForceBinaryTranfers-for-93stable.patch
 >>>
 >>> Still am I missing something?
 >>>
 >>> regards,
 >>> -----------------
 >>> Tomonari Katsumata
 >>>
 >>>>
 >>>> Dave Cramer
 >>>>
 >>>> dave.cramer(at)credativ(dot)ca
 >>>> http://www.credativ.ca
 >>>>
 >>>>
 >>>> On 17 April 2014 05:15, Tomonari Katsumata
 >>>> <katsumata.tomonari@po.ntts.co.jp
 >>>>> wrote:
 >>>>
 >>>>> Hi Dave, Mikko,
 >>>>>
 >>>>> Sorry for slow response.
 >>>>>
 >>>>> Mikko, thanks for cleaning things up.
 >>>>> My thought is all that Mikko says.
 >>>>>
 >>>>>
 >>>>>>>  So the desired behaviour you want is what? You want the first
query
 >>>>>>> to
 >>>>>>> be able to use binary, or not ?
 >>>>>>>
 >>>>> I don't need using binary transfer for the first query.
 >>>>> But someone need and added this feature, I've thought to
 >>>>> remain this feature.
 >>>>>
 >>>>>
 >>>>>> I think the only problem with Tomonari's patch is some conventions
 >>> such
 >>>>> as
 >>>>>> Capitalization of the first letter, and the use of a static field in
 >>>>>> the
 >>>>>> statement as opposed to a per statement setting
 >>>>>>
 >>>>> I've changed the behavior drastically for including
 >>>>> both "first query binaryTransfer" and "No extra round-trips".
 >>>>> As Dave says, this may cause some trouble...
 >>>>>
 >>>>> Then, I create a new patch for REL9_3_STABLE.
 >>>>> Please see attached patch.
 >>>>> This patch will just reduce extra round-trips.
 >>>>> A extra round-trip would occur only once, but this can not be helped.
 >>>>>
 >>>>> regards,
 >>>>> ----------------
 >>>>> Tomonari Katsumata
 >>>>>
 >>>>>
 >>>>> (2014/04/15 22:12), Dave Cramer wrote:
 >>>>>> Mikko,
 >>>>>>
 >>>>>> Thanks for clearing that up.
 >>>>>>
 >>>>>> I think the only problem with Tomonari's patch is some conventions
 >>> such
 >>>>> as
 >>>>>> Capitalization of the first letter, and the use of a static field in
 >>>>>> the
 >>>>>> statement as opposed to a per statement setting
 >>>>>>
 >>>>>>
 >>>>>>
 >>>>>> Dave Cramer
 >>>>>>
 >>>>>> dave.cramer(at)credativ(dot)ca
 >>>>>> http://www.credativ.ca
 >>>>>>
 >>>>>>
 >>>>>> On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@
 >>>>> nitorcreations.com>wrote:
 >>>>>>
 >>>>>>>  I think the changes in the driver go like this:
 >>>>>>>
 >>>>>>>
 >>>>>>>  1) initial binary transfer implementation
 >>>>>>>
 >>>>>>> - first n queries use text and after that binary (no extra
 >>>>>>> round-trips)
 >>>>>>>
 >>>>>>> - there was a debug flag to enable binary transfers for first query
 >>>>> (with
 >>>>>>> the cost of extra round-trip)
 >>>>>>>
 >>>>>>>
 >>>>>>>  2) someone wanted the binary transfers for one-shot operations too
 >>>>>>>
 >>>>>>> - but modified the code so that the extra driver-server round trip
 >>>>>>> cost
 >>>>> is
 >>>>>>> now on _every_ execution of prepared statement
 >>>>>>>
 >>>>>>>
 >>>>>>>  3) tomonari created a patch the fixes the extra round-trip but
 >>> still
 >>>>>>> allows binary transfers for first query - all configurable
 >>>>>>>
 >>>>>>>
 >>>>>>>  Now the request is to either revert 2) change or apply 3) change.
 >>> The
 >>>>>>> extra round-trip between each execution is really a killer for many
 >>>>>>> installations.
 >>>>>>>
 >>>>>>>
 >>>>>>>  -Mikko
 >>>>>>>  ------------------------------
 >>>>>>> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of
 >>> Dave
 >>>>>>> Cramer <pg@fastcrypt.com>
 >>>>>>> *Sent:* 15 April 2014 15:34
 >>>>>>> *To:* Tomonari Katsumata
 >>>>>>> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
 >>>>>>> *Subject:* Re: [JDBC] About binaryTransfer.
 >>>>>
 >>>>>>>
 >>>>>>>  Tomonari,
 >>>>>>>
 >>>>>>>  So the desired behaviour you want is what? You want the first
query
 >>>>>>> to
 >>>>>>> be able to use binary, or not ?
 >>>>>>>
 >>>>>>>  Dave
 >>>>>>>
 >>>>>>> Dave Cramer
 >>>>>>>
 >>>>>>> dave.cramer(at)credativ(dot)ca
 >>>>>>> http://www.credativ.ca
 >>>>>>>
 >>>>>>>
 >>>>>>> On 15 April 2014 04:20, Tomonari Katsumata <
 >>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
 >>>>>>>
 >>>>>>>> Hi Dave,
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>> I pulled this into master.
 >>>>>>>>>
 >>>>>>>>  Thanks for merging my fix against master!
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>> I'm not quite sure I want this back patched into
 >>>>>>>>> 9.3 though. This is new behaviour.
 >>>>>>>>>
 >>>>>>>>  I think the original change(*) was done for rare case.
 >>>>>>>> But this change would cause a performance issue
 >>>>>>>> in many cases like me.
 >>>>>>>>
 >>>>>>>> So I want this fix into 9.3.
 >>>>>>>> If we cannot do so, we should revert
 >>>>>>>> the original change(*) at least.
 >>>>>>>> (*)https://github.com/pgjdbc/pgjdbc/commit/
 >>>>> dbf76c2d662896c5703cf20d7362e1
 >>>>>>>> d061e1e43f
 >>>>>>>>
 >>>>>>>> regards,
 >>>>>>>> ---------------
 >>>>>>>> Tomonari Katsumata
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>>
 >>>>>>>>>
 >>>>>>>>> Dave Cramer
 >>>>>>>>>
 >>>>>>>>> dave.cramer(at)credativ(dot)ca
 >>>>>>>>> http://www.credativ.ca
 >>>>>>>>>
 >>>>>>>>>
 >>>>>>>>> On 3 April 2014 04:37, Tomonari Katsumata
 >>>>>>>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
 >>>>>>>>>
 >>>>>>>>>> Hi Dave,
 >>>>>>>>>>
 >>>>>>>>>> Did you check my pull-request?
 >>>>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
 >>>>>>>>>>
 >>>>>>>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
 >>>>>>>>>> about setQueryTimeout fixed by Heikki(*).
 >>>>>>>>>> (*)
 >>>>>>>>>> http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
 >>>>>>>>>>
 >>>>>>>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
 >>>>>>>>>> like 9.2-1004 as soon as possible.
 >>>>>>>>>>
 >>>>>>>>>> Could you check it please?
 >>>>>>>>>> If I'm missing something, please tell me it!
 >>>>>>>>>>
 >>>>>>>>>> regards,
 >>>>>>>>>> ------------------------
 >>>>>>>>>> Tomonari Katsumata
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
 >>>>>>>>>>> Hi Dave,
 >>>>>>>>>>>
 >>>>>>>>>>> I've misunderstood the behavior of this problem.
 >>>>>>>>>>> The main problem is that the Describe message is send/receive
 >>>>>>>>>>> repeatedly, if user don't want to do so.
 >>>>>>>>>>>
 >>>>>>>>>>> The pull-request I've sent before(#124) didn't solve the
 >>> problem.
 >>>>>>>>>>>
 >>>>>>>>>>> Now, I fixed it and sent a new pull-request.
 >>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
 >>>>>>>>>>>
 >>>>>>>>>>> Please check it!
 >>>>>>>>>>>
 >>>>>>>>>>> regards,
 >>>>>>>>>>> ----------------------
 >>>>>>>>>>> Tomonari Katsumata
 >>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
 >>>>>>>>>>>> Hi Dave,
 >>>>>>>>>>>> I sent a Pull Request about this.
 >>>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
 >>>>>>>>>>>>
 >>>>>>>>>>>> regards,
 >>>>>>>>>>>> -------------------
 >>>>>>>>>>>> Tomonari Katsumata
 >>>>>>>>>>>>
 >>>>>>>>>>>>
 >>>>>>>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
 >>>>>>>>>>>>
 >>>>>>>>>>>>> Please submit a Pull Request
 >>>>>>>>>>>>>
 >>>>>>>>>>>>> Dave Cramer
 >>>>>>>>>>>>>
 >>>>>>>>>>>>> dave.cramer(at)credativ(dot)ca
 >>>>>>>>>>>>> http://www.credativ.ca
 >>>>>>>>>>>>>
 >>>>>>>>>>>>>
 >>>>>>>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
 >>>>>>>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
 >>>>>>>>>>>>>
 >>>>>>>>>>>>>> Hi Mikko,
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>> Thank you for the explanation.
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>> If there are no objection, I'll do for it!
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>> regards,
 >>>>>>>>>>>>>> ----------------
 >>>>>>>>>>>>>> Tomonari Katsumata
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
 >>>>>>>>>>>>>>> Before the patch the functionality was (if
 >>>>>>>>>>>>>>> binaryTransfer=true):
 >>>>>>>>>>>>>>> - prepared statements after prepareThreshold were done in
 >>>>>>>>>>>>>>> binary
 >>>>>>>>>> mode
 >>>>>>>>>>>>>>> - forceBinary=true could be enabled to force all statements
 >>>>>>>>>> (prepared +
 >>>>>>>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
 >>>>>>>> round-trip)
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> After the patch in question (if binaryTransfer=true):
 >>>>>>>>>>>>>>> - All prepared statements have extra round-trip before on
 >>>>>>>>>>>>>>> first
 >>>>>>>> use
 >>>>>>>>>> and
 >>>>>>>>>>>>>> are immediately in binary mode
 >>>>>>>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
 >>>>>>>> statements
 >>>>>>>>>> to
 >>>>>>>>>>>>>> be executed in binary mode (at cost of extra round-trip)
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> Since there are users that use prepared statements in
 >>> one-shot
 >>>>> way
 >>>>>>>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
 >>>>>>>>>> round-trip for
 >>>>>>>>>>>>>> them.
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> As a side note: the forceBinary is meant only as a debug
 >>> flag
 >>>>>>>> (used
 >>>>>>>>>> for
 >>>>>>>>>>>>>> example in pgjdbc tests), not for production use.
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> So the only thing the before-state could not do was to use
 >>>>> binary
 >>>>>>>>>>>>>> transfers for the first prepared statement execution.
This is
 >>>>>>>> because
 >>>>>>>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
 >>>>>>>> preparing
 >>>>>>>>>> before
 >>>>>>>>>>>>>> first use.
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> I propose we revert that patch and instead add support for
 >>>>>>>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be
 >>>>>>>>>>>>>> done
 >>>>>>>>>> even for
 >>>>>>>>>>>>>> the first execution. That would allow users to keep
 >>> controlling
 >>>>> the
 >>>>>>>>>>>>>> behavior instead of forcing binary transfers immediately?
 >>>>>>>>>>>>>>> Alternatively we can separate the binary transfer logic
from
 >>>>>>>>>> statement
 >>>>>>>>>>>>>> prepare threshold and add a separate binaryThreshold.
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> -Mikko
 >>>>>>>>>>>>>>> ________________________________________
 >>>>>>>>>>>>>>> From: pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@
 >>>>> postgresql.
 >>>>>>>>>> org>
 >>>>>>>>>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.
 >>>>> co.jp>
 >>>>>>>>>>>>>>> Sent: 21 February 2014 08:40
 >>>>>>>>>>>>>>> To: pgsql-jdbc@postgresql.org
 >>>>>>>>>>>>>>> Subject: [JDBC] About binaryTransfer.
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> Hi,
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
 >>>>>>>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
 >>>>>>>>>>>>>>> It does another behavior.
 >>>>>>>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> 9.2-1004:
 >>>>>>>>>>>>>>> Always flags = 16.
 >>>>>>>>>>>>>>> ----
 >>>>>>>>>>>>>>> 14:09:55.730 (1) simple execute,
 >>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>>>>>>> StatementResultHandler@8232a5d,
 >>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>>>>>>>>>> 14:09:55.878 (1) simple execute,
 >>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>>>>>>> StatementResultHandler@34e671de,
 >>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>>>>>>>>>> ----
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> 9.3-1100
 >>>>>>>>>>>>>>> Repeatedly flags = 48 and 16.
 >>>>>>>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
 >>>>>>>>>>>>>>> "flags=48" is extra executing.
 >>>>>>>>>>>>>>> ----
 >>>>>>>>>>>>>>> 14:20:34.991 (1) simple execute,
 >>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>>>>>>> StatementResultHandler@19cdbc83,
 >>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=48
 >>>>>>>>>>>>>>> 14:20:34.992 (1) simple execute,
 >>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
 >>>>>>>>>>>>>> StatementResultHandler@304b0cbc,
 >>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
 >>>>>>>>>>>>>>> ----
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> This change has caused by below commit.
 >>>>>>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
 >>>>>>>>>> dbf76c2d662896c5703cf20d7362e1
 >>>>>>>>>>>>>> d061e1e43f
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> It seems that binarytransfer mode is good at dealing with
 >>>>>>>>>>>>>>> big-data(many columns?many rows?), but some packets are
 >>>>>>>>>>>>>>> sent/received for this function, right?
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> I want to make 9.3-1100 driver do old behavior like
 >>> 9.2-1004.
 >>>>>>>>>>>>>>> What can I do ?
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> regards,
 >>>>>>>>>>>>>>> ----------------
 >>>>>>>>>>>>>>> Tomonari Katsumata
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>> --
 >>>>>>>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org
 >>> )
 >>>>>>>>>>>>>>> To make changes to your subscription:
 >>>>>>>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>> --
 >>>>>>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
 >>>>>>>>>>>>>> To make changes to your subscription:
 >>>>>>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>
 >>>>>>>>>>>>>
 >>>>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>
 >>>>>>
 >>>>>
 >>>>>
 >>>>>
 >>>>
 >>>
 >>
 >>
 >




Re: About binaryTransfer.

От
Tomonari Katsumata
Дата:
Hi Dave,

>> Can you please test the current REL9_3_STABLE code ?
>
>OK, I'll test it.
>
I've done it.
It seems good!

All regression tests are passed.
And also the performance is improved.
I tried to simple test like below.

0.preparation
create table tbl(i int);
insert into tbl values(generate_series(1,100));

In Java program--------------------------
1. prepare statement
stmt = conn.prepareStatement("SELECT * FROM tbl WHERE i < ?")

2. bind
stmt.setInt(1,1);

3. execute 1000 times
for(int i = 0 ; i < 1000; i++ )
{
  stmt.executeQuery();
}
-----------------------------------------------

The result is ...
9.3-1101: 1.619s
9.3_stable:1.049s

I'm happy to fix this.
Thank you very much!

regards,
--------------
Tomonari Katsumata

2014-04-24 17:23 GMT+09:00 Tomonari Katsumata <katsumata.tomonari@po.ntts.co.jp>:
Hi Dave,

Thank you for a lot!


> Can you please test the current REL9_3_STABLE code ?

OK, I'll test it.

regards,
-------------
Tomonari Katsumata


(2014/04/23 23:56), Dave Cramer wrote:
> Tomonari,
>
> I committed the code to REL9_3_STABLE. As the "new" functionality is
> invoked by setting prepareThreshold to -1 it should not be intrusive.
>
> Can you please test the current REL9_3_STABLE code ?
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On 21 April 2014 06:31, Dave Cramer <pg@fastcrypt.com> wrote:
>
>> Tomonari,
>>
>> I'm hesitant to apply the first patch, as the static variable means every
>> statement will have the same behaviour. Think about this. What if another
>> statement sets it to false after you have set it to true ?
>>
>> You have to keep in mind there is only copy of the driver inside a JVM.
>>
>>
>>
>>
>>
>> Dave Cramer
>>
>> dave.cramer(at)credativ(dot)ca
>> http://www.credativ.ca
>>
>>
>> On 17 April 2014 11:29, Tomonari Katsumata <t.katsumata1122@gmail.com>wrote:
>>
>>> Hi Dave,
>>>
>>> Thank you for check.
>>>
>>>> We still have to deal with the static variable ForceBinaryTransfer. It
>>> has
>>>> to be per statement. The static variable will change the behaviour of
>>> all
>>>> statements.
>>>>
>>>> It should also be named forceBinaryTransfer.
>>>>
>>> I've misunderstood what you say.
>>> Now I could understand it.
>>>
>>> I changed public variable "forceBinaryTransfers" to
>>> static variable "ForceBinaryTransfers" .
>>> Please check fix_ForceBinaryTranfers-part2.patch.
>>> This patch is for current master(*1).
>>> (*1)0eadcb873c68715cc3d0e9478c13ce3e38b798ae
>>>
>>> Because this patch is for new feature, I think
>>> it is not necessary to be applyed to REL9_3_STABLE.
>>> But I want to apply a patch which I sent in last mail(*2)
>>> to REL9_3_STABLE for resolving performance problem.
>>> (*2) sending again. see attached
>>> fix_ForceBinaryTranfers-for-93stable.patch
>>>
>>> Still am I missing something?
>>>
>>> regards,
>>> -----------------
>>> Tomonari Katsumata
>>>
>>>>
>>>> Dave Cramer
>>>>
>>>> dave.cramer(at)credativ(dot)ca
>>>> http://www.credativ.ca
>>>>
>>>>
>>>> On 17 April 2014 05:15, Tomonari Katsumata
>>>> <katsumata.tomonari@po.ntts.co.jp
>>>>> wrote:
>>>>
>>>>> Hi Dave, Mikko,
>>>>>
>>>>> Sorry for slow response.
>>>>>
>>>>> Mikko, thanks for cleaning things up.
>>>>> My thought is all that Mikko says.
>>>>>
>>>>>
>>>>>>>  So the desired behaviour you want is what? You want the first query
>>>>>>> to
>>>>>>> be able to use binary, or not ?
>>>>>>>
>>>>> I don't need using binary transfer for the first query.
>>>>> But someone need and added this feature, I've thought to
>>>>> remain this feature.
>>>>>
>>>>>
>>>>>> I think the only problem with Tomonari's patch is some conventions
>>> such
>>>>> as
>>>>>> Capitalization of the first letter, and the use of a static field in
>>>>>> the
>>>>>> statement as opposed to a per statement setting
>>>>>>
>>>>> I've changed the behavior drastically for including
>>>>> both "first query binaryTransfer" and "No extra round-trips".
>>>>> As Dave says, this may cause some trouble...
>>>>>
>>>>> Then, I create a new patch for REL9_3_STABLE.
>>>>> Please see attached patch.
>>>>> This patch will just reduce extra round-trips.
>>>>> A extra round-trip would occur only once, but this can not be helped.
>>>>>
>>>>> regards,
>>>>> ----------------
>>>>> Tomonari Katsumata
>>>>>
>>>>>
>>>>> (2014/04/15 22:12), Dave Cramer wrote:
>>>>>> Mikko,
>>>>>>
>>>>>> Thanks for clearing that up.
>>>>>>
>>>>>> I think the only problem with Tomonari's patch is some conventions
>>> such
>>>>> as
>>>>>> Capitalization of the first letter, and the use of a static field in
>>>>>> the
>>>>>> statement as opposed to a per statement setting
>>>>>>
>>>>>>
>>>>>>
>>>>>> Dave Cramer
>>>>>>
>>>>>> dave.cramer(at)credativ(dot)ca
>>>>>> http://www.credativ.ca
>>>>>>
>>>>>>
>>>>>> On 15 April 2014 08:53, Mikko Tiihonen <Mikko.Tiihonen@
>>>>> nitorcreations.com>wrote:
>>>>>>
>>>>>>>  I think the changes in the driver go like this:
>>>>>>>
>>>>>>>
>>>>>>>  1) initial binary transfer implementation
>>>>>>>
>>>>>>> - first n queries use text and after that binary (no extra
>>>>>>> round-trips)
>>>>>>>
>>>>>>> - there was a debug flag to enable binary transfers for first query
>>>>> (with
>>>>>>> the cost of extra round-trip)
>>>>>>>
>>>>>>>
>>>>>>>  2) someone wanted the binary transfers for one-shot operations too
>>>>>>>
>>>>>>> - but modified the code so that the extra driver-server round trip
>>>>>>> cost
>>>>> is
>>>>>>> now on _every_ execution of prepared statement
>>>>>>>
>>>>>>>
>>>>>>>  3) tomonari created a patch the fixes the extra round-trip but
>>> still
>>>>>>> allows binary transfers for first query - all configurable
>>>>>>>
>>>>>>>
>>>>>>>  Now the request is to either revert 2) change or apply 3) change.
>>> The
>>>>>>> extra round-trip between each execution is really a killer for many
>>>>>>> installations.
>>>>>>>
>>>>>>>
>>>>>>>  -Mikko
>>>>>>>  ------------------------------
>>>>>>> *From:* davecramer@gmail.com <davecramer@gmail.com> on behalf of
>>> Dave
>>>>>>> Cramer <pg@fastcrypt.com>
>>>>>>> *Sent:* 15 April 2014 15:34
>>>>>>> *To:* Tomonari Katsumata
>>>>>>> *Cc:* Tomonari Katsumata; Mikko Tiihonen; pgsql-jdbc@postgresql.org
>>>>>>> *Subject:* Re: [JDBC] About binaryTransfer.
>>>>>
>>>>>>>
>>>>>>>  Tomonari,
>>>>>>>
>>>>>>>  So the desired behaviour you want is what? You want the first query
>>>>>>> to
>>>>>>> be able to use binary, or not ?
>>>>>>>
>>>>>>>  Dave
>>>>>>>
>>>>>>> Dave Cramer
>>>>>>>
>>>>>>> dave.cramer(at)credativ(dot)ca
>>>>>>> http://www.credativ.ca
>>>>>>>
>>>>>>>
>>>>>>> On 15 April 2014 04:20, Tomonari Katsumata <
>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>>>>>>
>>>>>>>> Hi Dave,
>>>>>>>>
>>>>>>>>
>>>>>>>>> I pulled this into master.
>>>>>>>>>
>>>>>>>>  Thanks for merging my fix against master!
>>>>>>>>
>>>>>>>>
>>>>>>>>> I'm not quite sure I want this back patched into
>>>>>>>>> 9.3 though. This is new behaviour.
>>>>>>>>>
>>>>>>>>  I think the original change(*) was done for rare case.
>>>>>>>> But this change would cause a performance issue
>>>>>>>> in many cases like me.
>>>>>>>>
>>>>>>>> So I want this fix into 9.3.
>>>>>>>> If we cannot do so, we should revert
>>>>>>>> the original change(*) at least.
>>>>>>>> (*)https://github.com/pgjdbc/pgjdbc/commit/
>>>>> dbf76c2d662896c5703cf20d7362e1
>>>>>>>> d061e1e43f
>>>>>>>>
>>>>>>>> regards,
>>>>>>>> ---------------
>>>>>>>> Tomonari Katsumata
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Dave Cramer
>>>>>>>>>
>>>>>>>>> dave.cramer(at)credativ(dot)ca
>>>>>>>>> http://www.credativ.ca
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 3 April 2014 04:37, Tomonari Katsumata
>>>>>>>>> <katsumata.tomonari@po.ntts.co.jp>wrote:
>>>>>>>>>
>>>>>>>>>> Hi Dave,
>>>>>>>>>>
>>>>>>>>>> Did you check my pull-request?
>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>>>>>>>>
>>>>>>>>>> I don't want to use 9.2-1004 Driver, because it has some bugs
>>>>>>>>>> about setQueryTimeout fixed by Heikki(*).
>>>>>>>>>> (*)
>>>>>>>>>> http://www.postgresql.org/message-id/52A0D28A.7040902@vmware.com
>>>>>>>>>>
>>>>>>>>>> So I need the PostgreSQL Driver 9.3-1101 have good performance
>>>>>>>>>> like 9.2-1004 as soon as possible.
>>>>>>>>>>
>>>>>>>>>> Could you check it please?
>>>>>>>>>> If I'm missing something, please tell me it!
>>>>>>>>>>
>>>>>>>>>> regards,
>>>>>>>>>> ------------------------
>>>>>>>>>> Tomonari Katsumata
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> (2014/03/06 18:13), Tomonari Katsumata wrote:
>>>>>>>>>>> Hi Dave,
>>>>>>>>>>>
>>>>>>>>>>> I've misunderstood the behavior of this problem.
>>>>>>>>>>> The main problem is that the Describe message is send/receive
>>>>>>>>>>> repeatedly, if user don't want to do so.
>>>>>>>>>>>
>>>>>>>>>>> The pull-request I've sent before(#124) didn't solve the
>>> problem.
>>>>>>>>>>>
>>>>>>>>>>> Now, I fixed it and sent a new pull-request.
>>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/128
>>>>>>>>>>>
>>>>>>>>>>> Please check it!
>>>>>>>>>>>
>>>>>>>>>>> regards,
>>>>>>>>>>> ----------------------
>>>>>>>>>>> Tomonari Katsumata
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> (2014/02/23 9:34), Tomonari Katsumata wrote:
>>>>>>>>>>>> Hi Dave,
>>>>>>>>>>>> I sent a Pull Request about this.
>>>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/pull/124
>>>>>>>>>>>>
>>>>>>>>>>>> regards,
>>>>>>>>>>>> -------------------
>>>>>>>>>>>> Tomonari Katsumata
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 2014-02-21 21:09 GMT+09:00 Dave Cramer <pg@fastcrypt.com>:
>>>>>>>>>>>>
>>>>>>>>>>>>> Please submit a Pull Request
>>>>>>>>>>>>>
>>>>>>>>>>>>> Dave Cramer
>>>>>>>>>>>>>
>>>>>>>>>>>>> dave.cramer(at)credativ(dot)ca
>>>>>>>>>>>>> http://www.credativ.ca
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Feb 21, 2014 at 3:57 AM, Tomonari Katsumata <
>>>>>>>>>>>>> katsumata.tomonari@po.ntts.co.jp> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Mikko,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you for the explanation.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I agree with your proposal adding prepareThreshold=-1.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If there are no objection, I'll do for it!
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> regards,
>>>>>>>>>>>>>> ----------------
>>>>>>>>>>>>>> Tomonari Katsumata
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (2014/02/21 16:50), Mikko Tiihonen wrote:
>>>>>>>>>>>>>>> Before the patch the functionality was (if
>>>>>>>>>>>>>>> binaryTransfer=true):
>>>>>>>>>>>>>>> - prepared statements after prepareThreshold were done in
>>>>>>>>>>>>>>> binary
>>>>>>>>>> mode
>>>>>>>>>>>>>>> - forceBinary=true could be enabled to force all statements
>>>>>>>>>> (prepared +
>>>>>>>>>>>>>> one-shot) to be executed in binary mode (at cost of extra
>>>>>>>> round-trip)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> After the patch in question (if binaryTransfer=true):
>>>>>>>>>>>>>>> - All prepared statements have extra round-trip before on
>>>>>>>>>>>>>>> first
>>>>>>>> use
>>>>>>>>>> and
>>>>>>>>>>>>>> are immediately in binary mode
>>>>>>>>>>>>>>> - forceBinary=true can be enabled to force also one-shot
>>>>>>>> statements
>>>>>>>>>> to
>>>>>>>>>>>>>> be executed in binary mode (at cost of extra round-trip)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Since there are users that use prepared statements in
>>> one-shot
>>>>> way
>>>>>>>>>>>>>> (prepare+execute+discard) the patch adds a mandatory extra
>>>>>>>>>> round-trip for
>>>>>>>>>>>>>> them.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> As a side note: the forceBinary is meant only as a debug
>>> flag
>>>>>>>> (used
>>>>>>>>>> for
>>>>>>>>>>>>>> example in pgjdbc tests), not for production use.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> So the only thing the before-state could not do was to use
>>>>> binary
>>>>>>>>>>>>>> transfers for the first prepared statement execution. This is
>>>>>>>> because
>>>>>>>>>>>>>> setting prepareThreshold=0 disables the prepare instead of
>>>>>>>> preparing
>>>>>>>>>> before
>>>>>>>>>>>>>> first use.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I propose we revert that patch and instead add support for
>>>>>>>>>>>>>> prepareThreshold=-1 which would force prepare+describe to be
>>>>>>>>>>>>>> done
>>>>>>>>>> even for
>>>>>>>>>>>>>> the first execution. That would allow users to keep
>>> controlling
>>>>> the
>>>>>>>>>>>>>> behavior instead of forcing binary transfers immediately?
>>>>>>>>>>>>>>> Alternatively we can separate the binary transfer logic from
>>>>>>>>>> statement
>>>>>>>>>>>>>> prepare threshold and add a separate binaryThreshold.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -Mikko
>>>>>>>>>>>>>>> ________________________________________
>>>>>>>>>>>>>>> From: pgsql-jdbc-owner@postgresql.org<pgsql-jdbc-owner@
>>>>> postgresql.
>>>>>>>>>> org>
>>>>>>>>>>>>>> on behalf of Tomonari Katsumata <katsumata.tomonari@po.ntts.
>>>>> co.jp>
>>>>>>>>>>>>>>> Sent: 21 February 2014 08:40
>>>>>>>>>>>>>>> To: pgsql-jdbc@postgresql.org
>>>>>>>>>>>>>>> Subject: [JDBC] About binaryTransfer.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I have a peformance trouble with 9.3-1100 driver.
>>>>>>>>>>>>>>> Running same application(*) with 9.2-1004 and 9.3-1100,
>>>>>>>>>>>>>>> It does another behavior.
>>>>>>>>>>>>>>> (*) Retrieving 9990 rows with preparedStatement.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 9.2-1004:
>>>>>>>>>>>>>>> Always flags = 16.
>>>>>>>>>>>>>>> ----
>>>>>>>>>>>>>>> 14:09:55.730 (1) simple execute,
>>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>>>>>>> StatementResultHandler@8232a5d,
>>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>>>>>>>>>> 14:09:55.878 (1) simple execute,
>>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>>>>>>> StatementResultHandler@34e671de,
>>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>>>>>>>>>> ----
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 9.3-1100
>>>>>>>>>>>>>>> Repeatedly flags = 48 and 16.
>>>>>>>>>>>>>>> The count of "flags=16" is same with 9.2-1004, so
>>>>>>>>>>>>>>> "flags=48" is extra executing.
>>>>>>>>>>>>>>> ----
>>>>>>>>>>>>>>> 14:20:34.991 (1) simple execute,
>>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>>>>>>> StatementResultHandler@19cdbc83,
>>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=48
>>>>>>>>>>>>>>> 14:20:34.992 (1) simple execute,
>>>>>>>>>>>>>>> handler=org.postgresql.jdbc2.AbstractJdbc2Statement$
>>>>>>>>>>>>>> StatementResultHandler@304b0cbc,
>>>>>>>>>>>>>>> maxRows=0, fetchSize=0, flags=16
>>>>>>>>>>>>>>> ----
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> This change has caused by below commit.
>>>>>>>>>>>>>>> https://github.com/pgjdbc/pgjdbc/commit/
>>>>>>>>>> dbf76c2d662896c5703cf20d7362e1
>>>>>>>>>>>>>> d061e1e43f
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> It seems that binarytransfer mode is good at dealing with
>>>>>>>>>>>>>>> big-data(many columns?many rows?), but some packets are
>>>>>>>>>>>>>>> sent/received for this function, right?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I want to make 9.3-1100 driver do old behavior like
>>> 9.2-1004.
>>>>>>>>>>>>>>> What can I do ?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> regards,
>>>>>>>>>>>>>>> ----------------
>>>>>>>>>>>>>>> Tomonari Katsumata
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org
>>> )
>>>>>>>>>>>>>>> To make changes to your subscription:
>>>>>>>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>>>>>>>>>>>>>> To make changes to your subscription:
>>>>>>>>>>>>>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>