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

Commit92a0bcf

Browse files
committed
Move AQO from a relid based approach to a relation name based approach.
It allows us to reuse ML data at different instance and learn on temporarytables.
1 parent1de5e53 commit92a0bcf

16 files changed

+314
-236
lines changed

‎aqo--1.2--1.3.sql‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ALTERTABLEpublic.aqo_data ADD COLUMN oidsOID [] DEFAULTNULL;
1+
ALTERTABLEpublic.aqo_data ADD COLUMN oidstext [] DEFAULTNULL;
22

33
--
44
-- Remove data, related to previously dropped tables, from the AQO tables.
@@ -9,7 +9,7 @@ DECLARE
99
aqo_queries_row aqo_queries%ROWTYPE;
1010
aqo_query_texts_row aqo_query_texts%ROWTYPE;
1111
aqo_query_stat_row aqo_query_stat%ROWTYPE;
12-
oid_varoid;
12+
oid_vartext;
1313
fspace_hash_varbigint;
1414
delete_rowboolean DEFAULT false;
1515
BEGIN
@@ -23,7 +23,7 @@ BEGIN
2323
IF (aqo_data_row.oidsIS NOT NULL) THEN
2424
FOREACH oid_varIN ARRAYaqo_data_row.oids
2525
LOOP
26-
IF NOT EXISTS (SELECT relnameFROM pg_classWHEREoid= oid_var) THEN
26+
IF NOT EXISTS (SELECT relnameFROM pg_classWHEREoid::regclass::text= oid_var) THEN
2727
delete_row= true;
2828
END IF;
2929
END LOOP;

‎aqo.h‎

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -280,13 +280,12 @@ extern bool find_query(uint64 qhash, QueryContextData *ctx);
280280
externboolupdate_query(uint64qhash,uint64fhash,
281281
boollearn_aqo,booluse_aqo,boolauto_tuning);
282282
externbooladd_query_text(uint64query_hash,constchar*query_string);
283-
externboolload_fss_ext(uint64fs,intfss,OkNNrdata*data,
284-
List**relids,boolisSafe);
285-
externboolload_fss(uint64fhash,intfss_hash,OkNNrdata*data,List**relids);
286-
externboolupdate_fss_ext(uint64fhash,intfsshash,OkNNrdata*data,
287-
List*relids,boolisTimedOut);
288-
externboolupdate_fss(uint64fhash,intfss_hash,OkNNrdata*data,
289-
List*relids);
283+
externboolload_fss_ext(uint64fs,intfss,OkNNrdata*data,List**relnames,
284+
boolisSafe);
285+
externboolload_fss(uint64fs,intfss,OkNNrdata*data,List**relnames);
286+
externboolupdate_fss_ext(uint64fs,intfss,OkNNrdata*data,
287+
List*relnames,boolisTimedOut);
288+
externboolupdate_fss(uint64fs,intfss,OkNNrdata*data,List*relnames);
290289
QueryStat*get_aqo_stat(uint64query_hash);
291290
voidupdate_aqo_stat(uint64query_hash,QueryStat*stat);
292291
externboolmy_index_insert(RelationindexRelation,Datum*values,bool*isnull,
@@ -307,7 +306,7 @@ extern void print_node_explain(ExplainState *es, PlanState *ps, Plan *plan);
307306

308307
/* Cardinality estimation */
309308
doublepredict_for_relation(List*restrict_clauses,List*selectivities,
310-
List*relids,int*fss_hash);
309+
List*relnames,int*fss);
311310

312311
/* Query execution statistics collecting hooks */
313312
voidaqo_ExecutorStart(QueryDesc*queryDesc,inteflags);
@@ -319,13 +318,14 @@ void aqo_ExecutorEnd(QueryDesc *queryDesc);
319318
externvoidautomatical_query_tuning(uint64query_hash,QueryStat*stat);
320319

321320
/* Utilities */
322-
intint_cmp(constvoid*a,constvoid*b);
323-
intdouble_cmp(constvoid*a,constvoid*b);
324-
int*argsort(void*a,intn,size_tes,
325-
int (*cmp) (constvoid*,constvoid*));
326-
int*inverse_permutation(int*a,intn);
327-
QueryStat*palloc_query_stat(void);
328-
voidpfree_query_stat(QueryStat*stat);
321+
externintint64_compare(constvoid*a,constvoid*b);
322+
externintint_cmp(constvoid*a,constvoid*b);
323+
externintdouble_cmp(constvoid*a,constvoid*b);
324+
externint*argsort(void*a,intn,size_tes,
325+
int (*cmp) (constvoid*,constvoid*));
326+
externint*inverse_permutation(int*a,intn);
327+
externQueryStat*palloc_query_stat(void);
328+
externvoidpfree_query_stat(QueryStat*stat);
329329

