On the SignalR Performance page, you can read:
A stream in this context is the scale used by the scaling provider; this is a table if SQL Server is used, the topic if the service Bus is used and subscription if Redis is used. Each stream provides ordered read and write operations; a single thread is the potential of a large-scale bottleneck , so the number of threads can be increased to help reduce this bottleneck. If multiple streams are used, SignalR will automatically distribute (fragmented) the messages through these streams in a way that ensures that messages sent from any given connection are in order.
The number of threads (i.e. a table in SQL) can be set as follows:
var connectionString = "(your connection string)"; var config = new SqlScaleoutConfiguration(connectionString) { TableCount = 3, MaxQueueLength = 50 }; GlobalHost.DependencyResolver.UseSqlServer(config);
But the value of TableCount is 1 by default in SQL scaleout. If this is a bottleneck in scale, why is it 1 by default? What if I set it to 50?
The documentation does not give any clues to decide what value to give. Should I set it to 1, 3, 10, 1000? What are the pros and cons of great value? Does it increase latency?
source share