diff --git a/pg_stat_monitor--2.0--2.1.sql b/pg_stat_monitor--2.0--2.1.sql index 3af0753..a28adac 100644 --- a/pg_stat_monitor--2.0--2.1.sql +++ b/pg_stat_monitor--2.0--2.1.sql @@ -86,8 +86,10 @@ CREATE FUNCTION pg_stat_monitor_internal( OUT jit_optimization_time float8, OUT jit_emission_count int8, OUT jit_emission_time float8, + OUT jit_deform_count int8, + OUT jit_deform_time float8, - OUT toplevel BOOLEAN, --64 + OUT toplevel BOOLEAN, --66 OUT bucket_done BOOLEAN ) RETURNS SETOF record @@ -435,7 +437,9 @@ CREATE VIEW pg_stat_monitor AS SELECT jit_optimization_count, jit_optimization_time, jit_emission_count, - jit_emission_time + jit_emission_time, + jit_deform_count, + jit_deform_time FROM pg_stat_monitor_internal(TRUE) ORDER BY bucket_start_time; diff --git a/pg_stat_monitor.c b/pg_stat_monitor.c index 1a0fd15..f57126c 100644 --- a/pg_stat_monitor.c +++ b/pg_stat_monitor.c @@ -42,7 +42,7 @@ PG_MODULE_MAGIC; /* Number of output arguments (columns) for various API versions */ #define PG_STAT_MONITOR_COLS_V1_0 52 #define PG_STAT_MONITOR_COLS_V2_0 64 -#define PG_STAT_MONITOR_COLS_V2_1 66 //TODO !!!!!!! +#define PG_STAT_MONITOR_COLS_V2_1 68 //TODO !!!!!!! #define PG_STAT_MONITOR_COLS PG_STAT_MONITOR_COLS_V2_0 /* maximum of above */ #define PGSM_TEXT_FILE PGSTAT_STAT_PERMANENT_DIRECTORY "pg_stat_monitor_query" @@ -1584,6 +1584,10 @@ pgsm_update_entry(pgsmEntry * entry, e->counters.jitinfo.jit_emission_count++; e->counters.jitinfo.jit_emission_time += INSTR_TIME_GET_MILLISEC(jitusage->emission_counter); + if (INSTR_TIME_GET_MILLISEC(jitusage->deform_counter)) + e->counters.jitinfo.jit_deform_count++; + e->counters.jitinfo.jit_deform_time += INSTR_TIME_GET_MILLISEC(jitusage->deform_counter); + /* Only do this for local storage scenarios */ if (kind != PGSM_STORE) { @@ -1591,6 +1595,7 @@ pgsm_update_entry(pgsmEntry * entry, memcpy((void *) &e->counters.jitinfo.instr_inlining_counter, &jitusage->inlining_counter, sizeof(instr_time)); memcpy((void *) &e->counters.jitinfo.instr_optimization_counter, &jitusage->optimization_counter, sizeof(instr_time)); memcpy((void *) &e->counters.jitinfo.instr_emission_counter, &jitusage->emission_counter, sizeof(instr_time)); + memcpy((void *) &e->counters.jitinfo.instr_deform_counter, &jitusage->deform_counter, sizeof(instr_time)); } } @@ -1848,6 +1853,7 @@ pgsm_store(pgsmEntry * entry) memcpy(&jitusage.inlining_counter, &entry->counters.jitinfo.instr_inlining_counter, sizeof(instr_time)); memcpy(&jitusage.optimization_counter, &entry->counters.jitinfo.instr_optimization_counter, sizeof(instr_time)); memcpy(&jitusage.emission_counter, &entry->counters.jitinfo.instr_emission_counter, sizeof(instr_time)); + memcpy(&jitusage.deform_counter, &entry->counters.jitinfo.instr_deform_counter, sizeof(instr_time)); /* * Acquire a share lock to start with. We'd have to acquire exclusive if @@ -2458,6 +2464,8 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, values[i++] = Float8GetDatumFast(tmp.jitinfo.jit_optimization_time); values[i++] = Int64GetDatumFast(tmp.jitinfo.jit_emission_count); values[i++] = Float8GetDatumFast(tmp.jitinfo.jit_emission_time); + values[i++] = Int64GetDatumFast(tmp.jitinfo.jit_deform_count); + values[i++] = Float8GetDatumFast(tmp.jitinfo.jit_deform_time); } /* toplevel at column number 64 */ values[i++] = BoolGetDatum(toplevel); diff --git a/pg_stat_monitor.h b/pg_stat_monitor.h index 91f2911..69e7af5 100644 --- a/pg_stat_monitor.h +++ b/pg_stat_monitor.h @@ -309,6 +309,9 @@ typedef struct JitInfo double jit_generation_time; /* total time to generate jit code */ int64 jit_inlining_count; /* number of times inlining time has been * > 0 */ + double jit_deform_time; /* total time to deform tuples in jit code */ + int64 jit_deform_count; /* number of times deform time has been > + * 0 */ double jit_inlining_time; /* total time to inline jit code */ int64 jit_optimization_count; /* number of times optimization time * has been > 0 */ @@ -323,6 +326,7 @@ typedef struct JitInfo */ instr_time instr_generation_counter; /* generation counter */ instr_time instr_inlining_counter; /* inlining counter */ + instr_time instr_deform_counter; /* deform counter */ instr_time instr_optimization_counter; /* optimization counter */ instr_time instr_emission_counter; /* emission counter */ } JitInfo; diff --git a/t/018_column_names.pl b/t/018_column_names.pl index e7e9a8d..70360d6 100644 --- a/t/018_column_names.pl +++ b/t/018_column_names.pl @@ -25,9 +25,9 @@ close $conf; my %pg_versions_pgsm_columns = ( 17 => "application_name,". "bucket,bucket_done,bucket_start_time,calls," . "client_ip,cmd_type,cmd_type_text,comments,cpu_sys_time,cpu_user_time," . - "datname,dbid,elevel,jit_emission_count,jit_emission_time,jit_functions," . - "jit_generation_time,jit_inlining_count,jit_inlining_time," . - "jit_optimization_count,jit_optimization_time," . + "datname,dbid,elevel,jit_deform_count,jit_deform_time," . + "jit_emission_count,jit_emission_time,jit_functions,jit_generation_time," . + "jit_inlining_count,jit_inlining_time,jit_optimization_count,jit_optimization_time," . "local_blk_read_time,local_blk_write_time,local_blks_dirtied,local_blks_hit,". "local_blks_read,local_blks_written,max_exec_time,max_plan_time,mean_exec_time," . "mean_plan_time,message,min_exec_time,min_plan_time,pgsm_query_id,planid," .