Re: About binaryTransfer.

Поиск
Список
Период
Сортировка
От Tomonari Katsumata
Тема Re: About binaryTransfer.
Дата
Msg-id 5358C9EF.6090002@po.ntts.co.jp
обсуждение исходный текст
Ответ на Re: About binaryTransfer.  (Dave Cramer <pg@fastcrypt.com>)
Ответы Re: About binaryTransfer.  (Tomonari Katsumata <t.katsumata1122@gmail.com>)
Список pgsql-jdbc
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
 >>>>>>>>>>>>>>
 >>>>>>>>>>>>>
 >>>>>>>>>>>>>
 >>>>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>>
 >>>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>>
 >>>>>>>
 >>>>>>
 >>>>>
 >>>>>
 >>>>>
 >>>>
 >>>
 >>
 >>
 >




В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Dave Cramer
Дата:
Сообщение: Re: About binaryTransfer.
Следующее
От: Karthik Segpi
Дата:
Сообщение: Re: [INTERFACES] JDBC API to send SimpleQuery ('Q')?