Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita12fc4f

Browse files
committed
Remove EE dependencies from multimaster
1 parent7c7095c commita12fc4f

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

‎contrib/mmts/pglogical_apply.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,13 @@ find_pkey_tuple(ScanKey skey, Relation rel, Relation idxrel,
101101
InitDirtySnapshot(snap);
102102
scan=index_beginscan(rel,idxrel,
103103
&snap,
104-
IndexRelationGetNumberOfKeyAttributes(idxrel),
104+
IndexRelationGetNumberOfAttributes(idxrel),
105105
0);
106106

107107
retry:
108108
found= false;
109109

110-
index_rescan(scan,skey,IndexRelationGetNumberOfKeyAttributes(idxrel),NULL,0);
110+
index_rescan(scan,skey,RelationGetNumberOfAttributes(idxrel),NULL,0);
111111

112112
if ((scantuple=index_getnext(scan,ForwardScanDirection))!=NULL)
113113
{
@@ -236,7 +236,7 @@ build_index_scan_key(ScanKey skey, Relation rel, Relation idxrel, TupleData *tup
236236
indkey= (int2vector*)DatumGetPointer(indkeyDatum);
237237

238238

239-
for (attoff=0;attoff<IndexRelationGetNumberOfKeyAttributes(idxrel);attoff++)
239+
for (attoff=0;attoff<RelationGetNumberOfAttributes(idxrel);attoff++)
240240
{
241241
Oidoperator;
242242
Oidopfamily;

‎src/backend/tcop/postgres.c

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4570,8 +4570,10 @@ typedef struct
45704570
intn_params;/* number of parameters extracted for this query */
45714571
int16format;/* portal output format */
45724572
booldisable_autoprepare;/* disable preparing of this query */
4573-
uint64non_prepared_time;/* averge time of original (non-prepared) query execution (sum of autoprepare_threshold query execution times) */
4574-
uint64prepared_time;/* averge time of prepared query execution (sum of autoprepare_threshold query execution times) */
4573+
uint64non_prepared_time_sum;/* sum of times of non-prepared query execution (up to autoprepare_threshold measurements) */
4574+
uint64prepared_time_sum;/* sum of times of prepared query execution (up to autoprepare_threshold measurements) */
4575+
doublenon_prepared_time_sum2;/* sum of squares of non-prepared query execution (up to autoprepare_threshold measurements) */
4576+
doubleprepared_time_sum2;/* sum of squares of prepared query execution (up to autoprepare_threshold measurements) */
45754577
}plan_cache_entry;
45764578

45774579
staticuint32plan_cache_hash_fn(constvoid*key,Sizekeysize)
@@ -4652,11 +4654,13 @@ static void end_exec_simple(void)
46524654
{
46534655
longsecs;
46544656
intusecs;
4657+
uint64elapsed;
46554658
TimestampDifference(exec_start_timestamp,
46564659
GetCurrentTimestamp(),
46574660
&secs,&usecs);
4658-
4659-
entry->non_prepared_time+=secs*USECS_PER_SEC+usecs;
4661+
elapsed=secs*USECS_PER_SEC+usecs;
4662+
entry->non_prepared_time_sum+=elapsed;
4663+
entry->non_prepared_time_sum2+=elapsed*elapsed;
46604664
}
46614665
}
46624666

@@ -5031,8 +5035,10 @@ static bool exec_cached_query(const char *query_string, List *parsetree_list)
50315035
autoprepare_cached_plans-=1;
50325036
}
50335037
entry->exec_count=0;
5034-
entry->prepared_time=0;
5035-
entry->non_prepared_time=0;
5038+
entry->prepared_time_sum=0;
5039+
entry->non_prepared_time_sum=0;
5040+
entry->prepared_time_sum2=0;
5041+
entry->non_prepared_time_sum2=0;
50365042
entry->plan=NULL;
50375043
entry->disable_autoprepare= false;
50385044
}
@@ -5358,24 +5364,32 @@ static bool exec_cached_query(const char *query_string, List *parsetree_list)
53585364
/* Calculate average time of execution of prepared query */
53595365
longsecs;
53605366
intusecs;
5367+
uint64elapsed;
53615368
TimestampDifference(exec_start_timestamp,
53625369
GetCurrentTimestamp(),
53635370
&secs,&usecs);
5364-
5365-
entry->prepared_time+=secs*USECS_PER_SEC+usecs;
5371+
elapsed=secs*USECS_PER_SEC+usecs;
5372+
entry->prepared_time_sum+=elapsed;
5373+
entry->prepared_time_sum2+=elapsed*elapsed;
53665374

53675375
if (entry->exec_count==autoprepare_threshold*2)
53685376
{
53695377
/* Now we can compare average times of prepared and non-prepared queries execution */
5370-
if (entry->prepared_time>entry->non_prepared_time)
5378+
intn=autoprepare_threshold;
5379+
doubleprepared_time_deviation=sqrt((entry->prepared_time_sum2- (double)entry->prepared_time_sum*entry->prepared_time_sum/n)/n);
5380+
doublenon_prepared_time_deviation=sqrt((entry->non_prepared_time_sum2- (double)entry->non_prepared_time_sum*entry->non_prepared_time_sum/n)/n);
5381+
if (entry->prepared_time_sum-prepared_time_deviation*n>entry->non_prepared_time_sum+non_prepared_time_deviation*n)
53715382
{
53725383
/*
53735384
* Disable autoprepare if average time of execution of prepared query
53745385
* is worser than of non-prepared query
53755386
*/
53765387
entry->disable_autoprepare= true;
5377-
elog(LOG,"Disable autoprepared plan for %s because its average time %ld is greater than time of non-prepared query %ld",
5378-
query_string,entry->prepared_time,entry->non_prepared_time);
5388+
elog(LOG,"Disable autoprepared plan for %s (generic cost=%lg, avg custom cost=%lg, avg=%lg, dev=%lg) because its worser than non-prepared plan (avg=%lg, dev=%lg)",
5389+
query_string,
5390+
psrc->generic_cost,psrc->num_custom_plans!=0 ?psrc->total_custom_cost/psrc->num_custom_plans :0,
5391+
(double)entry->prepared_time_sum/n,prepared_time_deviation,
5392+
(double)entry->non_prepared_time_sum/n,non_prepared_time_deviation);
53795393
}
53805394
}
53815395
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp