Nous disposons d'un serveur SQL Server 2008 R2 mature, utilisé par de nombreuses applications web C#, chacune d'entre elles disposant d'un pool de connexions.
La nuit dernière, toutes les applications web ont perdu la possibilité de se connecter à la base de données pendant 6 minutes, avant que le problème ne se résolve de lui-même. Il s'agissait de plusieurs types de connexions.
J'ai jeté un coup d'œil au journal des événements sur le serveur, et j'ai trouvé beaucoup de messages du genre :
The client was unable to reuse a session with SPID [Various], which had been reset for connection pooling. The failure ID is 29. This error may have been caused by an earlier operation failing. Check the error logs for failed operations immediately before this error message.
Je n'ai pas trouvé d'opération ayant échoué juste avant le message d'erreur. L'ID d'échec de 29 fait apparemment référence à RedoLoginException
.
Le journal des événements en contient également beaucoup :
Login failed for user '[Various]'. Reason: Failed to open the database configured in the login object while revalidating the login on the connection.
Il y a aussi des temps morts :
A timeout (30000 milliseconds) was reached while waiting for a transaction response from the MSSQLSERVER service.
Timeout occurred while waiting for latch: class 'DBCC_MULTIOBJECT_SCANNER' id ..., type 4, Task ...: 44, waittime 300, flags 0x1a, owning task .... Continuing to wait.
Timeout occurred while waiting for latch: class 'ACCESS_METHODS_DATASET_PARENT', ...
et :
IO Completion Listener (0x900) Worker ... appears to be non-yielding on Node 1. Approx CPU Used: kernel 0ms, user 0ms, Interval; 15334
Du point de vue des serveurs web clients, ils ont reçu un certain nombre d'erreurs de connexion :
Logon failure: the user has not been granted the requested logon type at this computer
Logon Failure: The target account name is incorrect
Logon failure: unknown user name or bad password
Je me suis interrogé sur la mise en commun des fils, et j'ai constaté que max worker threads
est fixé à 0.
Des idées ?
UPDATE : Cela s'est produit à trois reprises.