Changeset: cacec59223a4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cacec59223a4
Modified Files:
sql/storage/bat/bat_table.c
sql/storage/sql_catalog.c
sql/storage/store.c
Branch: default
Log Message:
small startup optimizations (more dynamic hash tables for sql structures, ie
properly handle the 20K tables case)
diffs (133 lines):
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -105,7 +105,7 @@ delta_full_bat_( sql_trans *tr, sql_colu
}
(void)c;
if (!bat->cached /*&& !tr->parent*/)
- bat->cached = temp_descriptor(b->batCacheid);
+ bat->cached = b;
return b;
}
@@ -113,7 +113,7 @@ static BAT *
delta_full_bat( sql_trans *tr, sql_column *c, sql_delta *bat, int temp)
{
if (bat->cached /*&& !tr->parent*/)
- return temp_descriptor(bat->cached->batCacheid);
+ return bat->cached;
return delta_full_bat_( tr, c, bat, temp);
}
@@ -127,6 +127,15 @@ full_column(sql_trans *tr, sql_column *c
return delta_full_bat(tr, c, c->data, isTemp(c));
}
+static void
+full_destroy(sql_column *c, BAT *b)
+{
+ sql_delta *d = c->data;
+ assert(d);
+ if (d->cached != b)
+ bat_destroy(b);
+}
+
static oid column_find_row(sql_trans *tr, sql_column *c, const void *value,
...);
static oid
column_find_row(sql_trans *tr, sql_column *c, const void *value, ...)
@@ -141,7 +150,7 @@ column_find_row(sql_trans *tr, sql_colum
r = BATsubselect(b, s, value, NULL, 1, 0, 0);
bat_destroy(s);
s = r;
- bat_destroy(b);
+ full_destroy(c, b);
while ((c = va_arg(va, sql_column *)) != NULL) {
value = va_arg(va, void *);
@@ -149,7 +158,7 @@ column_find_row(sql_trans *tr, sql_colum
r = BATsubselect(b, s, value, NULL, 1, 0, 0);
bat_destroy(s);
s = r;
- bat_destroy(b);
+ full_destroy(c, b);
}
va_end(va);
if (BATcount(s) == 1) {
@@ -176,11 +185,11 @@ column_find_value(sql_trans *tr, sql_col
res = BUNtail(bi, q);
sz = ATOMlen(b->ttype, res);
- r = GDKzalloc(sz);
+ r = GDKmalloc(sz);
memcpy(r,res,sz);
res = r;
}
- bat_destroy(b);
+ full_destroy(c, b);
return res;
}
@@ -290,10 +299,12 @@ rids_select( sql_trans *tr, sql_column *
if (!kvh && key_value_low != ATOMnilptr(b->ttype))
kvh = ATOMnilptr(b->ttype);
hi = (kvl == kvh);
+ if (!b->T->hash)
+ BAThash(b, 0);
r = BATsubselect(b, s, kvl, kvh, 1, hi, 0);
bat_destroy(s);
s = r;
- bat_destroy(b);
+ full_destroy(key, b);
if (key_value_low || key_value_high) {
va_start(va, key_value_high);
while ((key = va_arg(va, sql_column *)) != NULL) {
@@ -309,7 +320,7 @@ rids_select( sql_trans *tr, sql_column *
r = BATsubselect(b, s, kvl, kvh, 1, hi, 0);
bat_destroy(s);
s = r;
- bat_destroy(b);
+ full_destroy(key, b);
}
va_end(va);
}
@@ -326,7 +337,7 @@ rids_orderby(sql_trans *tr, rids *r, sql
b = full_column(tr, orderby_col);
s = BATproject(r->data, b);
- bat_destroy(b);
+ full_destroy(orderby_col, b);
BATsubsort(NULL, &o, NULL, s, NULL, NULL, 0, 0);
bat_destroy(s);
s = BATproject(o, r->data);
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -18,7 +18,7 @@ static void *
if (l) {
MT_lock_set(&l->ht_lock, "_list_find_name");
- if (!l->ht && list_length(l) > HASH_MIN_SIZE && l->sa) {
+ if ((!l->ht || l->ht->size*16 < list_length(l)) &&
list_length(l) > HASH_MIN_SIZE && l->sa) {
l->ht = hash_new(l->sa, list_length(l),
(fkeyvalue)&base_key);
for (n = l->h; n; n = n->next ) {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2075,15 +2075,8 @@ sql_trans_copy_column( sql_trans *tr, sq
static sql_table *
schema_table_find(sql_schema *s, sql_table *ot)
{
- node *n;
-
if (s)
- for (n = s->tables.set->h; n; n = n->next) {
- sql_table *t = n->data;
-
- if (t->base.id == ot->base.id)
- return t;
- }
+ return find_sql_table(s, ot->base.name);
assert(NULL);
return NULL;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list