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

MS SQL Server Discussion :

Tables et Data spaces


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Tables et Data spaces
    bonjour,

    comment retrouver le data space dans lequel est stocké 1 table

    La vue sysindexes donne l'info mais pas systables ???

    Merci pr l'aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    sysindexes te suffit pour localiser tes objets dans les groupes de fichiers (ça s'appelle comme ça sous sql server)

    dans sysindexes, il y a également une ligne par table (where indid=0)

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    En fait je ne vois que les groupes qui stockent les indexes, pas ceux qui stockent les tables.

    Je n'ai pas de lignes avec indid=0 dans sys.filegroups, mais uniquement 1, 2 ou 3

    Il me manque qque chose ???

    Merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    passes ce script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    declare @id	int			
    declare @type	character(2) 		
    declare	@pages	int			
    declare @dbname sysname
    declare @dbsize dec(15,0)
    declare @bytesperpage	dec(15,0)
    declare @pagesperMB		dec(15,0)
     
    create table #spt_space
    (
    	objid		int null,
    	rows		int null,
    	reserved	dec(15) null,
    	data		dec(15) null,
    	indexp		dec(15) null,
    	unused		dec(15) null
    )
     
    set nocount on
     
    -- Create a cursor to loop through the user tables
    declare c_tables cursor for
    select	id
    from	sysobjects
    where	xtype = 'U'
     
    open c_tables
     
    fetch next from c_tables
    into @id
     
    while @@fetch_status = 0
    begin
     
    	/* Code from sp_spaceused */
    	insert into #spt_space (objid, reserved)
    		select objid = @id, sum(reserved)
    			from sysindexes
    				where indid in (0, 1, 255)
    					and id = @id
     
    	select @pages = sum(dpages)
    			from sysindexes
    				where indid < 2
    					and id = @id
    	select @pages = @pages + isnull(sum(used), 0)
    		from sysindexes
    			where indid = 255
    				and id = @id
    	update #spt_space
    		set data = @pages
    	where objid = @id
     
     
    	/* index: sum(used) where indid in (0, 1, 255) - data */
    	update #spt_space
    		set indexp = (select sum(used)
    				from sysindexes
    				where indid in (0, 1, 255)
    				and id = @id)
    			    - data
    		where objid = @id
     
    	/* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */
    	update #spt_space
    		set unused = reserved
    				- (select sum(used)
    					from sysindexes
    						where indid in (0, 1, 255)
    						and id = @id)
    		where objid = @id
     
    	update #spt_space
    		set rows = i.rows
    			from sysindexes i
    				where i.indid < 2
    				and i.id = @id
    				and objid = @id
     
    	fetch next from c_tables
    	into @id
    end
     
    select 	TableName = (select left(name,60) from sysobjects where id = objid),
    	Lignes = convert(char(11), rows),
    	RéservéKB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
    	DonnéesKB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
    	TailleIndexKB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
    	LibreKB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
     
    from 	#spt_space, master.dbo.spt_values d
    where 	d.number = 1
    and 	d.type = 'E'
    order by reserved desc
    drop table #spt_space
    close c_tables
    deallocate c_tables

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Data spaces
    Merci mais je n'ai pas nesoin de l'espace libre/consommé, mais uniquement du data_space (ou filegroup) associé à une table

    Pour info, j'ai des tables réparties sur plusieurs groupes, et je dois détecter le groupe avant de lire dans la table...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    tu dois avoir une table partitionné c'est ça ?

    seule la vue sys.indexes te permet de savoir sur quel(s) filegroup(s) sont placés tes objets. Quand tu as une table partitionnée, il faut également utiliser la table sys.partitions pour avoir la liste de toutes les partitions de ta table, chaque partition étant sur un filegroup différent.

    Mais plus précisement, quel est ton but final ?

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

Discussions similaires

  1. générer un fichier xml depuis une table avec data integrator BO
    Par explorateur dans le forum Alimentation
    Réponses: 0
    Dernier message: 19/01/2010, 14h22
  2. Un petit probleme avec un table binding data
    Par javalhoussain dans le forum JSF
    Réponses: 2
    Dernier message: 13/07/2009, 14h24
  3. Réponses: 0
    Dernier message: 09/12/2008, 17h36
  4. Réponses: 3
    Dernier message: 21/08/2008, 18h05
  5. Réponses: 3
    Dernier message: 08/11/2007, 11h28

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