|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
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. |
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
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 :
__________________
David B. |
||
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
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
__________________
David B. |
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
résultat de la requête :
(No column name) 58530 Cordialement. |
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
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. |
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
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. |
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
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 |
|
00
|
|
|
#9 | |||
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
Citation:
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 :
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. |
|||
|
00
|
|
|
#10 | |||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Il me semble qui suffit d'exécuter :
Citation:
@++
__________________
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 |
|||
|
00
|
|
|
#11 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
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 * * * * * |
|
00
|
|
|
#12 | ||
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
non ce n'est pas le pb mais SQL Server refusera de mettre une taille inférieure à la taille initiale:
Code :
__________________
David B. |
||
|
00
|
|
|
#13 |
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
J'ai édité la réponse #9 pour plus de clarté, la connexion sous DOS se fait avec SQLCMD
__________________
David B. |
|
00
|
|
|
#14 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Bonsoir,
Citation:
Que donne à tout hasard la commande suivante sur vos bases ? Code :
DBCC CHECKDB('<maBase>') WITH ESTIMATEONLY |
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
Bonjour,
Voici le résultat de la requête DBCC CHECKDB('tempdb') WITH ESTIMATEONLY : 1 Cordialement. |
|
|
00
|
|
|
#16 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
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 ++ |
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
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. |
|
|
00
|
|
|
#18 |
|
Membre chevronné
![]() David BAFFALEUFInscription : février 2008 Messages : 612 ![]() |
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. |
|
00
|
|
|
#19 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Citation:
++ |
|
|
00
|
|
|
#20 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 56 ![]() |
Bonjour,
Est ce qu'exécuter la requête suivante suffit : Code :
Cordialement. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com