2010-06-26 16 views
1

J'utilise SQL Server 2008 sur Windows Server 2008. Je trouve que la base de données temporaire mdf et temp ldf est très grande (environ 13G) et presque identique à tous les autres fichiers de base de données d'application réelle (mdf + ldf).Problème de base de données temporaire SQL Server

Mes questions,

  1. Quelle température DB est utilisé?
  2. Est-il normal que la base de données temporaire soit si grande? Si non, des moyens de nettoyer temp DB sans impact sur les performances et la fiabilité du système?

merci à l'avance, George

+2

avez-vous essayé de chercher? –

+0

Je n'ai pas trouvé de réponse pour l'article 2 après Google. As tu des idées? – George2

Répondre

2

Vous pouvez réduire les fichiers tempdb mdf/ldf à l'aide des commandes DBCC shrinkfatabase et shrinkdatabase.

use tempdb 
go 

dbcc shrinkfile (tempdev, 'target size in MB') 
go 

dbcc shrinkfile (templog, 'target size in MB') 
go 

L'écriture d'un code de manière efficace peut éviter la croissance du tempdb. Évitez d'utiliser des "curseurs" dans votre code qui sont des facteurs de performance majeurs et plus l'ensemble de données du curseur est grand, plus la taille du tempdb est grande. Évitez d'utiliser des tables temporaires lorsque ce n'est pas nécessaire. l'utilisation de #temptable, ## temptable pour l'ensemble de la portée lorsque celle-ci n'est pas requise entraînera à nouveau des problèmes de performance. SQL 2005/2008 possède des CTE dans lesquels vous pouvez interroger des données sur une table temporaire et la portée est juste une ligne après cela.

;With CTETable as 
(
    SELECT <Columnlist> FROM <TableName> {Joins} WHERE <Condition> GROUP BY <Column List> ORDER BY <COlumn> ASC 
) 

SELECT ColumnList from CTETABLE 
.... 
Statements 

La portée de cette table CTE expire après la ligne "SELECT ColumnList from CTETABLE". De cette façon, il est plus efficace. Rédaction de requêtes efficaces serait également utile.

+0

Salut Baaju, 1. Je veux savoir si le redémarrage du service SQL Server à partir du panneau de contrôle réduira automatiquement la db temporaire? 2. Dans votre déclaration, dbcc shrinkfile (tempdev, 'taille cible en Mo'), que fait Tempdev? – George2

+0

Une autre question est de savoir si la base de données temporaire shrink impact sur les performances? – George2

+1

RTFM - il est bien documenté dans la documentation. Le tempdb est créé à chaque démarrage du serveur. Shwrinking tempdb n'aura pas d'impact sur les performances - un trop petit risque d'entraîner des erreurs s'il n'est pas autorisé à se développer. Remarque: pour de meilleures performances, réglez le nombre de fichiers pour tempdb. – TomTom

1

1: TempDB est utilisé pour des choses comme genre. Anythin temporaire. Les développeurs stupides qui utilisent inutilement l'instruction DISTINCT l'atteignent. Plus les tables temporaires. 2: Non. Dans de rares cas, cela peut être le cas, mais il s'agit de cas marginaux inhabituels. Tempdb cleanup .... redémarre le serveur. Tempdb est totalement régénéré à chaque démarrage. Ensuite, commencez à chercher des requêtes allant à tempdb. Cela nécessitera un travail manuel. Vérifiez les clauses DISTINCT utilisées inutilement.

+0

Salut TomTom! Voulez-vous dire redémarrer le service SQL Server à partir du panneau de contrôle va réduire la base de données temporaire? Si oui, avez-vous un document pour prouver ce point? Je n'ai pas trouvé de Google. – George2

+0

Une autre question est de savoir si la base de données temporaire shrink impact sur les performances? – George2