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 06/04/2011, 18h27   #1
Futur Membre du Club
 
Inscription : août 2004
Messages : 49
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 49
Points : 18
Points : 18
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
superbobo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 00h02   #2
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
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 : 177
Points : 413
Points : 413
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 :
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+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 07h53   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h42   #4
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
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 14h13   #5
Futur Membre du Club
 
Inscription : août 2004
Messages : 49
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 49
Points : 18
Points : 18
Merci à tous pour vos réponses.

@MikeDaven ==>

je viens de tester les commandes
Code :
1
2
exec sp_spaceused 'TempA',false ;
DBCC UPDATEUSAGE('Temp', 'TempA');
et j'ai tjrs la valeur data > 0
superbobo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 17h25   #6
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
vous devez faire le DBCC UPDATEUSAGE en premier.

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 08/04/2011, 10h06   #7
Futur Membre du Club
 
Inscription : août 2004
Messages : 49
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 49
Points : 18
Points : 18
Ca ne change rien. Je précise que j'ai un champs nvarchar(max). Mais je ne pense pas que ça ait une incidence..?
superbobo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 16h24   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Normal un spaceused ne retourne jamais 0...

Quel est votre valeur de space?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 18h08   #9
Futur Membre du Club
 
Inscription : août 2004
Messages : 49
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 49
Points : 18
Points : 18
valeur "data" renvoyé par la procédure ==> 1656kb
superbobo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2011, 21h11   #10
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
Il faudrait avoir la DDL de votre table et la méthode de suppression des données que vous avez employé.

Un élément de réponse ici

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h41.


 
 
 
 
Partenaires

Hébergement Web