Changeset: 67d18cee1a62 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/67d18cee1a62
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: Jul2021
Log Message:
use more column locks (although we need to benchmark that more)
diffs (55 lines):
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
@@ -76,13 +76,13 @@ unlock_table(sqlstore *store, sqlid id)
static void
lock_column(sqlstore *store, sqlid id)
{
- MT_lock_set(&store->column_locks[id&(NR_TABLE_LOCKS-1)]);
+ MT_lock_set(&store->column_locks[id&(NR_COLUMN_LOCKS-1)]);
}
static void
unlock_column(sqlstore *store, sqlid id)
{
- MT_lock_unset(&store->column_locks[id&(NR_TABLE_LOCKS-1)]);
+ MT_lock_unset(&store->column_locks[id&(NR_COLUMN_LOCKS-1)]);
}
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
@@ -439,6 +439,7 @@ extern int sql_trans_copy_idx(sql_trans
extern int sql_trans_copy_trigger(sql_trans *tr, sql_table *t, sql_trigger
*tri, sql_trigger **tres);
#define NR_TABLE_LOCKS 64
+#define NR_COLUMN_LOCKS 512
#define TRANSACTION_ID_BASE (1ULL<<63)
typedef struct sqlstore {
@@ -449,7 +450,7 @@ typedef struct sqlstore {
MT_Lock commit; /* protect transactions, only single
commit (one wal writer) */
MT_Lock flush; /* flush lock protecting concurrent
writes (not reads, ie use rcu) */
MT_Lock table_locks[NR_TABLE_LOCKS]; /* protecting
concurrent writes too tables (storage) */
- MT_Lock column_locks[NR_TABLE_LOCKS]; /* protecting
concurrent writes too columns (storage) */
+ MT_Lock column_locks[NR_COLUMN_LOCKS]; /* protecting
concurrent writes too columns (storage) */
list *active; /* list of running transactions */
ATOMIC_TYPE nr_active; /* count number of transactions */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2020,10 +2020,10 @@ store_init(sql_allocator *pa, int debug,
MT_lock_init(&store->lock, "sqlstore_lock");
MT_lock_init(&store->commit, "sqlstore_commit");
MT_lock_init(&store->flush, "sqlstore_flush");
- for(int i = 0; i<NR_TABLE_LOCKS; i++) {
+ for(int i = 0; i<NR_TABLE_LOCKS; i++)
MT_lock_init(&store->table_locks[i], "sqlstore_table");
+ for(int i = 0; i<NR_COLUMN_LOCKS; i++)
MT_lock_init(&store->column_locks[i], "sqlstore_column");
- }
MT_lock_set(&store->lock);
MT_lock_set(&store->flush);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list