Nous utilisons une édition Web SQL Server 2008 sur un serveur Windows 2012 R2 (32 Go de RAM) pour stocker des données pour une application Web basée sur ASP.NET. Il existe plusieurs bases de données avec des tables de nouvelles et des vues différentes que nous interrogeons régulièrement (SqlDataReader
, Linq-to-SQL) avec des jointures et des conditions de filtre différentes. Les requêtes elles-mêmes sont plus longues et spécifiques à un domaine, donc je passe un exemple.SQL Server: Nombre élevé d'écritures TempDB
Jusqu'à présent, tout a bien fonctionné.
Maintenant, nous avons dû modifier une telle requête et l'étendre avec une condition simple OR
. Le résultat était que le nombre de lectures et d'écritures dans le TempDB
a augmenté considérablement. Signifie dramatiquement 1000 écritures de plus de 100 Mo par minute, ce qui donne une taille de fichier tempdb totale de 1,5 Go actuellement.
Si nous supprimons l'instruction de filtre OR
de la requête d'origine, les E/S du fichier TempDB
se normalisent instantanément.
Cependant, nous n'avons pas la moindre idée ce qui se passe dans le TempDB
. Nous avons exécuté plusieurs fois l'Analyseur de requêtes et comparé les résultats, mais ses recommandations d'optimisation d'index ne concernaient que les autres statistiques de bases de données et n'avaient aucun effet.
Comment affineriez-vous ce problème? Est-ce que quelqu'un d'autre a connu un tel comportement dans le passé? Cela risque-t-il d'être un problème avec la requête de nouvelles elle-même ou est-il possible que nous devions simplement modifier certaines propriétés de la base de données TempDB
pour améliorer ses performances d'E/S, par ex. Croissance automatique?
Comment les plans d'exécution diffèrent-ils avec et sans votre extension OR? –