330330
/* Selectivity cache for parametrized baserels */
331331
externvoidcache_selectivity(intclause_hash,intrelid,intglobal_relid,

‎cardinality_estimation.c‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#ifdefAQO_DEBUG_PRINT
2727
staticvoid
2828
predict_debug_output(List*clauses,List*selectivities,
29-
List*relids,intfss_hash,doubleresult)
29+
List*relnames,intfss,doubleresult)
3030
{
3131
StringInfoDatadebug_str;
3232
ListCell*lc;
@@ -42,11 +42,11 @@ predict_debug_output(List *clauses, List *selectivities,
4242
appendStringInfo(&debug_str,"%lf ",*s);
4343
}
4444

45-
appendStringInfoString(&debug_str,"},relids: { ");
46-
foreach(lc,relids)
45+
appendStringInfoString(&debug_str,"},relnames: { ");
46+
foreach(lc,relnames)
4747
{
48-
intrelid=lfirst_int(lc);
49-
appendStringInfo(&debug_str,"%d ",relid);
48+
String*relname=lfirst_node(String,lc);
49+
appendStringInfo(&debug_str,"%s ",relname->sval);
5050
}
5151

5252
appendStringInfo(&debug_str,"}, result: %lf",result);
@@ -60,22 +60,22 @@ predict_debug_output(List *clauses, List *selectivities,
6060
*/
6161
double
6262
predict_for_relation(List*clauses,List*selectivities,
63-
List*relids,int*fss)
63+
List*relnames,int*fss)
6464
{
6565
double*features;
6666
doubleresult;
6767
inti;
6868
OkNNrdatadata;
6969

70-
if (relids==NIL)
70+
if (relnames==NIL)
7171
/*
7272
* Don't make prediction for query plans without any underlying plane
7373
* tables. Use return value -4 for debug purposes.
7474
*/
7575
return-4.;
7676

77-
*fss=get_fss_for_object(relids,clauses,
78-
selectivities,&data.cols,&features);
77+
*fss=get_fss_for_object(relnames,clauses,selectivities,
78+
&data.cols,&features);
7979

8080
if (data.cols>0)
8181
for (i=0;i<aqo_K;++i)
@@ -94,7 +94,7 @@ predict_for_relation(List *clauses, List *selectivities,
9494
result=-1;
9595
}
9696
#ifdefAQO_DEBUG_PRINT
97-
predict_debug_output(clauses,selectivities,relids,*fss_hash,result);
97+
predict_debug_output(clauses,selectivities,relnames,*fss,result);
9898
#endif
9999
pfree(features);
100100
if (data.cols>0)

‎cardinality_hooks.c‎

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ void
139139
aqo_set_baserel_rows_estimate(PlannerInfo*root,RelOptInfo*rel)
140140
{
141141
doublepredicted;
142-
Oidrelid;
143-
List*relids=NIL;
142+
RangeTblEntry*rte;
143+
List*relnames=NIL;
144144
List*selectivities=NULL;
145145
List*clauses;
146146
intfss=0;
@@ -161,19 +161,24 @@ aqo_set_baserel_rows_estimate(PlannerInfo *root, RelOptInfo *rel)
161161
gotodefault_estimator;
162162
}
163163

164-
relid=planner_rt_fetch(rel->relid,root)->relid;
165-
if (OidIsValid(relid))
166-
/* Predict for a plane table only. */
167-
relids=list_make1_int(relid);
164+
rte=planner_rt_fetch(rel->relid,root);
165+
if (rte&&OidIsValid(rte->relid))
166+
{
167+
String*s=makeNode(String);
168+
169+
/* Predict for a plane table. */
170+
Assert(rte->eref&&rte->eref->aliasname);
171+
s->sval=pstrdup(rte->eref->aliasname);
172+
relnames=list_make1(s);
173+
}
168174

169175
clauses=aqo_get_clauses(root,rel->baserestrictinfo);
170-
predicted=predict_for_relation(clauses,selectivities,
171-
relids,&fss);
176+
predicted=predict_for_relation(clauses,selectivities,relnames,&fss);
172177
rel->fss_hash=fss;
173178

174179
list_free_deep(selectivities);
175180
list_free(clauses);
176-
list_free(relids);
181+
list_free(relnames);
177182

178183
if (predicted >=0)
179184
{
@@ -209,8 +214,8 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
209214
List*param_clauses)
210215
{
211216
doublepredicted;
212-
Oidrelid=InvalidOid;
213-
List*relids=NIL;
217+
RangeTblEntry*rte=NULL;
218+
List*relnames=NIL;
214219
List*allclauses=NULL;
215220
List*selectivities=NULL;
216221
ListCell*l;
@@ -219,7 +224,7 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
219224
int*args_hash;
220225
int*eclass_hash;
221226
intcurrent_hash;
222-
intfss=0;
227+
intfss=0;
223228

224229
if (IsQueryDisabled())
225230
/* Fast path */
@@ -233,7 +238,7 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
233238
aqo_get_clauses(root,rel->baserestrictinfo));
234239
selectivities=get_selectivities(root,allclauses,rel->relid,
235240
JOIN_INNER,NULL);
236-
relid=planner_rt_fetch(rel->relid,root)->relid;
241+
rte=planner_rt_fetch(rel->relid,root);
237242
get_eclasses(allclauses,&nargs,&args_hash,&eclass_hash);
238243

239244
mcxt=MemoryContextSwitchTo(CacheMemoryContext);
@@ -242,7 +247,7 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
242247
current_hash=get_clause_hash(
243248
((RestrictInfo*)lfirst(l))->clause,
244249
nargs,args_hash,eclass_hash);
245-
cache_selectivity(current_hash,rel->relid,relid,
250+
cache_selectivity(current_hash,rel->relid,rte->relid,
246251
*((double*)lfirst(l2)));
247252
}
248253

@@ -262,11 +267,17 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
262267
gotodefault_estimator;
263268
}
264269

265-
if (OidIsValid(relid))
266-
/* Predict for a plane table only. */
267-
relids=list_make1_int(relid);
270+
if (rte&&OidIsValid(rte->relid))
271+
{
272+
String*s=makeNode(String);
273+
274+
/* Predict for a plane table. */
275+
Assert(rte->eref&&rte->eref->aliasname);
276+
s->sval=pstrdup(rte->eref->aliasname);
277+
relnames=list_make1(s);
278+
}
268279

269-
predicted=predict_for_relation(allclauses,selectivities,relids,&fss);
280+
predicted=predict_for_relation(allclauses,selectivities,relnames,&fss);
270281

271282
predicted_ppi_rows=predicted;
272283
fss_ppi_hash=fss;
@@ -291,7 +302,7 @@ aqo_set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
291302
List*restrictlist)
292303
{
293304
doublepredicted;
294-
List*relids;
305+
List*relnames;
295306
List*outer_clauses;
296307
List*inner_clauses;
297308
List*allclauses;
@@ -317,7 +328,7 @@ aqo_set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
317328
gotodefault_estimator;
318329
}
319330

