Changeset: e0a58dd8dec7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e0a58dd8dec7
Modified Files:
clients/Tests/exports.stable.out
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:
Improve genericEvent call. Remove state. Calc clk on caller side.
diffs (truncated from 358 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1000,7 +1000,7 @@ void freeVariable(MalBlkPtr mb, int vari
void garbageCollector(Client cntxt, MalBlkPtr mb, MalStkPtr stk, int flag);
void garbageElement(Client cntxt, ValPtr v);
const char *generatorRef;
-void generic_event(str face, struct GenericEvent e, int state);
+void genericEvent(str phase, struct GenericEvent e);
MALfcn getAddress(const char *modname, const char *fcnname);
str getArgDefault(MalBlkPtr mb, InstrPtr p, int idx);
ptr getArgReference(MalStkPtr stk, InstrPtr pci, int k);
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
@@ -190,6 +190,8 @@ MCresetProfiler(stream *fdout)
void
MCexitClient(Client c)
{
+ lng Tend = GDKusec();
+
MCresetProfiler(c->fdout);
// Remove any left over constant symbols
if( c->curprg)
@@ -208,9 +210,9 @@ MCexitClient(Client c)
c->fdin = NULL;
}
if(malProfileMode > 0)
- generic_event("client_connection",
- (struct GenericEvent) { &c->idx,
NULL, NULL, NULL, c->session, 0 },
- 1);
+ genericEvent("client_connection",
+ (struct GenericEvent)
+ { &c->idx, NULL, NULL, NULL,
Tend-(c->session), Tend, 0 });
setClientContext(NULL);
}
@@ -301,10 +303,6 @@ MCinitClient(oid user, bstream *fin, str
(void) c_old;
assert(NULL == c_old);
c = MCinitClientRecord(c, user, fin, fout);
- if(malProfileMode > 0)
- generic_event("client_connection",
- (struct GenericEvent) {
&c->idx, NULL, NULL, NULL, c->session, 0 },
- 0);
}
MT_lock_unset(&mal_contextLock);
return c;
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
@@ -184,11 +184,10 @@ logadd(struct logbuf *logbuf, const char
* Profiling a generic event follows the same implementation of ProfilerEvent.
*/
static str
-prepare_generic_event(str phase, struct GenericEvent e, int state)
+prepareGenericEvent(str phase, struct GenericEvent e)
{
struct logbuf logbuf = {0};
- lng clk = GDKusec();
- uint64_t mclk = (uint64_t)clk - ((uint64_t)startup_time.tv_sec*1000000
- (uint64_t)startup_time.tv_usec);
+ uint64_t mclk = (uint64_t)e.clk -
((uint64_t)startup_time.tv_sec*1000000 - (uint64_t)startup_time.tv_usec);
if (logadd(&logbuf,
"{"
@@ -197,7 +196,7 @@ prepare_generic_event(str phase, struct
",\"mclk\":%"PRIu64""
",\"thread\":%d"
",\"phase\":\"%s\""
- ",\"state\":\"%s\""
+ ",\"state\":\"done\""
",\"usec\":"LLFMT
",\"clientid\":\"%d\""
",\"transactionid\":"ULLFMT
@@ -206,11 +205,10 @@ prepare_generic_event(str phase, struct
",\"rc\":\"%d\""
"}\n",
mercurial_revision(),
- clk,
+ e.clk,
mclk,
THRgettid(),
phase,
- state ? "done" : "start",
e.usec,
e.cid ? *e.cid : 0,
e.tid ? *e.tid : 0,
@@ -225,11 +223,11 @@ prepare_generic_event(str phase, struct
}
static void
-render_generic_event(str msg, struct GenericEvent e, int state)
+renderGenericEvent(str msg, struct GenericEvent e)
{
str event;
MT_lock_set(&mal_profileLock);
- event = prepare_generic_event(msg, e, state);
+ event = prepareGenericEvent(msg, e);
if( event ){
logjsonInternal(event, true);
free(event);
@@ -238,11 +236,10 @@ render_generic_event(str msg, struct Gen
}
void
-generic_event(str msg, struct GenericEvent e, int state)
+genericEvent(str msg, struct GenericEvent e)
{
- if( maleventstream ) {
- render_generic_event(msg, e, state);
- }
+ if( maleventstream )
+ renderGenericEvent(msg, e);
}
/* JSON rendering method of performance data.
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
@@ -22,10 +22,11 @@ typedef struct rusage Rusage;
struct GenericEvent {
int* cid; /* client_id */
- oid* tag;
+ oid* tag; /* tag of the assoc MAL block */
ulng* tid; /* transaction_id */
- str query;
- lng usec;
+ str query; /* statement */
+ lng usec; /* event duration */
+ lng clk; /* GDKusec in callside */
int rc; /* return code */
};
@@ -36,7 +37,7 @@ mal_export str openProfilerStream(Client
mal_export str closeProfilerStream(Client cntxt);
mal_export void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-mal_export void generic_event(str phase, struct GenericEvent e, int state);
+mal_export void genericEvent(str phase, struct GenericEvent e);
mal_export void sqlProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mal_export str startProfiler(Client cntxt);
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
@@ -124,18 +124,18 @@ sql_symbol2relation(backend *be, symbol
{
sql_rel *rel;
sql_query *query = query_create(be->mvc);
- lng Tbegin;
+ lng Tbegin, Tend;
int value_based_opt = be->mvc->emode != m_prepare, storage_based_opt;
int profile = be->mvc->emode == m_plan;
Client c = getClientContext();
Tbegin = GDKusec();
rel = rel_semantic(query, sym);
+ Tend = GDKusec();
if(malProfileMode > 0 )
- generic_event("sql_to_rel",
- (struct GenericEvent)
- { &(c->idx), &(c->curprg->def->tag),
NULL, NULL, GDKusec()-Tbegin, rel ? 0 : 1 },
- 1);
+ genericEvent("sql_to_rel",
+ (struct GenericEvent)
+ { &(c->idx), &(c->curprg->def->tag),
NULL, NULL, Tend-Tbegin, Tend, rel ? 0 : 1 });
storage_based_opt = value_based_opt && rel && !is_ddl(rel->op);
Tbegin = GDKusec();
@@ -145,13 +145,13 @@ sql_symbol2relation(backend *be, symbol
rel = rel_partition(be->mvc, rel);
if (rel && (rel_no_mitosis(be->mvc, rel) ||
rel_need_distinct_query(rel)))
be->no_mitosis = 1;
- be->reloptimizer = GDKusec() - Tbegin;
+ Tend = GDKusec();
+ be->reloptimizer = Tend - Tbegin;
if(malProfileMode > 0)
- generic_event("rel_opt",
- (struct GenericEvent)
- { &c->idx, &(c->curprg->def->tag),
NULL, NULL, be->reloptimizer, rel ? 0 : 1},
- 1);
+ genericEvent("rel_opt",
+ (struct GenericEvent)
+ { &c->idx, &(c->curprg->def->tag),
NULL, NULL, be->reloptimizer, Tend, rel ? 0 : 1});
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
@@ -971,7 +971,7 @@ SQLparser(Client c)
int pstatus = 0;
int err = 0, opt, preparedid = -1;
oid tag = 0;
- lng Tbegin;
+ lng Tbegin, Tend;
c->query = NULL;
be = (backend *) c->sqlcontext;
@@ -1142,13 +1142,12 @@ SQLparser(Client c)
*/
be->q = NULL;
c->query = query_cleaned(m->sa, QUERY(m->scanner));
-
+ Tend = GDKusec();
if(malProfileMode > 0) {
str escaped_query = c->query? mal_quote(c->query,
strlen(c->query)) : NULL;
- generic_event("sql_parse",
+ genericEvent("sql_parse",
(struct GenericEvent)
- { &c->idx, &(c->curprg->def->tag),
NULL, escaped_query, GDKusec()-Tbegin, c->query? 0 : 1 },
- 1);
+ { &c->idx, &(c->curprg->def->tag),
NULL, escaped_query, Tend-Tbegin, Tend, c->query? 0 : 1 });
GDKfree(escaped_query);
}
@@ -1214,11 +1213,11 @@ SQLparser(Client c)
else
opt = (m->emod & mod_exec) == 0;//1;
+ Tend = GDKusec();
if(malProfileMode > 0)
- generic_event("rel_to_mal",
- (struct GenericEvent)
- { &c->idx,
&(c->curprg->def->tag), NULL, NULL, GDKusec()-Tbegin, c->query? 0 : 1 },
- 1);
+ genericEvent("rel_to_mal",
+ (struct GenericEvent)
+ { &c->idx,
&(c->curprg->def->tag), NULL, NULL, Tend-Tbegin, Tend, c->query? 0 : 1 });
} else {
char *q_copy = sa_strdup(m->sa, c->query);
@@ -1299,12 +1298,11 @@ SQLparser(Client c)
Tbegin = GDKusec();
msg = SQLoptimizeQuery(c, c->curprg->def);
-
+ Tend = GDKusec();
if(malProfileMode > 0)
- generic_event("mal_opt",
- (struct GenericEvent)
- { &c->idx,
&(c->curprg->def->tag), NULL, NULL, GDKusec()-Tbegin, msg == MAL_SUCCEED? 0 : 1
},
- 1);
+ genericEvent("mal_opt",
+ (struct GenericEvent)
+ { &c->idx,
&(c->curprg->def->tag), NULL, NULL, Tend-Tbegin, Tend, msg == MAL_SUCCEED? 0 :
1 });
if (msg != MAL_SUCCEED) {
str other = c->curprg->def->errors;
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,13 +125,12 @@ mvc_fix_depend(mvc *m, sql_column *depid
}
static void
-generic_event_wrapper(str phase, ulng tid, lng usec, int rc, int state)
+generic_event_wrapper(str phase, ulng tid, lng usec, lng clk, int rc)
{
if(malProfileMode > 0)
- generic_event(phase,
- (struct GenericEvent)
- { NULL, NULL, &tid, NULL, usec, rc },
- state);
+ genericEvent(phase,
+ (struct GenericEvent)
+ { NULL, NULL, &tid, NULL, usec, clk,
rc });
}
sql_store
@@ -489,11 +488,6 @@ mvc_trans(mvc *m)
res = sql_trans_begin(m->session);
m->session->tr->ts2 = GDKusec();
- if(malProfileMode > 0)
- generic_event("transaction",
- (struct GenericEvent)
- { NULL, NULL, &(m->session->tr->tid),
NULL, GDKusec(), (res || err)? 1 : 0 },
- 0);
if (m->qc && (res || err)) {
int seqnr = m->qc->id;
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 (*generic_event_wrapper_fptr) (str phase, ulng tid, lng usec, int
rc, int state);
+typedef void (*generic_event_wrapper_fptr) (str phase, ulng tid, lng usec, lng
clk, int rc);
extern struct sqlstore *store_init(int debug, store_type store, int readonly,
int singleuser, generic_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
@@ -3580,6 +3580,7 @@ sql_trans_rollback(sql_trans *tr, bool c
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]