Base de données sous une charge plus lourde - Toutes les requêtes SQL commencent à synchroniser après une période de heures / jours

dba.stackexchange https://dba.stackexchange.com/questions/58301

Question

Je fais une application Web qui a connu une forte croissance au cours de la semaine dernière et il semble que ma base de données se saisisse à cause de cela.

enter image description here

Vous pouvez voir que tout semblait être correct jusqu'à environ 3 heures du matin ce matin, puis toutes mes demandes ont commencé à synchroniser. Ce n'est pas la première fois que cela se produit, mais après avoir poussé de nouvelles modifications au serveur, cela recommence à nouveau. Cela ne semble pas se produire sous une faible charge, mais a également fonctionné à une charge élevée pendant des heures parfaitement bien. Je ne pense pas que 3h du matin soit un temps de chargement particulièrement élevé.

Des choses que j'ai faites / pour noter:

  • Server dédié, MSSQL et j'utilise Nhibernate comme ORM pour générer mes requêtes.

  • Le serveur est à peu près juste un magasin de données. 99% des requêtes sont des insert / sélections très basiques. J'ai un insert en vrac pour créer une grande quantité d'éléments de playlist.

  • J'ai activé le lot. Il est défini sur 50 par défaut et 200 si> 1000 éléments de playlist sont sur le point d'être écrits dans la base de données. Cela a réduit les pointes des temps de réponse de ma base de données.

  • J'ai mon délai d'expiration de commande à 5 secondes. Il a été défini par défaut, 30 secondes, et je ressentais toujours le problème. Le problème semble être resté à l'écart pendant plus longtemps après l'avoir mis à 5 secondes.

  • J'ai essayé de courir exec sp_updatestats Comme décrit ici: https://stackoverflow.com/questions/8602395/timeout-expired-timeout-period-elapsed-prior-to-completon-of-the-operation# Ce qui a montré que certains index sont mis à jour, mais n'ont entraîné aucune différence réelle.

  • J'ai défini le niveau d'isolement de la connexion de mes bases de données sur ReadUnCommitted: configuration.SetProperty("connection.isolation", "ReadUncommitted");

  • Je spécifie la base de données par défaut pour les performances nhibernate comme décrit ici: configuration.SetProperty("default_schema", "[db896d0fe754cd4f46b3d0a2c301552bd6].[dbo]");

Que diable devrais-je chercher à essayer d'obtenir une emprise sur ce qui provoque le verrouillage de ma base de données? Cela ne montre que 1% d'utilisation du processeur, donc je ne pense pas qu'il soit trop taxé. Ce ne devrait pas être une requête de longue date si j'ai 5 secondes de capuchons sur tout. Ce ne sont pas les index. Je manque d'idées.

En termes de requêtes - ce sont toutes des instructions utilisateur sélectionnées. C'est juste un tas de personnes qui essaient de se connecter et d'accéder à leur compte. J'obtiens environ 1000 demandes / 30 minutes pour un utilisateur sélectionné.

Voici quelques informations supplémentaires:

enter image description here enter image description here

@@VERSION:

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4270.0 (x64) 30 novembre 2012 17:11:43 Copyright (c) Microsoft Corporation Web Edition (64 bits) sur Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor )

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top