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 :

Taille d'un fichier dans SQL server


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut Taille d'un fichier dans SQL server
    Bonjour,

    Je ne comprend pas bien comment évolue la taille d'un fichier de données dans SQL server.
    J'essaye actuellement de déplacer des redondances des données dans des tables annexes et je suis surpris de constater que lors de la suppression d'une colonne (les données ayant été déplacée dans un autre table), la taille du fichier ne diminue pas.

    J'ai poussé un peu plus mes recherches et si j'effectue une requête d'update sur mon fichier (900 000 lignes) afin de passer les chaines vides à NULL, mon fichier prends 300 MO, ensuite si j'effectue la requête inverse de '' à NULL mon fichier prends à nouveau 300 MO.

    Quelqu'un aurait-il une explication ?

    D'avance merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 34
    Par défaut
    Bonjour lebracfr,

    Parlez vous du fichier .mdf ou .ldf ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 001
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par lebracfr Voir le message
    Bonjour,

    Je ne comprend pas bien comment évolue la taille d'un fichier de données dans SQL server.
    J'essaye actuellement de déplacer des redondances des données dans des tables annexes et je suis surpris de constater que lors de la suppression d'une colonne (les données ayant été déplacée dans un autre table), la taille du fichier ne diminue pas.
    C'est tout à fait normal. Le coût d'un agrandissement de fichier, comme celui d'un rétrécissement s'avère très cher en ressource et très consommateur en temps. Donc, pour des raisons d'optimisation, SQL Server ne rétrécit jamais la taille d'un fichier, sauf à être masochiste et à placer sa base en mode AUTOSHRINK ce qui est absolument a évité sauf si vous êtes sur de l'embarqué (cas du smartphone par exemple).


    J'ai poussé un peu plus mes recherches et si j'effectue une requête d'update sur mon fichier (900 000 lignes) afin de passer les chaines vides à NULL, mon fichier prends 300 MO, ensuite si j'effectue la requête inverse de '' à NULL mon fichier prends à nouveau 300 MO.

    Quelqu'un aurait-il une explication ?

    D'avance merci.
    C'est à nouveau normal. En faisant un UPDATE vous modifier potentiellement l'ordre des données dans un index et la place occupée par les données dans les "slot" de ligne et dans les pages.

    En sus, le fichier du journal de transaction, copie toutes les données avant modification afin de garantir la bonne fin des opérations. Si le serveur tombait en panne au moment d'exécuter la mise à jour, le fait d'avoir journalisé les données dans le journal de transaction, permet au système de retrouver automatiquement un point d'intégrité avec :
    • soit toutes les valeurs modifiées
    • soit aucune valeur modifié

    C'est le principe d'atomicité des transactions, c'est à dire un fonctionnement en "tout ou rien".

    Enfin, comme vous n'indiquez pas quel fichier vous constatez grossir, il est difficile de vous aider plus…


    PS : lisez les cours que j'ai écrit à ce sujet : https://sqlpro.developpez.com/


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

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Bonjour,

    Merci pour ces premiers éléments de réponse.
    En fait, je consulte la "taille du fichier" dans le SQL Management studio, propriété de la table, onglet "stockage" et c'est la ligne "espace de données" qui enfle à chaque modification.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lebracfr Voir le message
    En fait, je consulte la "taille du fichier" dans le SQL Management studio, propriété de la table, onglet "stockage" et c'est la ligne "espace de données" qui enfle à chaque modification.
    Vous confondez un fichier de données avec la taille de votre table. Un fichier de données contient plusieurs objets comme des tables, indexes...

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    En effet, je me suis mal exprimé.

    Merci SQLPro, j'avais déja lu vos cours (très intéressants et très agréables à lire) et ma question initiale vient de vos conseils en optimisation concernant le modèle de données. Je travaille actuellement sur un modèle fortement redondant et j'aimerai appliquer vos recommandations en vue d'arriver aux formes normales.
    En l'espèce, je travail sur une table de personnes qui contient diférentes colonnes (tel, fax, mobile) et surtout une colonne mail (char 250 !) qui n'est que très rarement valorisée et que je souhaite donc déportée dans une table annexe. J'étais alors surpris de constater que ma table ne gagnait pas en taille.

    Du coup, puisque SQLserver ne rétrécie jamais un table pour des raisons de performance, j'imagine que la taille non rendue au système et alors disponible pour les futures insertions ?

    En vue de remodéliser, serait-il plus opportun dans ces condition de créer une nouvelle table vierge et d’insérer les données plutôt que de modifier la structure de la table actuelle ? Cette solution pose également la question des PK qui changeront de valeur m'obligeant à corriger toutes mes liaisons.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lebracfr Voir le message
    char 250 !
    Lol ! Essaie NCHAR(4000) à la place, ça prendra encore plus de place pour rien
    Sérieusement remplace ça tout de suite par VARCHAR(250)

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 001
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par lebracfr Voir le message
    ... surtout une colonne mail (char 250 !)…
    Oui effectivement mieux vaudrait du VARCHAR(256)...


    Citation Envoyé par lebracfr Voir le message
    Du coup, puisque SQLserver ne rétrécie jamais un table pour des raisons de performance, j'imagine que la taille non rendue au système et alors disponible pour les futures insertions ?
    Tout à fait !

    Citation Envoyé par lebracfr Voir le message
    En vue de remodéliser, serait-il plus opportun dans ces condition de créer une nouvelle table vierge et d’insérer les données plutôt que de modifier la structure de la table actuelle ? Cette solution pose également la question des PK qui changeront de valeur m'obligeant à corriger toutes mes liaisons.
    Dans tous les cas vous aurez besoin de PK/FK....

    Enfin, en défragmentant vos tables et index, vous pourrez restituer de la place…. C'est un travail ordinaire d'un plan de maintenance (DBA).

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

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

Discussions similaires

  1. Import fichiers dans sql server 2000
    Par Mygush dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/04/2012, 15h14
  2. taille du typre image dans sql server
    Par tortuegenie dans le forum Développement
    Réponses: 1
    Dernier message: 25/06/2008, 15h58
  3. Déposer un fichier dans SQL Server et non son "contenu"
    Par Boicensoif dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/12/2007, 22h43
  4. Sauvegarde d'un fichier dans sql server avec enteprise library
    Par lemmings dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/12/2007, 21h20
  5. utiliser un fichier access dans sql server
    Par gock dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/12/2005, 08h23

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