Instead of pre-creating a session per tenant and queuing transactions, You could use separate sessions for each transaction so that no querying is required. Or maybe use sharding (depends on use case). Use sharding to isolate data by tenant. Each tenant’s data resides on a separate shard, reducing contention. Transactions on separate shards can run concurrently without conflicts.