2015-02-27 2 views
0

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.

I/O performance chart

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?

+0

Comment les plans d'exécution diffèrent-ils avec et sans votre extension OR? –

Répondre

1

Commencez par analyser vos plans d'exécution et exécutez vos requêtes avec des statistiques (utilisez le profileur). Le problème n'est pas dans de tempdb, mais dans vos requêtes. Ensuite, vous verrez où vous sélectionnez de nombreuses lignes qui sont temporairement enregistrées dans de tempdb. Ensuite, vous pouvez modifier les requêtes ou ajouter l'index qui vous manque.