Changeset: e5c43149d298 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e5c43149d298
Modified Files:
monetdb5/mal/mal_client.c
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_profiler.h
sql/backends/monet5/sql.c
sql/backends/monet5/sql_scenario.c
sql/server/sql_mvc.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: sql_profiler
Log Message:
Us enum to designate event phase.
diffs (243 lines):
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -212,7 +212,7 @@ MCexitClient(Client c)
lng Tend = GDKusec();
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {"client_connection", c, Tend, NULL,
0, Tend-(c->session)});
+ {CLIENT_CONNECTION, c, Tend, NULL,
0, Tend-(c->session)});
}
setClientContext(NULL);
}
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -171,8 +171,22 @@ logadd(struct logbuf *logbuf, const char
return true;
}
+static str phase_descriptions[] = {
+ [CLIENT_CONNECTION] = "client_connection",
+ [TEXT_TO_SQL] = "text_to_sql",
+ [SQL_TO_REL] = "sql_to_rel",
+ [REL_OPT] = "rel_opt",
+ [REL_TO_MAL] = "rel_to_mal",
+ [MAL_OPT] = "rel_to_mal",
+ [MAL_ENGINE] = "mal_engine",
+ [TRANSACTION_START] = "trans_start",
+ [COMMIT] = "trans_commit",
+ [ROLLBACK] = "trans_rollback",
+ [TRANSACTION_END] = "trans_end"
+};
+
static str
-prepareNonMalEvent(Client cntxt, str phase, ulng clk, ulng *tid, ulng *ts, int
state, ulng duration)
+prepareNonMalEvent(Client cntxt, enum event_phase phase, ulng clk, ulng *tid,
ulng *ts, int state, ulng duration)
{
oid* tag = NULL;
str query = NULL;
@@ -193,7 +207,7 @@ prepareNonMalEvent(Client cntxt, str pha
if (!logadd(&logbuf, ", \"clk\":"ULLFMT"", mclk))
goto cleanup_and_exit;
if (!logadd(&logbuf, ", \"thread\":%d, \"phase\":\"%s\"",
- THRgettid(), phase))
+ THRgettid(), phase_descriptions[phase]))
goto cleanup_and_exit;
if (tid && !logadd(&logbuf, ", \"tid\":"ULLFMT, *tid))
goto cleanup_and_exit;
@@ -260,13 +274,14 @@ prepareMalEvent(Client cntxt, MalBlkPtr
"\"sessionid\":\"%d\""
",\"clk\":%"PRIu64""
",\"thread\":%d"
- ",\"phase\":\"mal_engine\""
+ ",\"phase\":\"%s\""
",\"program\":\"%s.%s\""
",\"pc\":%d"
",\"tag\":"OIDFMT,
cntxt->idx,
mclk,
THRgettid(),
+ phase_descriptions[MAL_ENGINE],
getModuleId(getInstrPtr(mb, 0)),
getFunctionId(getInstrPtr(mb, 0)),
mb?getPC(mb,pci):0,
stk?stk->tag:0))
@@ -624,12 +639,12 @@ profilerEvent(MalEvent me, NonMalEvent n
if (maleventstream) {
MT_lock_set(&mal_profileLock);
- if (me.mb != NULL && nme.phase == NULL) {
+ if (me.mb != NULL && nme.phase == MAL_ENGINE) {
if (me.stk == NULL) return;
if (me.pci == NULL) return;
event = prepareMalEvent(me.cntxt, me.mb, me.stk,
me.pci);
}
- if (me.mb == NULL && nme.phase != NULL) {
+ if (me.mb == NULL && nme.phase != MAL_ENGINE) {
event = prepareNonMalEvent(nme.cntxt, nme.phase,
nme.clk, nme.tid, nme.ts, nme.state, nme.duration);
}
if (event) {
diff --git a/monetdb5/mal/mal_profiler.h b/monetdb5/mal/mal_profiler.h
--- a/monetdb5/mal/mal_profiler.h
+++ b/monetdb5/mal/mal_profiler.h
@@ -20,8 +20,23 @@
typedef struct rusage Rusage;
#endif
+
+enum event_phase {
+ MAL_ENGINE = 0,
+ CLIENT_CONNECTION,
+ TEXT_TO_SQL,
+ SQL_TO_REL,
+ REL_OPT,
+ REL_TO_MAL,
+ MAL_OPT,
+ TRANSACTION_START = 100,
+ COMMIT,
+ ROLLBACK,
+ TRANSACTION_END
+};
+
typedef struct NonMalEvent {
- str phase;
+ enum event_phase phase;
Client cntxt;
ulng clk;
ulng* tid;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -135,7 +135,7 @@ sql_symbol2relation(backend *be, symbol
if(malProfileMode > 0 )
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {"sql_to_rel", c, Tend, NULL, NULL,
rel?0:1, Tend-Tbegin});
+ {SQL_TO_REL, c, Tend, NULL, NULL,
rel?0:1, Tend-Tbegin});
storage_based_opt = value_based_opt && rel && !is_ddl(rel->op);
Tbegin = Tend;
@@ -151,7 +151,7 @@ sql_symbol2relation(backend *be, symbol
if(malProfileMode > 0)
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {"rel_opt", c, Tend, NULL, NULL,
rel?0:1, be->reloptimizer});
+ {REL_OPT, c, Tend, NULL, NULL,
rel?0:1, be->reloptimizer});
return rel;
}
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1134,7 +1134,7 @@ SQLparser(Client c)
if(malProfileMode > 0) {
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {"sql_parser", c, Tend, NULL, NULL,
c->query?0:1, Tend-Tbegin});
+ {TEXT_TO_SQL, c, Tend, NULL, NULL,
c->query?0:1, Tend-Tbegin});
}
if (c->query == NULL) {
@@ -1203,7 +1203,7 @@ SQLparser(Client c)
if(malProfileMode > 0)
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {"rel_to_mal", c,
Tend, NULL, NULL, c->query?0:1, Tend-Tbegin});
+ {REL_TO_MAL, c, Tend,
NULL, NULL, c->query?0:1, Tend-Tbegin});
} else {
char *q_copy = sa_strdup(m->sa, c->query);
@@ -1287,7 +1287,7 @@ SQLparser(Client c)
if(malProfileMode > 0)
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {"mal_opt", c, Tend,
NULL, NULL, msg==MAL_SUCCEED?0:1, Tend-Tbegin});
+ {MAL_OPT, c, Tend,
NULL, NULL, msg==MAL_SUCCEED?0:1, Tend-Tbegin});
if (msg != MAL_SUCCEED) {
str other = c->curprg->def->errors;
/* In debugging mode you may want to assess
what went wrong in the optimizers*/
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -125,14 +125,14 @@ mvc_fix_depend(mvc *m, sql_column *depid
}
static void
-profiler_event_wrapper(str phase, lng clk, ulng *tid, ulng *ts, int state, lng
usec)
+profiler_event_wrapper(int phase, lng clk, ulng *tid, ulng *ts, int state, lng
usec)
{
Client c = getClientContext();
if(malProfileMode > 0)
profilerEvent((struct MalEvent) {0},
(struct NonMalEvent)
- {phase, c, clk, tid, ts, state,
usec});
+ {(enum event_phase) phase, c, clk,
tid, ts, state, usec});
}
sql_store
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -331,7 +331,7 @@ extern res_table *res_tables_remove(res_
sql_export void res_tables_destroy(res_table *results);
extern res_table *res_tables_find(res_table *results, int res_id);
-typedef void (*profiler_event_wrapper_fptr) (str phase, lng clk, ulng *tid,
ulng *ts, int state, lng usec);
+typedef void (*profiler_event_wrapper_fptr) (int phase, lng clk, ulng *tid,
ulng *ts, int state, lng usec);
extern struct sqlstore *store_init(int debug, store_type store, int readonly,
int singleuser, profiler_event_wrapper_fptr event_wrapper);
extern void store_exit(struct sqlstore *store);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3576,6 +3576,13 @@ clean_predicates_and_propagate_to_parent
return res;
}
+enum event_phase {
+ TRANSACTION_START = 100,
+ COMMIT,
+ ROLLBACK,
+ TRANSACTION_END
+};
+
static void
sql_trans_rollback(sql_trans *tr, bool commit_lock)
{
@@ -3680,7 +3687,7 @@ sql_trans_rollback(sql_trans *tr, bool c
}
Tend = GDKusec();
- store->profiler_event_wrapper("rollback", Tend, &tr->tid, NULL, 0,
Tend-Tbegin);
+ store->profiler_event_wrapper(ROLLBACK, Tend, &tr->tid, NULL, 0,
Tend-Tbegin);
}
sql_trans *
@@ -4051,7 +4058,7 @@ sql_trans_commit(sql_trans *tr)
ok = clean_predicates_and_propagate_to_parent(tr);
Tend = GDKusec();
- store->profiler_event_wrapper("commit", Tend, &tr->tid, NULL, ok,
Tend-Tbegin);
+ store->profiler_event_wrapper(COMMIT, Tend, &tr->tid, &tr->ts, ok,
Tend-Tbegin);
return (ok==LOG_OK)?SQL_OK:SQL_ERR;
}
@@ -7056,7 +7063,7 @@ sql_trans_begin(sql_session *s)
TRC_DEBUG(SQL_STORE, "Exit sql_trans_begin for transaction: " ULLFMT
"\n", tr->tid);
store_unlock(store);
s->status = tr->status = 0;
- store->profiler_event_wrapper("start transaction", GDKusec(),
&s->tr->tid, &s->tr->ts, 0, 0);
+ store->profiler_event_wrapper(TRANSACTION_START, GDKusec(),
&s->tr->tid, &s->tr->ts, 0, 0);
return 0;
}
@@ -7090,7 +7097,7 @@ sql_trans_end(sql_session *s, int ok)
assert(list_length(store->active) == (int)
ATOMIC_GET(&store->nr_active));
store_unlock(store);
lng Tend = GDKusec();
- store->profiler_event_wrapper("end transaction", Tend, &s->tr->tid,
&s->tr->ts, ok==SQL_OK?0:1, 0);
+ store->profiler_event_wrapper(TRANSACTION_END, Tend, &s->tr->tid,
&s->tr->ts, ok==SQL_OK?0:1, 0);
return ok;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]