Changeset: fff1d84c5d64 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fff1d84c5d64
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
monetdb5/mal/mal_runtime.c
monetdb5/mal/mal_runtime.h
monetdb5/modules/mal/sysmon.c
monetdb5/modules/mal/sysmon.mal
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_upgrades.c
sql/scripts/26_sysmon.sql
sql/test/sys-schema/Tests/systemfunctions.stable.out
sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
Branch: sessions
Log Message:
Upgrade of the sys.queue structure
diffs (truncated from 352 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -11800,7 +11800,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "sysmon_pause", "pattern sql.sysmon_pause(tag:int):void ",
"SYSMONpause;", "" ]
[ "sql", "sysmon_pause", "pattern sql.sysmon_pause(tag:lng):void ",
"SYSMONpause;", "" ]
[ "sql", "sysmon_pause", "pattern sql.sysmon_pause(tag:sht):void ",
"SYSMONpause;", "" ]
-[ "sql", "sysmon_queue", "pattern sql.sysmon_queue() (qtag:bat[:lng],
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp],
estimate:bat[:timestamp], progress:bat[:int], status:bat[:str], tag:bat[:oid],
query:bat[:str]) ", "SYSMONqueue;", "" ]
+[ "sql", "sysmon_queue", "pattern sql.sysmon_queue() (tag:bat[:lng],
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str],
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",
"SYSMONqueue;", "" ]
[ "sql", "sysmon_resume", "pattern
sql.sysmon_resume(tag:int):void ", "SYSMONresume;", "" ]
[ "sql", "sysmon_resume", "pattern
sql.sysmon_resume(tag:lng):void ", "SYSMONresume;", "" ]
[ "sql", "sysmon_resume", "pattern
sql.sysmon_resume(tag:sht):void ", "SYSMONresume;", "" ]
@@ -11947,7 +11947,7 @@ stdout of test 'MAL-signatures` in direc
[ "sysmon", "pause", "pattern sysmon.pause(id:int):void ",
"SYSMONpause;", "Suspend a running query" ]
[ "sysmon", "pause", "pattern sysmon.pause(id:lng):void ",
"SYSMONpause;", "Suspend a running query" ]
[ "sysmon", "pause", "pattern sysmon.pause(id:sht):void ",
"SYSMONpause;", "Suspend a running query" ]
-[ "sysmon", "queue", "pattern sysmon.queue() (tag:bat[:lng],
user:bat[:str], started:bat[:timestamp], estimate:bat[:timestamp],
progress:bat[:int], status:bat[:str], qrytag:bat[:oid], query:bat[:str]) ",
"SYSMONqueue;", "" ]
+[ "sysmon", "queue", "pattern sysmon.queue() (tag:bat[:lng],
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str],
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",
"SYSMONqueue;", "" ]
[ "sysmon", "resume", "pattern sysmon.resume(id:int):void ",
"SYSMONresume;", "Resume processing of a query " ]
[ "sysmon", "resume", "pattern sysmon.resume(id:lng):void ",
"SYSMONresume;", "Resume processing of a query " ]
[ "sysmon", "resume", "pattern sysmon.resume(id:sht):void ",
"SYSMONresume;", "Resume processing of a query " ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -16217,7 +16217,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "sysmon_pause", "pattern sql.sysmon_pause(tag:int):void ",
"SYSMONpause;", "" ]
[ "sql", "sysmon_pause", "pattern sql.sysmon_pause(tag:lng):void ",
"SYSMONpause;", "" ]
[ "sql", "sysmon_pause", "pattern sql.sysmon_pause(tag:sht):void ",
"SYSMONpause;", "" ]
-[ "sql", "sysmon_queue", "pattern sql.sysmon_queue() (qtag:bat[:lng],
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp],
estimate:bat[:timestamp], progress:bat[:int], status:bat[:str], tag:bat[:oid],
query:bat[:str]) ", "SYSMONqueue;", "" ]
+[ "sql", "sysmon_queue", "pattern sql.sysmon_queue() (tag:bat[:lng],
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str],
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",
"SYSMONqueue;", "" ]
[ "sql", "sysmon_resume", "pattern
sql.sysmon_resume(tag:int):void ", "SYSMONresume;", "" ]
[ "sql", "sysmon_resume", "pattern
sql.sysmon_resume(tag:lng):void ", "SYSMONresume;", "" ]
[ "sql", "sysmon_resume", "pattern
sql.sysmon_resume(tag:sht):void ", "SYSMONresume;", "" ]
@@ -16366,7 +16366,7 @@ stdout of test 'MAL-signatures` in direc
[ "sysmon", "pause", "pattern sysmon.pause(id:int):void ",
"SYSMONpause;", "Suspend a running query" ]
[ "sysmon", "pause", "pattern sysmon.pause(id:lng):void ",
"SYSMONpause;", "Suspend a running query" ]
[ "sysmon", "pause", "pattern sysmon.pause(id:sht):void ",
"SYSMONpause;", "Suspend a running query" ]
-[ "sysmon", "queue", "pattern sysmon.queue() (tag:bat[:lng],
user:bat[:str], started:bat[:timestamp], estimate:bat[:timestamp],
progress:bat[:int], status:bat[:str], qrytag:bat[:oid], query:bat[:str]) ",
"SYSMONqueue;", "" ]
+[ "sysmon", "queue", "pattern sysmon.queue() (tag:bat[:lng],
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str],
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",
"SYSMONqueue;", "" ]
[ "sysmon", "resume", "pattern sysmon.resume(id:int):void ",
"SYSMONresume;", "Resume processing of a query " ]
[ "sysmon", "resume", "pattern sysmon.resume(id:lng):void ",
"SYSMONresume;", "Resume processing of a query " ]
[ "sysmon", "resume", "pattern sysmon.resume(id:sht):void ",
"SYSMONresume;", "Resume processing of a query " ]
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -35,6 +35,7 @@ static oid qtag= 1; // A unique query i
QRYqueue[I].tag = 0; \
QRYqueue[I].query = 0; \
QRYqueue[I].status =0; \
+ QRYqueue[I].progress =0; \
QRYqueue[I].stk =0; \
QRYqueue[I].mb =0; \
@@ -142,7 +143,7 @@ runtimeProfileFinish(Client cntxt, MalBl
cntxt->idle = time(0);
cntxt->lastcmd = 0;
QRYqueue[qtop].workers = 0;
- QRYqueue[qtop].memoryclaim = 0;
+ QRYqueue[qtop].memory= 0;
MT_lock_unset(&mal_delayLock);
}
diff --git a/monetdb5/mal/mal_runtime.h b/monetdb5/mal/mal_runtime.h
--- a/monetdb5/mal/mal_runtime.h
+++ b/monetdb5/mal/mal_runtime.h
@@ -32,8 +32,9 @@ typedef struct QRYQUEUE{
str query;
str status;
time_t start;
+ int progress; /* percentage of MAL
instructions handled */
int workers; /* Actual number of concurrent
workers */
- lng memoryclaim; /* Actual memory claim highwater mark */
+ lng memory; /* Actual memory claim highwater mark */
lng runtime;
} *QueryQueue;
mal_export lng qtop;
diff --git a/monetdb5/modules/mal/sysmon.c b/monetdb5/modules/mal/sysmon.c
--- a/monetdb5/modules/mal/sysmon.c
+++ b/monetdb5/modules/mal/sysmon.c
@@ -19,19 +19,17 @@
str
SYSMONqueue(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- BAT *tag, *sessionid, *user, *query, *estimate, *started, *progress,
*activity, *oids;
+ BAT *tag, *sessionid, *user, *started, *status, *query, *progress,
*workers, *memory;
bat *t = getArgReference_bat(stk,pci,0);
- bat *d = getArgReference_bat(stk,pci,1);
+ bat *s = getArgReference_bat(stk,pci,1);
bat *u = getArgReference_bat(stk,pci,2);
- bat *s = getArgReference_bat(stk,pci,3);
- bat *e = getArgReference_bat(stk,pci,4);
- bat *p = getArgReference_bat(stk,pci,5);
- bat *a = getArgReference_bat(stk,pci,6);
- bat *o = getArgReference_bat(stk,pci,7);
- bat *q = getArgReference_bat(stk,pci,8);
- time_t now;
- lng i;
- int prog;
+ bat *sd = getArgReference_bat(stk,pci,3);
+ bat *ss = getArgReference_bat(stk,pci,4);
+ bat *q = getArgReference_bat(stk,pci,5);
+ bat *p = getArgReference_bat(stk,pci,6);
+ bat *w = getArgReference_bat(stk,pci,7);
+ bat *m = getArgReference_bat(stk,pci,8);
+ lng i, qtag;
str usr;
timestamp tsn;
str msg = MAL_SUCCEED;
@@ -39,37 +37,32 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb,
(void) cntxt;
(void) mb;
tag = COLnew(0, TYPE_lng, 256, TRANSIENT);
- sessionid = COLnew(0, TYPE_int, 256, TRANSIENT);
+ sessionid = COLnew(2, TYPE_int, 256, TRANSIENT);
user = COLnew(0, TYPE_str, 256, TRANSIENT);
started = COLnew(0, TYPE_timestamp, 256, TRANSIENT);
- estimate = COLnew(0, TYPE_timestamp, 256, TRANSIENT);
+ status = COLnew(0, TYPE_str, 256, TRANSIENT);
+ query = COLnew(0, TYPE_str, 256, TRANSIENT);
progress = COLnew(0, TYPE_int, 256, TRANSIENT);
- activity = COLnew(0, TYPE_str, 256, TRANSIENT);
- oids = COLnew(0, TYPE_oid, 256, TRANSIENT);
- query = COLnew(0, TYPE_str, 256, TRANSIENT);
- if ( tag == NULL || sessionid == NULL || user == NULL || query == NULL
|| started == NULL || estimate == NULL || progress == NULL || activity == NULL
|| oids == NULL){
+ workers = COLnew(0, TYPE_int, 256, TRANSIENT);
+ memory = COLnew(0, TYPE_int, 256, TRANSIENT);
+ if ( tag == NULL || sessionid == NULL || user == NULL || query == NULL
|| started == NULL || progress == NULL || workers == NULL || memory == NULL){
BBPreclaim(tag);
BBPreclaim(sessionid);
BBPreclaim(user);
+ BBPreclaim(started);
+ BBPreclaim(status);
BBPreclaim(query);
- BBPreclaim(activity);
- BBPreclaim(started);
- BBPreclaim(estimate);
BBPreclaim(progress);
- BBPreclaim(oids);
+ BBPreclaim(workers);
+ BBPreclaim(memory);
throw(MAL, "SYSMONqueue", SQLSTATE(HY001) MAL_MALLOC_FAIL);
}
MT_lock_set(&mal_delayLock);
for ( i = 0; i< qtop; i++)
if( QRYqueue[i].query && (QRYqueue[i].cntxt->user == MAL_ADMIN ||
QRYqueue[i].cntxt->user == cntxt->user)) {
- now= time(0);
- if ( (now-QRYqueue[i].start) > QRYqueue[i].runtime)
- prog =QRYqueue[i].runtime > 0 ? 100: int_nil;
- else
- // calculate progress based on past observations
- prog = (int) ((now- QRYqueue[i].start) /
(QRYqueue[i].runtime/100.0));
- if (BUNappend(tag, &(lng){QRYqueue[i].tag}, false) !=
GDK_SUCCEED)
+ qtag= QRYqueue[i].tag;
+ if (BUNappend(tag, &qtag, false) != GDK_SUCCEED)
goto bailout;
msg = AUTHgetUsername(&usr, QRYqueue[i].cntxt);
if (msg != MAL_SUCCEED)
@@ -86,7 +79,7 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb,
}
GDKfree(usr);
if (BUNappend(query, QRYqueue[i].query, false) != GDK_SUCCEED ||
- BUNappend(activity, QRYqueue[i].status, false) !=
GDK_SUCCEED)
+ BUNappend(status, QRYqueue[i].status, false) !=
GDK_SUCCEED)
goto bailout;
/* convert number of seconds into a timestamp */
@@ -97,33 +90,21 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb,
}
if (BUNappend(started, &tsn, false) != GDK_SUCCEED)
goto bailout;
-
- if ( QRYqueue[i].mb->runtime == 0) {
- if (BUNappend(estimate, ×tamp_nil, false) !=
GDK_SUCCEED)
- goto bailout;
- } else {
- tsn = timestamp_add_usec(tsn, 1000 *
QRYqueue[i].mb->runtime);
- if (is_timestamp_nil(tsn)) {
- msg = createException(MAL, "SYSMONqueue",
SQLSTATE(22003) "cannot convert time");
- goto bailout;
- }
- if (BUNappend(estimate, &tsn, false) != GDK_SUCCEED)
- goto bailout;
- }
- if (BUNappend(oids, &QRYqueue[i].mb->tag, false) != GDK_SUCCEED
||
- BUNappend(progress, &prog, false) != GDK_SUCCEED)
+ if (BUNappend(progress, &QRYqueue[i].progress, false) !=
GDK_SUCCEED ||
+ BUNappend(workers, &QRYqueue[i].workers, false) !=
GDK_SUCCEED ||
+ BUNappend(memory, &QRYqueue[i].memory, false) !=
GDK_SUCCEED)
goto bailout;
}
MT_lock_unset(&mal_delayLock);
BBPkeepref( *t =tag->batCacheid);
- BBPkeepref( *d =sessionid->batCacheid);
+ BBPkeepref( *s =sessionid->batCacheid);
BBPkeepref( *u =user->batCacheid);
- BBPkeepref( *s =started->batCacheid);
- BBPkeepref( *e = estimate->batCacheid);
- BBPkeepref( *a =activity->batCacheid);
+ BBPkeepref( *sd =started->batCacheid);
+ BBPkeepref( *ss =status->batCacheid);
+ BBPkeepref( *q =query->batCacheid);
BBPkeepref( *p =progress->batCacheid);
- BBPkeepref( *o =oids->batCacheid);
- BBPkeepref( *q =query->batCacheid);
+ BBPkeepref( *w =workers->batCacheid);
+ BBPkeepref( *m =memory->batCacheid);
return MAL_SUCCEED;
bailout:
@@ -131,12 +112,12 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb,
BBPunfix(tag->batCacheid);
BBPunfix(sessionid->batCacheid);
BBPunfix(user->batCacheid);
+ BBPunfix(started->batCacheid);
+ BBPunfix(status->batCacheid);
BBPunfix(query->batCacheid);
- BBPunfix(activity->batCacheid);
- BBPunfix(started->batCacheid);
- BBPunfix(estimate->batCacheid);
BBPunfix(progress->batCacheid);
- BBPunfix(oids->batCacheid);
+ BBPunfix(workers->batCacheid);
+ BBPunfix(memory->batCacheid);
return msg ? msg : createException(MAL, "SYSMONqueue", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
}
diff --git a/monetdb5/modules/mal/sysmon.mal b/monetdb5/modules/mal/sysmon.mal
--- a/monetdb5/modules/mal/sysmon.mal
+++ b/monetdb5/modules/mal/sysmon.mal
@@ -36,5 +36,6 @@ pattern stop(id:lng)
address SYSMONstop
comment "Stop a single query a.s.a.p.";
-pattern queue()(tag:bat[:lng],
user:bat[:str],started:bat[:timestamp],estimate:bat[:timestamp],progress:bat[:int],
status:bat[:str], qrytag:bat[:oid],query:bat[:str])
+pattern queue()(tag:bat[:lng], sessionid:bat[:int], user:bat[:str],
started:bat[:timestamp],
+status:bat[:str], query:bat[:str], progress:bat[:int], workers:bat[:int],
memory:bat[:int])
address SYSMONqueue;
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -657,7 +657,8 @@ command querylog_disable()
address QLOGdisable;
-pattern sysmon_queue()(qtag:bat[:lng], sessionid:bat[:int],
user:bat[:str],started:bat[:timestamp],estimate:bat[:timestamp],progress:bat[:int],
status:bat[:str], tag:bat[:oid], query:bat[:str])
+pattern sysmon_queue()(tag:bat[:lng], sessionid:bat[:int], user:bat[:str],
started:bat[:timestamp],
+status:bat[:str], query:bat[:str], progress:bat[:int], workers:bat[:int],
memory:bat[:int])
address SYSMONqueue;
pattern sysmon_pause(tag:sht)
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -2337,6 +2337,22 @@ sql_update_default(Client c, mvc *sql, c
"external name sql.setworkerlimit;\n"
"create procedure sys.setmemorylimit(\"sessionid\" int,
\"limit\" int)\n"
);
+ pos += snprintf(buf + pos, bufsize - pos,
+ "drop function sys.queue();\n"
+ "create function sys.queue()\n"
+ "returns table(\n"
+ "tag bigint,\n"
+ "sessionid int,\n"
+ "\"user\" string,\n"
+ "started timestamp,\n"
+ "status string, -- paused, running\n"
+ "query string,\n"
+ "progress int, -- percentage of MAL instructions
handled\n"
+ "workers int,\n"
+ "memory int)\n"
+ "external name sql.sysmon_queue;\n"
+ "grant execute on function sys.queue to public;\n"
+ );
pos += snprintf(buf + pos, bufsize - pos,
"update sys.functions set system = true where schema_id
= (select id from sys.schemas where name = 'sys')"
diff --git a/sql/scripts/26_sysmon.sql b/sql/scripts/26_sysmon.sql
--- a/sql/scripts/26_sysmon.sql
+++ b/sql/scripts/26_sysmon.sql
@@ -9,15 +9,15 @@
-- show status of all active SQL queries.
create function sys.queue()
returns table(
- qtag bigint,
+ tag bigint,
sessionid int,
"user" string,
started timestamp,
- estimate timestamp,
- progress int,
- status string,
- tag oid,
- query string
+ status string, -- paused, running
+ query string,
+ progress int, -- percentage of MAL instructions handled
+ workers int,
+ memory int
)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list