Changeset: 57dff54c77b3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/57dff54c77b3
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/include/sql_catalog.h
        sql/server/sql_mvc.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: sql_profiler
Log Message:

Remove start of non-mal events. Add timings of events (usec).


diffs (295 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
@@ -209,7 +209,7 @@ MCexitClient(Client c)
        }
        if(malProfileMode > 0)
                generic_event("client_connection",
-                                        (struct GenericEvent) { &c->idx, NULL, 
NULL, NULL, 0 },
+                                         (struct GenericEvent) { &c->idx, 
NULL, NULL, NULL, c->session, 0 },
                                          1);
        setClientContext(NULL);
 }
@@ -303,7 +303,7 @@ MCinitClient(oid user, bstream *fin, str
                c = MCinitClientRecord(c, user, fin, fout);
                if(malProfileMode > 0)
                        generic_event("client_connection",
-                                                (struct GenericEvent) { 
&c->idx, NULL, NULL, NULL, 0 },
+                                                 (struct GenericEvent) { 
&c->idx, NULL, NULL, NULL, c->session, 0 },
                                                 0);
        }
        MT_lock_unset(&mal_contextLock);
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
@@ -198,6 +198,7 @@ prepare_generic_event(str phase, struct 
                           ",\"thread\":%d"
                           ",\"phase\":\"%s\""
                           ",\"state\":\"%s\""
+                          ",\"usec\":"LLFMT
                           ",\"clientid\":\"%d\""
                           ",\"transactionid\":"ULLFMT
                           ",\"tag\":"OIDFMT
@@ -210,6 +211,7 @@ prepare_generic_event(str phase, struct 
                           THRgettid(),
                           phase,
                           state ? "done" : "start",
+                          e.usec,
                           e.cid ? *e.cid : 0,
                           e.tid ? *e.tid : 0,
                           e.tag ? *e.tag : 0,
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
@@ -25,6 +25,7 @@ struct GenericEvent {
        oid* tag;
        ulng* tid; /* transaction_id */
        str query;
+       lng usec;
        int rc;    /* return code */
 };
 
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
@@ -129,24 +129,13 @@ sql_symbol2relation(backend *be, symbol 
        int profile = be->mvc->emode == m_plan;
        Client c = getClientContext();
 
+       Tbegin = GDKusec();
+       rel = rel_semantic(query, sym);
        if(malProfileMode > 0 )
                generic_event("sql_to_rel",
-                                        (struct GenericEvent)
-                                        { &(c->idx), &(c->curprg->def->tag), 
NULL, NULL, 0 },
-                                        0);
-
-       rel = rel_semantic(query, sym);
-
-       if(malProfileMode > 0 ) {
-               generic_event("sql_to_rel",
-                                        (struct GenericEvent)
-                                        { &(c->idx), &(c->curprg->def->tag), 
NULL, NULL, rel ? 0 : 1 },
-                                        1);
-               generic_event("rel_opt",
-                                        (struct GenericEvent)
-                                        { &(c->idx), &(c->curprg->def->tag), 
NULL, NULL, 0 },
-                                        0);
-       }
+                                         (struct GenericEvent)
+                                         { &(c->idx), &(c->curprg->def->tag), 
NULL, NULL, GDKusec()-Tbegin, rel ? 0 : 1 },
+                                         1);
 
        storage_based_opt = value_based_opt && rel && !is_ddl(rel->op);
        Tbegin = GDKusec();
@@ -160,9 +149,9 @@ sql_symbol2relation(backend *be, symbol 
 
        if(malProfileMode > 0)
                generic_event("rel_opt",
-                                        (struct GenericEvent)
-                                        { &c->idx, &(c->curprg->def->tag), 
NULL, NULL, rel ? 0 : 1},
-                                        1);
+                                         (struct GenericEvent)
+                                         { &c->idx, &(c->curprg->def->tag), 
NULL, NULL, be->reloptimizer, rel ? 0 : 1},
+                                         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,6 +971,7 @@ SQLparser(Client c)
        int pstatus = 0;
        int err = 0, opt, preparedid = -1;
        oid tag = 0;
+       lng Tbegin;
 
        c->query = NULL;
        be = (backend *) c->sqlcontext;
@@ -1114,11 +1115,7 @@ SQLparser(Client c)
        assert(tag == c->curprg->def->tag);
        (void) tag;
 
-       if(malProfileMode > 0)
-               generic_event("sql_parse",
-                                        (struct GenericEvent)
-                                        { &c->idx, &(c->curprg->def->tag), 
NULL, NULL, 0 },
-                                        0);
+       Tbegin = GDKusec();
 
        if ((err = sqlparse(m)) ||
            /* Only forget old errors on transaction boundaries */
@@ -1147,11 +1144,11 @@ SQLparser(Client c)
        c->query = query_cleaned(m->sa, QUERY(m->scanner));
 
        if(malProfileMode > 0) {
-               str escaped_query = c->query? mal_quote(c->query, 
sizeof(c->query)) : NULL;
+               str escaped_query = c->query? mal_quote(c->query, 
strlen(c->query)) : NULL;
                generic_event("sql_parse",
-                                        (struct GenericEvent)
-                                        { &c->idx, &(c->curprg->def->tag), 
NULL, escaped_query, c->query? 0 : 1 },
-                                        1);
+                                         (struct GenericEvent)
+                                         { &c->idx, &(c->curprg->def->tag), 
NULL, escaped_query, GDKusec()-Tbegin, c->query? 0 : 1 },
+                                         1);
                GDKfree(escaped_query);
        }
 
@@ -1210,11 +1207,7 @@ SQLparser(Client c)
                                }
                        }
 
-                       if(malProfileMode > 0)
-                               generic_event("rel_to_mal",
-                                                        (struct GenericEvent)
-                                                        { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, c->query? 0 : 1 },
-                                                        0);
+                       Tbegin = GDKusec();
 
                        if (backend_dumpstmt(be, c->curprg->def, r, !(m->emod & 
mod_exec), 0, c->query) < 0)
                                err = 1;
@@ -1224,7 +1217,7 @@ SQLparser(Client c)
                        if(malProfileMode > 0)
                                generic_event("rel_to_mal",
                                                          (struct GenericEvent)
-                                                         { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, c->query? 0 : 1 },
+                                                         { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, GDKusec()-Tbegin, c->query? 0 : 1 },
                                                          1);
                } else {
                        char *q_copy = sa_strdup(m->sa, c->query);
@@ -1304,19 +1297,14 @@ SQLparser(Client c)
                /* in case we had produced a non-cachable plan, the optimizer 
should be called */
                if (msg == MAL_SUCCEED && opt ) {
 
-                       if(malProfileMode > 0)
-                               generic_event("mal_opt",
-                                                        (struct GenericEvent)
-                                                        { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, 0 },
-                                                        0);
-
+                       Tbegin = GDKusec();
                        msg = SQLoptimizeQuery(c, c->curprg->def);
 
                        if(malProfileMode > 0)
                                generic_event("mal_opt",
-                                                        (struct GenericEvent)
-                                                        { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, msg == MAL_SUCCEED? 0 : 1 },
-                                                        1);
+                                                         (struct GenericEvent)
+                                                         { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, GDKusec()-Tbegin, msg == MAL_SUCCEED? 0 : 1 
},
+                                                         1);
 
                        if (msg != MAL_SUCCEED) {
                                str other = c->curprg->def->errors;
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -308,6 +308,7 @@ typedef struct sql_trans {
 
        ulng ts;                        /* transaction start timestamp */
        ulng tid;                       /* transaction id */
+       lng ts2;            /* transaction timestamp for profiling */
 
        sql_store store;        /* keep link into the global store */
        MT_Lock lock;           /* lock protecting concurrent writes to the 
changes list */
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,12 +125,12 @@ mvc_fix_depend(mvc *m, sql_column *depid
 }
 
 static void
-generic_event_wrapper(str phase, ulng tid, int rc, int state)
+generic_event_wrapper(str phase, ulng tid, lng usec, int rc, int state)
 {
        if(malProfileMode > 0)
                generic_event(phase,
                                          (struct GenericEvent)
-                                         { NULL, NULL, &tid, NULL, rc },
+                                         { NULL, NULL, &tid, NULL, usec, rc },
                                          state);
 }
 
@@ -488,10 +488,11 @@ mvc_trans(mvc *m)
        TRC_INFO(SQL_TRANS, "Starting transaction\n");
        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, (res || err)? 1 : 0 },
+                                         (struct GenericEvent)
+                                         { NULL, NULL, &(m->session->tr->tid), 
NULL, GDKusec(), (res || err)? 1 : 0 },
                                          0);
 
        if (m->qc && (res || err)) {
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, int rc, int 
state);
+typedef void (*generic_event_wrapper_fptr) (str phase, ulng tid, lng usec, int 
rc, int state);
 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
@@ -3579,8 +3579,7 @@ static void
 sql_trans_rollback(sql_trans *tr, bool commit_lock)
 {
        sqlstore *store = tr->store;
-
-       store->generic_event_wrapper("rollback", tr->tid, 0, 0);
+       lng Tbegin = GDKusec();
 
        /* move back deleted */
        if (tr->localtmps.dset) {
@@ -3678,7 +3677,7 @@ sql_trans_rollback(sql_trans *tr, bool c
                tr->depchanges = NULL;
        }
 
-       store->generic_event_wrapper("rollback", tr->tid, 0, 1);
+       store->generic_event_wrapper("rollback", tr->tid, GDKusec()-Tbegin, 0, 
1);
 }
 
 sql_trans *
@@ -3884,6 +3883,7 @@ sql_trans_commit(sql_trans *tr)
 {
        int ok = LOG_OK;
        sqlstore *store = tr->store;
+       lng Tbegin;
 
        if (!list_empty(tr->changes)) {
                int flush = 0;
@@ -3911,7 +3911,7 @@ sql_trans_commit(sql_trans *tr)
                        }
                }
 
-               store->generic_event_wrapper("commit", tr->tid, 0, 0);
+               Tbegin = GDKusec();
 
                /* log changes should only be done if there is something to log 
*/
                const bool log = !tr->parent && tr->logchanges > 0;
@@ -4043,7 +4043,7 @@ sql_trans_commit(sql_trans *tr)
        if (ok == LOG_OK)
                ok = clean_predicates_and_propagate_to_parent(tr);
 
-       store->generic_event_wrapper("commit", tr->tid, (ok == LOG_OK)? SQL_OK 
: SQL_ERR, 1);
+       store->generic_event_wrapper("commit", tr->tid, GDKusec()-Tbegin, (ok 
== LOG_OK)? SQL_OK : SQL_ERR, 1);
 
        return (ok==LOG_OK)?SQL_OK:SQL_ERR;
 }
@@ -7079,7 +7079,7 @@ sql_trans_end(sql_session *s, int ok)
        }
        store->oldest = oldest;
        assert(list_length(store->active) == (int) 
ATOMIC_GET(&store->nr_active));
-       store->generic_event_wrapper("transaction", s->tr->tid, (ok == LOG_OK)? 
SQL_OK : SQL_ERR, 1);
+       store->generic_event_wrapper("transaction", s->tr->tid, 
GDKusec()-(s->tr->ts2), (ok == LOG_OK)? SQL_OK : SQL_ERR, 1);
        store_unlock(store);
 
        return ok;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to