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
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
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)
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
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
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...
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 ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager