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 :

Augmenter l'espace réservé à une table


Sujet :

Administration SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut Augmenter l'espace réservé à une table
    Bonjour,

    je ne sais pas si cette question a déjà été posée, mais je n'ai trouvé que des réponses expliquant comment augmenter la taille de la base de données.
    Or, ce que je voudrais, c'est augmenter la taille d'une table.

    Je m'explique : lorsque je génère sur ma base le rapport "Utilisation du disque par table", je vois une colonne "Réservé (Ko)", suivi des colonnes indiquant l'espace utilisé par les données, par l'index, et l'espace libre.
    Est-il possible d'augmenter la taille réservée à une table?

    Je suis SQLServer 2012, Microsoft SQL Server Management Studio 11.0.2100.60.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Non, étant donné qu'une table n'est pas un fichier.
    En fait toutes les tables et index sont mis dans le fichier de la base (ou les fichiers s'il y en a plusieurs), SQL Server répartissant de manière automatique et équitable entre les différentes fichiers. Ensuite il se sert des espaces vide dans le fichier pour stocker les segments de table et s'il y a lieu il agrandit le fichier (ce qui est généralement préjudiciables aux performances).
    C'est pourquoi tout ce que vous avez lu concerne l'augmentation de la taille de la base, car l'augmentation de la taille d'une table n'a aucun sens dans SQL Server !

    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/ * * * * *

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Merci pour ces informations.
    Donc ayant encore de l'espace disponible dans la base, le fichier pourra "grossir" au besoin ? Ou je dois tout de même augmenter l'espace alloué à la base de données?

  4. #4
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Le fichier grossit suivant la spécification de l'incrément de fichier et la limitation de sa taille.

    Pour voir la valeur de ces paramètres, dans SQL Server Management Studio (SSMS) :
    • Pressez F8 pour afficher l'explorateur d'objets s'il n'est pas déjà affiché
    • Connectez-vous à l'instance hébergeant la base de données, puis dans l'explorateur d'objets, ouvrez le nœud de l'instance
    • Faites un clic-droit sur la base de données > Properties
    • Dans la fenêtre qui s'affiche, choisissez dans le menu de gauche la page Files
    • La colonne Initial Size vous donne la taille actuelle du fichier. La colonne Autogrowth vous indique la taille de l'incrément qui sera alloué lorsque le fichier sera plein. Maxsize vous indiquera si la taille maximale du fichier n'est limitée que par la taille du disque (Unlimited) ou à l'inverse une taille maximale en Mo. Si vous voulez changer ces paramètres, il suffit de cliquer sur le bouton ellipse pour ce faire, et de valider le tout par OK une fois terminé.


    En ce qui concerne les fichiers de données, l'idéal est de les tailler à la création de la base, de façon à ce qu'ils ne soient jamais fragmentés.
    S'il venaient à grossir, il faut veiller à octroyer au compte de service qui exécute SQL Server le droit Perform Volume Maintenance Task : celui ci permet d'allouer l'incrément quasiment immédiatement. A l'inverse, les transactions doivent attendre que l'incrément soit entièrement mis à zéro pour pouvoir continuer leur exécution, ce qui peut être catastrophique. Si ce droit n'est pas déjà octroyé, il faudra redémarrer le service SQL Server. Il est possible d'octroyer ce droit facilement à l'installation de SQL Server 2016 : il y a une coche réservée à cet effet dans la page de spécification de l'emplacement par défaut des fichiers.

    Ce droit ne vaut que pour le fichier de données. En ce qui concerne le fichier du journal des transactions, il faut veiller là aussi à bien le tailler dès la création de la base de données. Suivant son utilisation, cela varie, en général, entre 10 et 30% de la taille allouée aux fichiers de données. Par expérience et habitude, lors de la création de la base, je lui spécifie toujours un fichier d'un Go, puis je le fais grossir jusqu'à la taille voulue par incréments d'un Go. En effet, le fichier du journal des transactions est découpé en morceaux qu'on appelle journaux virtuels (Virtual Log Files, VLFs). Le moteur marque pour réutilisation l'espace du journal des transactions d'un VLF une fois que toutes les transactions qu'il reflète sont terminées ... et il est possible qu'une transaction occupe plusieurs VLFs.

    Suivant la taille de l'incrément, un nombre particulier de VLF est décidé par le moteur (et il n'y a aucun moyen de changer ce comportement)

    • Jusqu'à SQL Server 2012 inclus, c'était : jusqu'à 64Mo, 4 VLF - entre 64Mo et 1Go, 8 VLFs - Plus d'1Go : 16 VLFs
    • A partir de SQL Server 2014, c'est : Si la taille de l'incrément est plus petite que 1/8 de la taille actuelle du fichier du journal des transactions : 1 VLF dont la taille est celle de l'incrément. Sinon, on revient à la règle qui valait jusqu'à SQL Server 2012.


    Donc si l'on crée une base de données en spécifiant un fichier du journal des transactions de 64Go, on aura 16 VLFs de 4Go, ce qui est assez énorme. A l'inverse, si on a trop de VLFs, cela ralentit légèrement les sauvegardes de base de données, mais aussi les restaurations et les récupérations. Avez des incréments d'un Go, on a des VLFs de 128Mo, ce qui est assez raisonnable, et que je trouve être la bonne balance. Pour connaître le nombre de VLF, il suffit d'exécuter l'instruction DBCC LOGINFO : elle retourne une ligne par VLF, avec les caractéristiques de chacun, notamment leur taille.

    Tout ça pour dire que ça a l'air simple comme ça, mais il faut bien faire attention quand on crée une base de données

    @++

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Merci énormément pour cette réponse plus que détaillée qui m'a vraiment été utile.

    Je n'ai pas créé cette base, je reprends le projet de mon prédécesseur, donc je n'ai pas pu allouer la taille à la création.

    Bonne fin de journée à tous, je passe la discussion en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Table : suppression auto des espaces dans une table
    Par bdf94 dans le forum Modélisation
    Réponses: 0
    Dernier message: 17/04/2015, 15h50
  2. Réponses: 7
    Dernier message: 25/08/2011, 12h03
  3. Réponses: 2
    Dernier message: 07/11/2006, 18h09
  4. augmenter la taille pour une table mysql
    Par zidenne dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/08/2006, 16h01
  5. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 16h50

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