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 :

Storage - Data Space


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Par défaut Storage - Data Space
    Bonjour,
    j’effectue quelques tests d'optimisation sur ma bdd :
    j'ai inséré un jeu de test, que j'ai ensuite supprimé.
    Je constate dans les propriétés de ma table que la valeur dataSpace est identique à la taille que j'avais avant mon delete. Est ce normal ? Je précise que j'avais un unique champ en nvarchar..
    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    La requête envoyée par SSMS pour calculer la valeur "Espace de données" dans la page propriété d'une table, est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    exec sp_executesql N'
      declare @PageSize float 
       select @PageSize=v.low/1024.0 from master.dbo.spt_values v where v.number=@_msparam_0 and v.type=@_msparam_1
    SELECT
    ISNULL((select @PageSize * SUM(CASE WHEN a.type <> 1 THEN a.used_pages WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END) 
    FROM sys.indexes as i
    JOIN sys.partitions as p ON p.object_id = i.object_id and p.index_id = i.index_id
    JOIN sys.allocation_units as a ON a.container_id = p.partition_id
    where i.object_id = tbl.object_id),0.0) AS [DataSpaceUsed]
    FROM sys.tables AS tbl
    WHERE (tbl.name=@_msparam_2 and SCHEMA_NAME(tbl.schema_id)=@_msparam_3)',
      N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000),@_msparam_2 nvarchar(4000),@_msparam_3 nvarchar(4000)',
        @_msparam_0=N'1', @_msparam_1=N'E', @_msparam_2=N'Product',@_msparam_3=N'Production'
    Dans cet exemple 'Production' représente le nom du schéma et le 'Product' le nom de la table.

    Il est par ailleurs, mentionné dans la documentation MSDN ceci :

    "Lorsque vous supprimez ou reconstruisez des index volumineux ou lorsque vous supprimez ou tronquez des tables volumineuses, le Moteur de base de données diffère les désallocations des pages actives et de leurs blocs associés jusqu'à ce que la transaction soit validée. Les opérations de suppression différées ne libèrent pas immédiatement l'espace alloué. Par conséquent, il se peut que les valeurs renvoyées par sys.allocation_units immédiatement après la suppression ne reflètent pas l'espace disque réellement disponible.
    Cette implémentation prend en charge les transactions à validation automatique et explicites dans un environnement multi-utilisateur et s'applique aux tables et index volumineux qui utilisent plus de 128 extensions
    ".

    A+

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Bonjour,
    j’effectue quelques tests d'optimisation sur ma bdd :
    j'ai inséré un jeu de test, que j'ai ensuite supprimé.
    Je constate dans les propriétés de ma table que la valeur dataSpace est identique à la taille que j'avais avant mon delete. Est ce normal ? Je précise que j'avais un unique champ en nvarchar..
    Merci

    Votre table a t'elle un index cluster sur la PK?

    Si oui reconstruisez le après votre DELETE vous verrez que le space_used reviens à sa valeur initiale.

  4. #4
    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
    Bonjour,

    La reconstruction de l'index ne changera pas grand chose ici par qu'il n'existera plus de données (suite au DELETE).

    EDIT : Mal lu la réponse précédente .. la reconstruction d'index ici peut résoudre le problème ..

    Vous pouvez utiliser la procédure stockée sp_spaceused 'table' et vous verrez qu'il n'existe plus d'espace alloué pour la table.

    Il faut également employer la commande DBCC UPDATEUSAGE('database', 'table') pour corriger le nombre de pages et de lignes de votre table concernée dans les vues systèmes. Vous verrez par la suite via l'interface graphique que DATASPACE = 0

    ++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Par défaut
    Merci à tous pour vos réponses.

    @MikeDaven ==>

    je viens de tester les commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec sp_spaceused 'TempA',false ;
    DBCC UPDATEUSAGE('Temp', 'TempA');
    et j'ai tjrs la valeur data > 0

  6. #6
    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
    vous devez faire le DBCC UPDATEUSAGE en premier.

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

Discussions similaires

  1. Local storage data image
    Par var83 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 25/05/2015, 13h51
  2. Réponses: 3
    Dernier message: 21/08/2008, 18h05
  3. Tables et Data spaces
    Par phimo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/08/2007, 17h21
  4. table space et DEFAULT STORAGE/EXTENT MANAGEMENT
    Par e77em dans le forum Oracle
    Réponses: 8
    Dernier message: 25/10/2005, 15h47

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