Avatar billede mick Nybegynder
25. april 2004 - 11:15 Der er 7 kommentarer og
1 løsning

Vise totale antal MB vha. stored procedure

Jeg har følgende stored procedure som lister op alle tabeller i databasen sammen med størelsen på hver enkel tabel.

Hvordan ændrer jeg denne kode så den også sumerer op størrelsen på alle tabeller og kommer med en total størelse for alle tabeller til sammen?

BEGIN
    IF @top > 0
    SET ROWCOUNT @top

    SELECT [Table Name], (SELECT rows FROM sysindexes s WHERE s.indid < 2 AND s.id = OBJECT_ID(a.[Table Name])) AS [Row count], [Total space used (MB)] FROM 
    (
    SELECT    QUOTENAME(USER_NAME(o.uid)) + '.' + QUOTENAME(OBJECT_NAME(i.id)) AS [Table Name],
        CONVERT(numeric(15,2),(((CONVERT(numeric(15,2),SUM(i.reserved)) * (SELECT low FROM master.dbo.spt_values (NOLOCK) WHERE number = 1 AND type = 'E')) / 1024.)/1024.)) AS [Total space used (MB)]
    FROM    sysindexes i (NOLOCK)
            INNER JOIN
        sysobjects o (NOLOCK)
            ON
        i.id = o.id AND
        ((@include_system_tables = 1 AND o.type IN ('U', 'S')) OR o.type = 'U') AND
        ((@include_system_tables = 1)OR (OBJECTPROPERTY(i.id, 'IsMSShipped') = 0))
    WHERE    indid IN (0, 1, 255)
    GROUP BY    QUOTENAME(USER_NAME(o.uid)) + '.' + QUOTENAME(OBJECT_NAME(i.id))
   
    ) as a
ORDER BY    [Total space used (MB)] DESC


    SET ROWCOUNT 0
END
Avatar billede trer Nybegynder
25. april 2004 - 23:44 #1
Den plads en tabel bruger står direkte at læse i tabellen "sysindexes" i kolonnen "used" i pages - dvs. værdi x 8 = KB.

I Books Online kan du se præcist hvordan du skal bruge informationen og summe den op.

Selve opsummeringen laver du naturligvis ved en SUM(used)*8
Avatar billede zedios Nybegynder
26. april 2004 - 09:15 #2
Husk at hvis du benytter informationerne i sysindexes at kører en DBCC UPDATEUSAGE eller sp_spaceused @updateusage = true først. Ellers risikere du at få unøjagtige resultater.

Hvis du gerne vil have en total sum over alle objeckter kan du gøre  det ved hjælp af en COMPUTE BY SUM([Total space used (MB)]) - hvor [Total space used (MB)] er det SQL udtryk du bruger til at udtrække pladsforbrug for de enkelte objekter.

Husk do at i ADO vil din COMPUTE BY virke som et nyt resultat sæt - du skal altså læse begge resultat ind ..
Avatar billede mick Nybegynder
26. april 2004 - 10:57 #3
Tak for hjælpen. Jeg er totalt clueless når det gælder Stored Procedures i MS SQL Server.

Kan i give mig et lille eksempel på en SP som opsumerer "used" i "sysindexes"?
Avatar billede mick Nybegynder
26. april 2004 - 11:03 #4
OK hvis jeg forstår jeg ret giver "SELECT SUM(used)*8 AS total FROM sysindexes" total størelse på databasen i KB. Korekt?
Avatar billede mick Nybegynder
26. april 2004 - 11:07 #5
Mange spørgsmål her :-)

Hvordan bruker jeg helt konkret DBCC UPDATEUSAGE?
Avatar billede zedios Nybegynder
26. april 2004 - 11:59 #6
For alle tabeller/index i databasen:
DBCC UPDATEUSAGE(0)

For mere info se BOL (Books Online) - kan hentes fra:  http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
Avatar billede mick Nybegynder
08. januar 2005 - 16:46 #7
Tak for hjælpen. Kom med et svar så lukker jeg.
Avatar billede zedios Nybegynder
09. januar 2005 - 00:20 #8
svar :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester