| From: | Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com> | 
|---|---|
| To: | pgsql-hackers(at)postgresql(dot)org | 
| Cc: | ashutosh(dot)sharma(at)enterprisedb(dot)com | 
| Subject: | Parallel query fails on standby server | 
| Date: | 2016-03-08 12:30:31 | 
| Message-ID: | CAE9k0P=TMHmd74zpErUue_ZfFqnuMdR7de_45+eazeq=kcKiZQ@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Hi All,
While testing a parallel scan feature on standby server, it is found that
the parallel query fails with an error "*ERROR:  failed to initialize
transaction_read_only to 0*".
Following are the steps used to reproduce the issue:
*Master :-*
edb=# create table ert(n int);
edb=# insert into  ert values (generate_series(1,5000000));
edb=# analyze ert;
edb=# vacuum ert;
*Slave :-*
edb=# set max_parallel_degree =5;
SET
edb=# explain analyze verbose  select * from ert where n<=1000;
ERROR:  failed to initialize transaction_read_only to 0
CONTEXT:  parallel worker, PID 26042
*Root cause Analysis:*  After debugging the worker, it is observed that in
*RestoreGUCState()*, if a guc var can't be skipped it is Initialiazed with
a default value and
in this process when a guc variable "*transaction_read_only*" is being
Initialzed it calls a check_hook *check_transaction_read_only()* which
eventually fails due to
below check which says the guc var "*transaction_read_only*" can't be set
while recovery is in progress:
*if
(RecoveryInProgress()){GUC_check_errcode(ERRCODE_FEATURE_NOT_SUPPORTED);GUC_check_errmsg("cannot
set transaction read-write mode during recovery");return false;}*
*Solution:* Make use of a global variable "*InitializingParallelWorker"* to
protect the check for *RecoveryInProgress()* when Parallel Worker is being
Initialsed.
PFA patch to fix the issue.
With Regards,
Ashutosh Sharma
EnterpriseDB: *http://www.enterprisedb.com <http://www.enterprisedb.com>*
| Attachment | Content-Type | Size | 
|---|---|---|
| fix-for-parallel-query-on-standby.patch | text/x-patch | 951 bytes | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Craig Ringer | 2016-03-08 12:51:50 | Re: Parallel query fails on standby server | 
| Previous Message | Masahiko Sawada | 2016-03-08 12:26:01 | Re: Freeze avoidance of very large table. |