Nous avons une base de données OLTP active de 40 Go sur SQL Server 2014 SP1. Les requêtes s'avèrent lentes avec des attentes IO_Completion, la longueur de la file d'attente de disque passant à 900 et SQL Server cesse de répondre. Ce que nous avons essayé:
Redémarrez l'instance et, en une minute, elle commencera à se comporter de la même manière.
Après le deuxième redémarrage, nous avons changé la taille initiale de chaque fichier de données tempdb (il y a 16 fichiers de données créés) et il commence à fonctionner correctement.
Remarque: Nous utilisons des variables de table pour les jeux de résultats intermédiaires. Ces ensembles de résultats sont très petits.
C'est arrivé deux fois en un mois. Chaque fois que j'ajoute un peu d'espace manuellement aux fichiers de données, cela commence à fonctionner normalement. La chose la plus intéressante est que la même configuration (même matériel, même configuration de dossier et de fichiers, même charge de travail) que nous avons sur SQL Server 2008 R2 et SQL Server 2012 fonctionne correctement.
Veuillez nous aider à trouver une solution permanente.
La taille initiale de tous les fichiers de données est la même de 1 000 Mo, le courant est de 1 500 Mo chacun. Tous sont identiques. La croissance automatique est de 100 Mo pour chacun. Avant cela, nous étions confrontés à des conflits de pages PFS et GAM et nous sommes passés à 16 et le problème a été résolu. Les deux indicateurs de trace 1117 et 1118 sont activés. 24 cœurs sur 2 nœuds NUMA. Tous les fichiers de données sont sur le même volume. Disque simple, pas de SAN.
L'instance se trouve sur une machine physique. Les requêtes avec des variables de table et les requêtes avec des jointures de hachage génèrent le plus souvent des attentes IO_Completion.
La réponse détaillée de wBob nous a poussés à chercher plus en détail. Comment l'avons-nous manqué avant:
La croissance automatique du fichier 'templog' dans la base de données 'tempdb' a été annulée par l'utilisateur ou expirée après 7704 millisecondes. Utilisez ALTER DATABASE pour définir une valeur FILEGROWTH plus petite pour ce fichier ou pour définir explicitement une nouvelle taille de fichier.
Nous l'avons trouvé dans le journal chaque fois que ce type de problème se produit. Nous déplaçons TempDB pour séparer le lecteur rapide.