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

Reply via email to