[pgpool-hackers: 3359] Re: [pgpool-committers: 5948] pgpool: Multiple performance enhancements especially for of the large

Tatsuo Ishii ishii at sraoss.co.jp
Fri Aug 2 09:10:33 JST 2019


Thank you Usama!

I have updated the 4.1 release note to reflect this patch.
Compiled HTML files can be seen at:
http://tatsuo-ishii.github.io/pgpool-II/current/release-4-1.html

Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp

From: Muhammad Usama <m.usama at gmail.com>
Subject: [pgpool-committers: 5948] pgpool: Multiple performance enhancements especially for of the large
Date: Thu, 01 Aug 2019 20:27:36 +0000
Message-ID: <E1htHfk-0006TZ-63 at gothos.postgresql.org>

> Multiple performance enhancements especially for of the large
> INSERT and UPDATE statements
> 
> Pgpool-II only needs very little information, especially for the INSERT and
> UPDATE statements to decide where it needs to send the query.
> For example: In master-slave mode, for the INSERT statements Pgpool-II only
> requires the relation name referenced in the statement while it doesn't care
> much about the column values and other parameters. But since the parser we use
> in Pgpool-II is taken from PostgreSQL source which parses the complete query
> including the value lists which seems harmless for smaller statements but in
> case of INSERT and UPDATE with lots of column values and large data in value
> items, consumes significant time.
> 
> So the idea here is to short circuit the INSERT and UPDATE statement parsing as
> soon as we have the required information. For that purpose, the commit adds the
> second minimal parser that gets invoked in master-slave mode and tries to
> extract the performance for large INSERT and UPDATE statements.
> 
> Apart from the second parser addition, following changes aiming towards the
> performance enhancements are also part of the commit.
> 
> 1-Some of the if statements in pool_where_to_send() function are re-arranged to
> make sure the more expensive functions calls, pattern_compare()
> and pool_has_function_call() should only be made when they are
> absolutely necessary.
> 
> 2- Eliminates the raw_parser() calls in case of un-recognized queries. Instead
> of invoking the parser on "dummy read" and "dummy write" statements, the commit
> adds the functions to return the pre-built parse_trees for these dummy queries.
> 
> 3-- strlen() call is removed from scanner_init() function and is passed to it
> as an argument. The reason being we already have the query length in most cases
> before invoking the parser so why waste CPU cycles on it. Again this becomes
> significant in case of large query strings.
> 
> 4- Removes some of the unnecessary calls of pool_is_likely_select() function.
> 
> Branch
> ------
> master
> 
> Details
> -------
> https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=310c5c4a289cbe6cee01abef7d2e7bc3550944fb
> 
> Modified Files
> --------------
> Makefile.in                                        |     1 +
> configure                                          |    59 +
> configure.ac                                       |    12 +
> doc.ja/Makefile.in                                 |     1 +
> doc.ja/src/Makefile.in                             |     1 +
> doc.ja/src/sgml/Makefile.in                        |     1 +
> doc/Makefile.in                                    |     1 +
> doc/src/Makefile.in                                |     1 +
> doc/src/sgml/Makefile.in                           |     1 +
> src/Makefile.in                                    |     1 +
> src/context/pool_query_context.c                   |    42 +-
> src/include/Makefile.in                            |     1 +
> src/include/parser/gramparse.h                     |     6 +
> src/include/parser/parser.h                        |     5 +-
> src/include/parser/scanner.h                       |     1 +
> src/include/protocol/pool_proto_modules.h          |     2 -
> src/libs/Makefile.in                               |     1 +
> src/libs/pcp/Makefile.in                           |     1 +
> src/parser/Makefile.am                             |    10 +-
> src/parser/Makefile.in                             |    37 +-
> src/parser/README                                  |    49 +
> src/parser/gram.c                                  |  3255 +-
> src/parser/gram.y                                  |     7 +-
> src/parser/gram_minimal.c                          | 46971 +++++++++++++++++++
> src/parser/gram_minimal.h                          |  1053 +
> src/parser/gram_minimal.y                          | 16403 +++++++
> src/parser/gram_template.y                         | 16492 +++++++
> src/parser/parser.c                                |    84 +-
> src/parser/scan.c                                  |     2 +-
> src/parser/scan.l                                  |     2 +-
> src/protocol/pool_process_query.c                  |     2 +-
> src/protocol/pool_proto_modules.c                  |    35 +-
> .../tests/010.rewrite_timestamp/timestamp/main.c   |     2 +-
> .../regression/tests/017.node_0_is_down/test.sh    |     4 +-
> src/tools/Makefile.in                              |     1 +
> src/tools/pcp/Makefile.in                          |     1 +
> src/tools/pgenc/Makefile.in                        |     1 +
> src/tools/pgmd5/Makefile.in                        |     1 +
> src/tools/pgproto/Makefile.in                      |     1 +
> src/watchdog/Makefile.in                           |     1 +
> 40 files changed, 82852 insertions(+), 1700 deletions(-)
> 


More information about the pgpool-hackers mailing list