Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 09h20   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
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.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h15   #2
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
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 :
1
2
3
4
5
SELECT name, size/128,max_size FROM tempdb.sys.database_files 
GO
--
dbcc sqlperf(logspace)
GO
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h20   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
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.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h36   #4
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
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 :
SELECT size/128 FROM master.sys.sysaltfiles WHERE fileid=1 AND dbid=2
merci,
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h43   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
résultat de la requête :

(No column name)
58530

Cordialement.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 12h08   #6
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
Ah donc quand tu affiches les propriétés de la base tempdb, -> Fichiers (ou Files) la taille initiale de tempdev est de 58Gb ?
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 12h46   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
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.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 13h48   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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 ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 14h11   #9
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
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 :
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).
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 14h19   #10
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Il me semble qui suffit d'exécuter :

Citation:
Envoyé par dbaffaleuf
Code :
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)

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 16h59   #11
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 18h25   #12
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
non ce n'est pas le pb mais SQL Server refusera de mettre une taille inférieure à la taille initiale:

Code :
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)
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 18h30   #13
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
J'ai édité la réponse #9 pour plus de clarté, la connexion sous DOS se fait avec SQLCMD
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 22h18   #14
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonsoir,

Citation:
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 :
DBCC CHECKDB('<maBase>') WITH ESTIMATEONLY
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 17h13   #15
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
Bonjour,

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

1

Cordialement.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 17h24   #16
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 17h48   #17
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
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.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 14h58   #18
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
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.
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 15h09   #19
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Citation:
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h16   #20
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 12
Points : 12
Bonjour,

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

Code :
1
2
3
ALTER DATABASE TEMPDB MODIFY FILE
(NAME='tempdev', SIZE=20GB)
GO
alors que la base est en production ?

Cordialement.
mb10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h10.


 
 
 
 
Partenaires

Hébergement Web