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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list