[pgpool-general: 2198] Re: Parallel Query Hangs w/ specific rows
Yugo Nagata
nagata at sraoss.co.jp
Tue Oct 15 14:33:24 JST 2013
Hi,
Thanks for your reporting and analyzing. I'll handle the problem. However, it may
take some time for me to resoleve sinse I have other issues now.
For analysis, could you please tell me the definition of table "my_table",
and contents of dist_def, replicate_def ?
On Mon, 14 Oct 2013 20:08:07 +0800
Fantix King <fantix.king at gmail.com> wrote:
> Hi,
>
> I met a pretty weird issue in our production use of pgpool-II 3.3.1.
> Executing SELECT through pgpool on some certain rows of a dist_def-ed table
> always hang - you have to kill the "psql".
>
> It keeps reproducing in our production system while I cannot find a similar
> report anywhere else. I'm still trying to reproduce this issue individually.
>
> My setup is like this:
>
> * 1 pgpool in parallel mode
> * 2 PostgreSQL 9.1.9 backends
> * 1 PostgreSQL 9.1.9 system db
>
> The table "my_table" is partitioned with "character_id" key column, where
> even number characters are on node #0, and odd number characters are on
> node #1. This query hangs:
>
> statement: SELECT my_table.id, my_table.character_id, my_table.my_col_one,
> my_table.my_col_two, my_table.quality, my_table.properties FROM my_table
> WHERE my_table.character_id = 100;
>
> I found that:
>
> * All other hanging queries (the same table) are on node #0 - even numbers
> * If I reduce any column from the SELECT list, the query works
> * Not all of the queries are hanging, e.g. character_id = 102 works fine
>
> Then I diff-ed the pgpool log querying row 100(-) and 102(+):
>
> 1 : ProcessFrontendResponse: kind from frontend Q(51)
> 2 : pool_unset_doing_extended_query_message: done
> 3 -: statement: SELECT my_table.id, my_table.character_id,
> my_table.my_col_one, my_table.my_col_two, my_table.quality,
> my_table.properties FROM my_table WHERE my_table.character_id = 100;
> 4 : pool_set_query_in_progress: done
> 5 : initSelectStmt: ANALYZE now(0)
> 6 : inside build_range_info num= 1 current_select=0
> 7 : inside build_range_info dist 0
> 8 : inside build_virtual_info dist state=P my_table
> 9 : append_virtual_table select=0,
> no=0,col=id,type=bigint,table=my_table,state=P,valid=-1
> 10 : append_virtual_table select=0,
> no=1,col=character_id,type=bigint,table=my_table,state=P,valid=-1
> 11 : append_virtual_table select=0,
> no=2,col=my_col_one,type=boolean,table=my_table,state=P,valid=-1
> 12 : append_virtual_table select=0,
> no=3,col=my_col_two,type=integer,table=my_table,state=P,valid=-1
> 13 : append_virtual_table select=0,
> no=4,col=quality,type=integer,table=my_table,state=P,valid=-1
> 14 : append_virtual_table select=0,
> no=5,col=properties,type=bytea,table=my_table,state=P,valid=-1
> ...
> 17 : pool_parallel_query: 0 th FD_SET: 19
> 18 : pool_parallel_query: 1 th FD_SET: 21
> 19 : pool_parallel_query: num_fds: 22
> 20 : read_kind_from_one_backend: read kind from 0 th backend T
> 21 : pool_parallel_exec: kind from backend: T
> 22 : pool_parallel_exec: dummy from backend: C
> 23 +: pool_parallel_query: 1 th FD_SET: 21
> 24 +: pool_parallel_query: num_fds: 22
> 25 : read_kind_from_one_backend: read kind from 1 th backend T
> 26 : pool_parallel_exec: dummy kind from backend: T
> 27 -: pool_parallel_exec: kind from backend: D 3
> 28 +: pool_parallel_exec: kind from backend: D 4
> 29 : pool_parallel_exec: kind from backend: C
> 30 : pool_unset_query_in_progress: done
> 31 : pool_unset_query_in_progress: done
> * 32 -: pool_process_query: discard Z packet from backend 1*
> 33 -: detect_error: kind: Z
> 34 -: detect_error: kind: Z
> 35 -: detect_error: kind: Z
> 36 : read_kind_from_backend: kind: Z from 0 th backend
> 37 : read_kind_from_backend: read kind from 0 th backend Z NUM_BACKENDS: 2
> 38 +: read_kind_from_backend: kind: Z from 1 th backend
> 39 +: read_kind_from_backend: read kind from 1 th backend Z NUM_BACKENDS: 2
> 40 +: ProcessBackendResponse: kind from backend: Z
> 41 +: pool_read_message_length: slot: 0 length: 5
> 42 +: pool_read_message_length: slot: 1 length: 5
> 43 +: ReadyForQuery: transaction state:I
> 44 +: ReadyForQuery: transaction state:I
> 45 +: ProcessBackendResponse: Ready For Query
>
> FYI some of the pgpool.conf:
>
> backend_weight0 = 1
> backend_weight1 = 1
> load_balance_mode = on
> replication_mode = on
> parallel_mode = on
>
> Please advice or let me know if I'm missing any info, thank you!
>
>
> BR,
> Fantix
--
Yugo Nagata <nagata at sraoss.co.jp>
More information about the pgpool-general
mailing list