Welcome to Sign in | Help

Re: sp_spaceused in SQL 2000 index_size

  •  06-20-2008, 7:30 PM

    Re: sp_spaceused in SQL 2000 index_size

    Dacă vrei să vezi cât spaţiu este alocat pentru fiecare index non-clustered al unei tabele, poţi folosi ceva de genul:

    SELECT indid, name, dpages*8 as allocated_kb, used*8 as used_kb
    FROM sysindexes WHERE id=object_id('Nume tabela')
    AND INDEXPROPERTY(id,name,'IsStatistics')=0
    AND indid NOT IN (0,1,255)

    Pentru mai multe informaţii, vezi topicul referitor la sysindexes din Books Online. Totuşi, din pagina respectivă nu este foarte clar care e diferenţa dintre coloanele dpages, reserved şi used (şi care dintre ele conţine informaţia care contează cu adevărat). De exemplu, dacă execut următorul query în baza de date pubs:

    EXEC sp_spaceused 'titleauthor'

    SELECT indid, name, dpages, reserved, used
    FROM sysindexes WHERE id=object_id('titleauthor')
    AND INDEXPROPERTY(id,name,'IsStatistics')=0

    obţin următoarele rezultate:

    name                      rows        reserved   data    index_size   unused
    ------------------------- ----------- ---------- ------- ------------ ------
    titleauthor               25          56 KB      8 KB    48 KB        0 KB 

    indid  name                      dpages      reserved    used
    ------ ------------------------- ----------- ----------- -----------
    1      UPKCL_taind               1           7           7
    2      auidind                   1           2           2
    3      titleidind                1           2           2


    Dacă încercăm să adunăm valorile din oricare din cele trei coloane şi să înmulţim cu 8 KB (dimensiunea unei pagini), nu obţinem nicicum spaţiul raportat la index_size. Singurul mod de a ajunge la această valoare este să calculăm (used-dpages)*8, pentru indexul cu id-ul 1 (care e oarecum formula pe care o regăsim şi dacă facem un EXEC sp_helptext 'sp_spaceused'). Deci, cel puţin în SQL Server 2000, nu am găsit o metodă de a obţine informaţii foarte clare şi foarte exacte despre spaţiul ocupat de fiecare index, dar oricum, query-ul de mai sus furnizează nişte rezultate orientative destul de corecte.

    Răzvan
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems