IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

réduire la TempDB


Sujet :

Administration SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut réduire la TempDB
    Bonjour,

    Suite à une opération exceptionnelle, la tempDB d'une base à augmenter.
    Je voulais savoir s'il était possible de réduire la taille de la TempDB sans risque en faisant un shrink comme sur une base de production.

    Cordialement.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Est-ce le (les) fichier(s) de données de tempdb qui ont augmenté, ou est-ce le journal ?

    - S'il s'agit du journal, un dbcc shrinkfile devrait suffire.
    - S'il s'agit des fichiers de données c'est plus compliqué, parce qu'il y a toujours plus ou moins d'activité dans la base, et des extents alloués en fin de fichier qui empêchent sa réduction sur disque. (http://support.microsoft.com/kb/307487). Le plus simple est de faire un stop/start du service pendant les heures de non utilisation de l'instance.

    Autre question: que renvoient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select name, size/128,max_size from tempdb.sys.database_files 
    GO
    --
    dbcc sqlperf(logspace)
    GO

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut
    C'est le fichier de données de la TempDB qui a augmenté.

    Résultat requêtes :

    name | (No column name) | max_size
    tempdata | 58530 | -1
    templog | 459 | -1


    Database Name | Log Size (MB) | Log Space Used (%) | Status
    tempdb | 459,1172 | 67,67967 | 0

    Cordialement.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    OK. Tenter un shrinkfile avec de l'activité me paraît compliqué et risqué : le shrink en déplaçant des pages verrouille des plages d'offsets dans le fichier MDF, ralentit toute l'activité IO type checkpoint, lazy writer, etc... Quant à un dbcc shrinkfile truncateonly, il y a toujours un extent en fin de fichier qui bloque la réduction. Il faut trouver une plage de non utilisation pour redémarrer.

    Autre chose, la taille initiale de tempdb:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select size/128 from master.sys.sysaltfiles where fileid=1 and dbid=2
    merci,

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut
    résultat de la requête :

    (No column name)
    58530

    Cordialement.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Ah donc quand tu affiches les propriétés de la base tempdb, -> Fichiers (ou Files) la taille initiale de tempdev est de 58Gb ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut
    Oui, c'est pour ça que je veux la réduire.
    Je voudrais la réduire car il n'y a aucune raison pour qu'elle reste à cette taille.

    Cordialement.

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Si vous savez quelles opérations on conduit le fichier de données de TempDB à grossir, et que cette opération n'est plus exécutée, faites donc.

    Si ce n'est pas le cas, alors il est probable que tôt ou tard, cet espace sera repris par SQL Server, avec tout ce que cela implique : ralentissement global comme vous l'a explique dbaffaleuf, fragmentation du fichier, ...

    Que vous retourne la première requête de ce billet, exécutée dans le contexte de la base de données TempDB ?

    @++

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Citation Envoyé par mb10 Voir le message
    Oui, c'est pour ça que je veux la réduire.
    Je voudrais la réduire car il n'y a aucune raison pour qu'elle reste à cette taille.

    Cordialement.
    Dans ce cas c'est différent, il faut le faire en single user avec les paramètres minimums:

    1) Stopper le service MSSQL dans sqlservermanager.msc
    2) Ouvrir une fenêtre DOS, se placer sous le répertoire des binaires de MSSQL.
    3) sqlservr -c -f -m
    4) Laisser la fenêtre ouverte, ne pas la réduire sur la barre des tâches (ça ferait swapper le processus)
    5) dans une autre fenêtre DOS, se connecter sous SQLCMD avec un compte sysadmin et faire un ALTER DATABASE tempdb MODIFY FILE, par exemple une réduction à 20GB:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DOS>sqlcmd -E
    1> alter database tempdb modify file(name='tempdev',size=20GB)
    2> go
    1> exit
    6) se déconnecter de la session
    7) faire un Ctrl-C dans la fenêtre DOS d'exécution de sqlservr
    8) redémarrer le service via sqlservermanager.msc

    Vérifier avant que l'initialisation instantanée est active pour ton instance ie que le compte de service possède le privilège SeManageVolumePrivilege (effectuer des tâches de maintenance de volume).

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Il me semble qui suffit d'exécuter :

    Citation Envoyé par dbaffaleuf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER DATABASE TEMPDB MODIFY FILE
    (NAME='tempdev', SIZE=20GB)
    GO
    Puis de redémarrer le service. Non ? (j'ai bien vu que ce n'est pas la démarche proposée par la page que vous avez référencée)

    @++

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Oui, mais là tu la fixes à 20 Go de manière définitive !!!!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    non ce n'est pas le pb mais SQL Server refusera de mettre une taille inférieure à la taille initiale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select size/128 from tempdb.sys.database_files where file_id <> 2 
    ------
    20
     
    ALTER DATABASE TEMPDB MODIFY FILE
    (NAME='tempdev', SIZE=10MB)
     
    Msg*5039, Niveau*16, État*1, Ligne*1
    Échec de MODIFY FILE. La taille spécifiée est inférieure à la taille en cours.
    sqlservr -c -f permet de démarrer avec une tempdb minimale (taille de model)

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    J'ai édité la réponse #9 pour plus de clarté, la connexion sous DOS se fait avec SQLCMD

  14. #14
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonsoir,

    Suite à une opération exceptionnelle, la tempDB d'une base à augmenter.
    Que fais cette opération exceptionnelle ?

    Que donne à tout hasard la commande suivante sur vos bases ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC CHECKDB('<maBase>') WITH ESTIMATEONLY
    ++

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut
    Bonjour,

    Voici le résultat de la requête DBCC CHECKDB('tempdb') WITH ESTIMATEONLY :

    1

    Cordialement.

  16. #16
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    En fait il faut surtout récupérer la valeur max que vous pouvez trouver pour l'ensemble de vos bases. Par exemple :

    Database A - 5
    Database B - 890
    Database C - 1020
    Database D - 2

    Valeur Max : 1020

    ++

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut
    Rebonjour,

    Valeur max récupérée pour la requête DBCC CHECKDB('<maBase>') WITH ESTIMATEONLY:

    Estimated TEMPDB space needed for CHECKALLOC (KB)
    151579

    Estimated TEMPDB space needed for CHECKTABLES (KB)
    17492

    Cordialement.

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Donc si <mabase> est la plus grosse base sur ton instance, il faudra 150Mb au maximum dans tempdb pour faire passer un DBCC CHECKDB. De ce point de vue, 20GB est donc largement suffisant.

  19. #19
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Donc si <mabase> est la plus grosse base sur ton instance, il faudra 150Mb au maximum dans tempdb pour faire passer un DBCC CHECKDB. De ce point de vue, 20GB est donc largement suffisant.
    CQFD

    ++

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Par défaut
    Bonjour,

    Est ce qu'exécuter la requête suivante suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER DATABASE TEMPDB MODIFY FILE
    (NAME='tempdev', SIZE=20GB)
    GO
    alors que la base est en production ?

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [2005] Réduire la base tempdb
    Par big1 dans le forum Administration
    Réponses: 1
    Dernier message: 07/11/2014, 20h10
  2. [SSIS 2005]Réduire le tempdb
    Par ravaid dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 29/07/2008, 22h00
  3. [GCC] Réduire la taille d'un programme statique
    Par Geronimo dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 05/03/2004, 16h34
  4. Réponses: 2
    Dernier message: 17/09/2003, 09h36
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo