!6661 修复Qual子句下查询计划记录问题

Merge pull request !6661 from 申正/reslove_guc_reload
This commit is contained in:
opengauss_bot
2024-11-20 06:23:30 +00:00
committed by Gitee
2 changed files with 22 additions and 2 deletions

View File

@ -2300,6 +2300,17 @@ bool instr_stmt_need_track_plan()
void instr_stmt_exec_report_query_plan(QueryDesc *queryDesc)
{
if ((!IS_UNIQUE_SQL_TRACK_ALL && u_sess->unique_sql_cxt.parent_unique_sql_id != 0) ||
u_sess->attr.attr_sql.under_explain) {
return;
}
/* In procedure, record query plan directly */
if (IS_UNIQUE_SQL_TRACK_ALL && u_sess->unique_sql_cxt.parent_unique_sql_id != 0) {
instr_stmt_report_query_plan(queryDesc);
return;
}
if (instr_stmt_level_fullsql_open()) {
instr_stmt_report_query_plan(queryDesc);
return;
@ -2319,7 +2330,7 @@ void instr_stmt_exec_report_query_plan(QueryDesc *queryDesc)
void instr_stmt_report_query_plan(QueryDesc *queryDesc)
{
StatementStatContext *ssctx = (StatementStatContext *)u_sess->statement_cxt.curStatementMetrics;
if (queryDesc == NULL || ssctx == NULL || ssctx->level > STMT_TRACK_L2
if (queryDesc == NULL || queryDesc->planstate == NULL || ssctx == NULL || ssctx->level > STMT_TRACK_L2
|| (ssctx->plan_size != 0 && !u_sess->unique_sql_cxt.is_open_cursor)
|| (u_sess->statement_cxt.executer_run_level > 1 && !IS_UNIQUE_SQL_TRACK_ALL)
|| queryDesc->for_simplify_func) {

View File

@ -467,7 +467,16 @@ void ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, long count)
int instrument_option = 0;
bool has_track_operator = false;
char* old_stmt_name = u_sess->pcache_cxt.cur_stmt_name;
u_sess->statement_cxt.root_query_plan = queryDesc;
/*
* For normal query, ExecutorRun will be called several times, we only record the first queryDesc,
* otherwise root_query_plan will be overwritten,
* and root_query_plan->planstate will be NULL,
* which may cause incorrect query_plan in statement_history
*/
if (u_sess->statement_cxt.executer_run_level == 0) {
u_sess->statement_cxt.root_query_plan = queryDesc;
}
u_sess->statement_cxt.executer_run_level++;
if (u_sess->SPI_cxt._connected >= 0) {
u_sess->pcache_cxt.cur_stmt_name = NULL;