Azure Sql request limit reached although the number of connections is well below the resource limit
It seems that we were on the right track regarding the MaxDop parameter mentioned in the edits to the question.
Sql server sometime uses more than one worker thread to execute a query so the number of connections doesn't always correspond to the number of execution threads. In our case, a query we've been executing periodically would sometimes spawn tens of worker threads, saturating the worker thread pool (since several copies of it would run simultaneously)
Since Azure SQL doesn't support setting this parameter globally, our solution was to add OPTION (MAXDOP 1)
to the offending query so its execution would be more predictable (at the cost of parallelism and speed).
We haven't seen the "resource limit" exception since.
Sql DB supports altering the Max DOP settings. You can change it by ALTER DATABASE SCOPED CONFIGURATION T-SQL https://msdn.microsoft.com/en-us/library/mt629158.aspx
The default behaviour is going to change in August of 2020:
Changing default MAXDOP in Azure SQL Database
To improve customer workload performance and reduce unnecessary resource utilization, the default MAXDOP setting for new databases in Azure SQL Database is changing from the previous default of 0 (unlimited) to 8.
How can I change MAXDOP for an existing database?
MAXDOP can be changed using the ALTER DATABASE SCOPED CONFIGURATION statement in the scope of a database.
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 4;
What are the symptoms of excessive query parallelism in Azure SQL Database?
In Azure SQL Database, one common symptom of excessive parallelism is exceeding the resource governance limits on the number of worker threads. When this happens, error 10928,
“Resource ID : 1. The request limit for the database is N and has been reached”
is raised, where N stands for the worker thread limit for the database or elastic pool (note, however, that there are other possible causes for this error).