320-
relids=get_list_of_relids(root,rel->relids);
331+
relnames=get_relnames(root,rel->relids);
321332
outer_clauses=get_path_clauses(outer_rel->cheapest_total_path,root,
322333
&outer_selectivities);
323334
inner_clauses=get_path_clauses(inner_rel->cheapest_total_path,root,
@@ -328,7 +339,7 @@ aqo_set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
328339
list_concat(outer_selectivities,
329340
inner_selectivities));
330341

331-
predicted=predict_for_relation(allclauses,selectivities,relids,&fss);
342+
predicted=predict_for_relation(allclauses,selectivities,relnames,&fss);
332343
rel->fss_hash=fss;
333344

334345
if (predicted >=0)
@@ -359,7 +370,7 @@ aqo_get_parameterized_joinrel_size(PlannerInfo *root,
359370
List*clauses)
360371
{
361372
doublepredicted;
362-
List*relids;
373+
List*relnames;
363374
List*outer_clauses;
364375
List*inner_clauses;
365376
List*allclauses;
@@ -385,7 +396,7 @@ aqo_get_parameterized_joinrel_size(PlannerInfo *root,
385396
gotodefault_estimator;
386397
}
387398

388-
relids=get_list_of_relids(root,rel->relids);
399+
relnames=get_relnames(root,rel->relids);
389400
outer_clauses=get_path_clauses(outer_path,root,&outer_selectivities);
390401
inner_clauses=get_path_clauses(inner_path,root,&inner_selectivities);
391402
allclauses=list_concat(aqo_get_clauses(root,clauses),
@@ -394,7 +405,7 @@ aqo_get_parameterized_joinrel_size(PlannerInfo *root,
394405
list_concat(outer_selectivities,
395406
inner_selectivities));
396407

397-
predicted=predict_for_relation(allclauses,selectivities,relids,&fss);
408+
predicted=predict_for_relation(allclauses,selectivities,relnames,&fss);
398409

399410
predicted_ppi_rows=predicted;
400411
fss_ppi_hash=fss;
@@ -421,13 +432,13 @@ predict_num_groups(PlannerInfo *root, Path *subpath, List *group_exprs,
421432
child_fss=subpath->parent->fss_hash;
422433
else
423434
{
424-
List*relids;
435+
List*relnames;
425436
List*clauses;
426437
List*selectivities=NIL;
427438

428-
relids=get_list_of_relids(root,subpath->parent->relids);
439+
relnames=get_relnames(root,subpath->parent->relids);
429440
clauses=get_path_clauses(subpath,root,&selectivities);
430-
(void)predict_for_relation(clauses,selectivities,relids,&child_fss);
441+
(void)predict_for_relation(clauses,selectivities,relnames,&child_fss);
431442
}
432443

433444
*fss=get_grouped_exprs_hash(child_fss,group_exprs);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp