comment puis-je corriger SqlException Time-out s'est produite lors de l'attente de verrou de tampon de type 2 de la page (1:37660679), l'ID de base de 10
J'ai été l'exécution d'une application pendant quelques heures et puis tout à coup:
SqlException a été gérée par le code de l'utilisateur:
Time-out s'est produite lors de l'attente de verrou de tampon de type 2 pour la page d'
(1:37660679), ID de base de données 10.
De l'affichage des détails de l'exception montre que c'est un "Nombre" "845". ErrorCode et HRESULT -2146232060
Question: Comment puis-je résoudre ce problème ou déboguer ce problème?
- Je suis en cours d'exécution ASP.NET C# .NET 4.5 et SQL Server 2012.
- J'ai couru chkdsk, mais n'a trouvé aucune erreur.
Il n'y a rien à propos d'un 845 événement dans le journal. Voici une partie de ce que j'ai trouvé dans le journal d'application(Pour un événement-id 847):
Délai d'attente s'est produite lors de l'attente de verrou: la classe de FGCB_ADD_REMOVE', id
00000004F146FBD8, de type 2, Tâche 0x00000004F60450C8 : 0, waittime 300
secondes, drapeaux 0x1a, propriétaire de la tâche 0x00000004EDC38928. En continuant à
attendre.
Il y a beaucoup de 847 que voir à ce sujet la même. Ensuite, il y a beaucoup moins avec event-id 846:
Un time-out s'est produite lors de l'attente de verrou de tampon -- type 2, bp
00000004F96EE880, page 1:37660679, stat 0x10b, id de base de données: 10,
Id d'unité d'allocation: 72057594048544768, tâche 0x00000004D502E188 : 0,
waittime 300 secondes, drapeaux 0x1a, propriétaire de la tâche 0x00000004D5316558. Pas
continuer à attendre.
Ici est une vue xml d'une 847 événement:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="MSSQLSERVER" />
<EventID Qualifiers="16384">847</EventID>
<Level>4</Level>
<Task>2</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2013-02-24T19:21:54.000000000Z" />
<EventRecordID>281870</EventRecordID>
<Channel>Application</Channel>
<Computer>xyz-PC</Computer>
<Security UserID="S-1-and-so-on" />
</System>
- <EventData>
<Data>FGCB_ADD_REMOVE</Data>
<Data>00000004F146FBD8</Data>
<Data>2</Data>
<Data>00000004D5316188</Data>
<Data>0</Data>
<Data>1200</Data>
<Data>1a</Data>
<Data>00000004EDC38928</Data>
<Binary>4F0300000A00000006000000540053002D005000430000000800000053006300680061006200650072000000</Binary>
</EventData>
</Event>
L'erreur s'est produite sur une ligne
db.SubmitChanges();
Dans la fenêtre je peux voir:
db.GetChangeSet() {Inserts: 1, Deletes: 0, Updates: 0} System.Data.Linq.ChangeSet
Googler montre certains des correctifs de microsoft, mais ils ne sont que pour SQL server 2008.
OriginalL'auteur tomsv | 2013-02-24
Vous devez vous connecter pour publier un commentaire.
La
FGCB_ADD_REMOVE
loquet signifie probablement dans votre cas, le fichier a été étendue en raison de la croissance automatique. Cela provoque beaucoup d'attente et IO de la charge.Ou peut-être que ce n'est que le symptôme d'un général IO-surcharge serveur (que ce soit en raison de la charge ou en raison de défaillances de disques). Oui, c'est probablement seulement un symptôme parce que vous voyez les autres IO attend l'expiration, trop.
Déterminer si les disques des serveurs sont surchargés (par exemple à l'aide de l'analyseur de performances) et d'améliorer la situation.
OriginalL'auteur usr
Je suggère de contrôle /modification de la croissance automatique des paramètres pour la base de données concernés et, éventuellement, la base de données tempdb. Clic droit, propriétés, fichiers pour y arriver. Alors si vous avez les paramètres par défaut (croissance automatique par 1 mo de données, de 10% sur log) du changement de ces à quelque chose comme 10 mo et 10 mo. Vous voulez peut-être faire quelque chose de similaire avec la base de données tempdb. En général ces valeurs qui sont fonction de la taille et de l'utilisation de votre base de données. Au fil du temps, vous obtiendrez une meilleure idée de ce que moi.
Si vous connaissez la "droite" taille de votre base de données, puis de définir la taille que dans les propriétés du fichier de la page directement et préempter tout fichier d'extension des erreurs. Ce que je veux dire par là, c'est que si, par exemple, votre db est actuellement de 10 go et que vous prévoyez dans les prochaines semaines, que vous pourrez ajouter une autre 3 ou 4 GO de données, il suffit de régler la taille initiale de quelque chose comme 15GO. Ne pas oublier que les indices de prendre trop d'espace lors de l'estimation probable de la croissance de fichier.
Peu plus général de "bonnes" idées -
Assurez-vous que vous défragmentez régulièrement.
Réfléchir à plusieurs fichiers de données en fonction du nombre de Processeurs. Mettre les fichiers de données et les fichiers journaux sur un autre disque, si possible.
OriginalL'auteur Brian Towers