Changeset: 94c85a0f732a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/94c85a0f732a
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_upgrades.c
sql/scripts/25_debug.sql
sql/storage/bat/bat_storage.c
Branch: Jul2021
Log Message:
updated sys.deltas for the new storage structures,
removed cleared (no longer usefull)
renamed immutable -> all.
added new column 'segments', which is an indication of the fragmentation
diffs (187 lines):
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
@@ -1349,17 +1349,16 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
/* The output of this function are 7 columns:
* - The sqlid of the column
- * - A flag indicating if the column's upper table is cleared or not.
- * - Number of read-only values of the column (inherited from the previous
transaction).
+ * - Number of values of the column.
+ * - Number of segments, indication of the fragmentation
* - Number of inserted rows during the current transaction.
* - Number of updated rows during the current transaction.
* - Number of deletes of the column's table.
* - the number in the transaction chain (.i.e for each savepoint a new
transaction is added in the chain)
- * If the table is cleared, the values RDONLY, and RD_UPD_ID and the number
of deletes will be 0.
*/
static str
-mvc_insert_delta_values(mvc *m, BAT *col1, BAT *col2, BAT *col3, BAT *col4,
BAT *col5, BAT *col6, BAT *col7, sql_column *c, bit cleared, lng deletes)
+mvc_insert_delta_values(mvc *m, BAT *col1, BAT *col2, BAT *col3, BAT *col4,
BAT *col5, BAT *col6, BAT *col7, sql_column *c, lng segments, lng deletes)
{
int level = 0;
sqlstore *store = m->session->tr->store;
@@ -1367,15 +1366,14 @@ mvc_insert_delta_values(mvc *m, BAT *col
lng inserted = (lng) store->storage_api.count_col(m->session->tr, c, 1);
lng all = (lng) store->storage_api.count_col(m->session->tr, c, 0);
lng updates = (lng) store->storage_api.count_col(m->session->tr, c, 2);
- lng readonly = all - inserted;
if (BUNappend(col1, &c->base.id, false) != GDK_SUCCEED) {
return createException(SQL,"sql.delta", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
- if (BUNappend(col2, &cleared, false) != GDK_SUCCEED) {
+ if (BUNappend(col2, &segments, false) != GDK_SUCCEED) {
return createException(SQL,"sql.delta", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
- if (BUNappend(col3, &readonly, false) != GDK_SUCCEED) {
+ if (BUNappend(col3, &all, false) != GDK_SUCCEED) {
return createException(SQL,"sql.delta", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
if (BUNappend(col4, &inserted, false) != GDK_SUCCEED) {
@@ -1418,9 +1416,8 @@ mvc_delta_values(Client cntxt, MalBlkPtr
sql_table *t = NULL;
sql_column *c = NULL;
node *n;
- bit cleared;
BUN nrows = 0;
- lng deletes;
+ lng deletes, segments;
if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
return msg;
@@ -1459,7 +1456,7 @@ mvc_delta_values(Client cntxt, MalBlkPtr
msg = createException(SQL, "sql.delta", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
goto cleanup;
}
- if ((col2 = COLnew(0, TYPE_bit, nrows, TRANSIENT)) == NULL) {
+ if ((col2 = COLnew(0, TYPE_lng, nrows, TRANSIENT)) == NULL) {
msg = createException(SQL, "sql.delta", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
goto cleanup;
}
@@ -1486,15 +1483,15 @@ mvc_delta_values(Client cntxt, MalBlkPtr
if (nrows) {
if (tname) {
- cleared = 0;//(t->cleared != 0);
deletes = (lng)
store->storage_api.count_del(m->session->tr, t, 0);
+ segments = (lng)
store->storage_api.count_del(m->session->tr, t, 10);
if (cname) {
- if ((msg=mvc_insert_delta_values(m, col1, col2,
col3, col4, col5, col6, col7, c, cleared, deletes)) != NULL)
+ if ((msg=mvc_insert_delta_values(m, col1, col2,
col3, col4, col5, col6, col7, c, segments, deletes)) != NULL)
goto cleanup;
} else {
for (n = ol_first_node(t->columns); n ; n =
n->next) {
c = (sql_column*) n->data;
- if ((msg=mvc_insert_delta_values(m,
col1, col2, col3, col4, col5, col6, col7, c, cleared, deletes)) != NULL)
+ if ((msg=mvc_insert_delta_values(m,
col1, col2, col3, col4, col5, col6, col7, c, segments, deletes)) != NULL)
goto cleanup;
}
}
@@ -1504,14 +1501,13 @@ mvc_delta_values(Client cntxt, MalBlkPtr
for (sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
t = (sql_table *)b;
if (isTable(t)) {
- cleared = 0;//(t->cleared != 0);
deletes = (lng)
store->storage_api.count_del(m->session->tr, t, 0);
+ segments = (lng)
store->storage_api.count_del(m->session->tr, t, 10);
for (node *nn =
ol_first_node(t->columns); nn ; nn = nn->next) {
c = (sql_column*) nn->data;
- if
((msg=mvc_insert_delta_values(m, col1, col2, col3, col4, col5, col6, col7,
-
c, cleared, deletes)) != NULL)
+ if
((msg=mvc_insert_delta_values(m, col1, col2, col3, col4, col5, col6, col7, c,
segments, deletes)) != NULL)
goto cleanup;
}
}
@@ -4884,9 +4880,9 @@ static mel_func sql_init_funcs[] = {
pattern("batsql", "restart", mvc_bat_restart_seq, true, "restart the sequence
with value start", args(1,4,
batarg("",lng),batarg("sname",str),arg("sequence",str),batarg("start",lng))),
pattern("batsql", "restart", mvc_bat_restart_seq, true, "restart the sequence
with value start", args(1,4,
batarg("",lng),arg("sname",str),batarg("sequence",str),batarg("start",lng))),
pattern("batsql", "restart", mvc_bat_restart_seq, true, "restart the sequence
with value start", args(1,4,
batarg("",lng),batarg("sname",str),batarg("sequence",str),batarg("start",lng))),
- pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes of all columns of the schema's tables, plus the current transaction
level", args(7,8,
batarg("ids",int),batarg("cleared",bit),batarg("readonly",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str))),
- pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes from the table's columns, plus the current transaction level", args(7,9,
batarg("ids",int),batarg("cleared",bit),batarg("readonly",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str),arg("table",str))),
- pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes of a column, plus the current transaction level", args(7,10,
batarg("ids",int),batarg("cleared",bit),batarg("readonly",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str),arg("table",str),arg("column",str))),
+ pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes of all columns of the schema's tables, plus the current transaction
level", args(7,8,
batarg("ids",int),batarg("segments",lng),batarg("all",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str))),
+ pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes from the table's columns, plus the current transaction level", args(7,9,
batarg("ids",int),batarg("segments",lng),batarg("all",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str),arg("table",str))),
+ pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes of a column, plus the current transaction level", args(7,10,
batarg("ids",int),batarg("segments",lng),batarg("all",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str),arg("table",str),arg("column",str))),
pattern("sql", "emptybindidx", mvc_bind_idxbat_wrap, false, "", args(1,6,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("index",str),arg("access",int))),
pattern("sql", "bind_idxbat", mvc_bind_idxbat_wrap, false, "Bind the
'schema.table.index' BAT with access kind:\n0 - base table\n1 - inserts\n2 -
updates", args(1,6,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("index",str),arg("access",int))),
pattern("sql", "emptybindidx", mvc_bind_idxbat_wrap, false, "", args(2,7,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("index",str),arg("access",int))),
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
@@ -2381,6 +2381,23 @@ sql_update_jul2021(Client c, mvc *sql, c
pos += snprintf(buf + pos, bufsize - pos,
"drop procedure
sys.flush_log();\n");
+ pos += snprintf(buf + pos, bufsize - pos,
+ "drop procedure
sys.deltas(string);\n"
+ "drop procedure
sys.deltas(string, string);\n"
+ "drop procedure
sys.deltas(string, string, string);\n");
+ pos += snprintf(buf + pos, bufsize - pos,
+ "create function
sys.deltas (\"schema\" string)\n"
+ "returns table (id int,
segments bigint, \"all\" bigint, inserted bigint, updates bigint, deletes
bigint, level int)\n"
+ "external name
sql.deltas;\n"
+
+ "create function
sys.deltas (\"schema\" string, \"table\" string)\n"
+ "returns table (id int,
segments bigint, \"all\" bigint, inserted bigint, updates bigint, deletes
bigint, level int)\n"
+ "external name
sql.deltas;\n"
+
+ "create function
sys.deltas (\"schema\" string, \"table\" string, \"column\" string)\n"
+ "returns table (id int,
segments bigint, \"all\" bigint, inserted bigint, updates bigint, deletes
bigint, level int)\n"
+ "external name
sql.deltas;\n");
+
/* fix up dependencies for function getproj4 (if it
exists) */
pos += snprintf(buf + pos, bufsize - pos,
"delete from
sys.dependencies d where d.depend_id = (select id from sys.functions where name
= 'getproj4' and schema_id = 2000) and id in (select id from sys._columns where
name not in ('proj4text', 'srid'));\n");
diff --git a/sql/scripts/25_debug.sql b/sql/scripts/25_debug.sql
--- a/sql/scripts/25_debug.sql
+++ b/sql/scripts/25_debug.sql
@@ -73,13 +73,13 @@ create function sys.debugflags()
external name mdb."getDebugFlags";
create function sys.deltas ("schema" string)
- returns table ("id" int, "cleared" boolean, "immutable" bigint,
"inserted" bigint, "updates" bigint, "deletes" bigint, "level" int)
+ returns table ("id" int, "segments" bigint, "all" bigint, "inserted"
bigint, "updates" bigint, "deletes" bigint, "level" int)
external name "sql"."deltas";
create function sys.deltas ("schema" string, "table" string)
- returns table ("id" int, "cleared" boolean, "immutable" bigint,
"inserted" bigint, "updates" bigint, "deletes" bigint, "level" int)
+ returns table ("id" int, "segments" bigint, "all" bigint, "inserted"
bigint, "updates" bigint, "deletes" bigint, "level" int)
external name "sql"."deltas";
create function sys.deltas ("schema" string, "table" string, "column" string)
- returns table ("id" int, "cleared" boolean, "immutable" bigint,
"inserted" bigint, "updates" bigint, "deletes" bigint, "level" int)
+ returns table ("id" int, "segments" bigint, "all" bigint, "inserted"
bigint, "updates" bigint, "deletes" bigint, "level" int)
external name "sql"."deltas";
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1478,6 +1478,16 @@ dcount_col(sql_trans *tr, sql_column *c)
}
static size_t
+count_segs(segment *s)
+{
+ size_t nr = 0;
+
+ for( ; s; s = s->next)
+ nr++;
+ return nr;
+}
+
+static size_t
count_del(sql_trans *tr, sql_table *t, int access)
{
storage *d;
@@ -1491,6 +1501,8 @@ count_del(sql_trans *tr, sql_table *t, i
return d->cs.ucnt;
if (access == 1)
return count_inserts(d->segs->h, tr);
+ if (access == 10) /* special case for counting the number of segments */
+ return count_segs(d->segs->h);
return count_deletes(d->segs->h, tr);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list