We have a SQL Server 2012 instance with 16 CPU cores. When looking in sys.dm_os_schedulers we see the expected 16 rows that are "VISIBLE ONLINE", one per core. The error log shows the following standard entry on startup:
SQL Server detected 2 sockets with 8 cores per socket and 8 logical processors per socket, 16 total logical processors; using 16 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
However sys.dm_os_schedulers also contains approx. 1200 rows that are "HIDDEN ONLINE".
The server is not using Availability Groups or Mirroring, and Resource Governor is not enabled.
The problem is that each hidden scheduler appears to be assigned one worker thread, so our monitoring software is constantly alerting that the server is running out of threads, even though queries are running perfectly happily and there does not appear to be any actual impact to performance.
I'm aware that hidden schedulers are only available to internal system processes, but do you know what would cause so many to be shown?