חישוב גודל אינדקסים ובמה לטפל

26/01/2018

אין תגובות

 

חיפוש באינטרנט אחר סקריפטים לחישוב גודל אינדקסים (storage size) מחזיר הרבה דוגמאות דומות המתבססות על טבלת המערכת sys.allocation_units (למשל כאן). הבעייה היא שהסקריפט מטפל באינדקסים "רגילים", וכך קרה שפיספסתי אינדקסים על XML..

החלופה היא לפנות לפונקציית המערכת sys.dm_db_index_physical_stats , למשל כך (טבלה מסויימת):

Select  S.index_id,

        (Select name From sys.indexes I Where I.object_id=Max(S.object_id) And

        I.index_id=S.index_id),

        8*Sum(page_count) 'Indexsize(KB)'

From    sys.dm_db_index_physical_stats(DB_ID(),Object_ID('MyTbl'),Null,Null,Null) S

Group By index_id

Order By [Indexsize(KB)] Desc;

למה זה טוב? להרבה דברים, למשל – להתבסס עליו כדי לגלות את האינדקסים הלא מקומפרסים הכי גדולים:

With S As

(Select object_id,

        S.index_id,

        8*Sum(S.page_count) [Indexsize(KB)]

From     sys.dm_db_index_physical_stats(DB_ID(),Null,Null,Null,Null) S

Group By S.object_id,

        S.index_id)

Select  Object_Schema_Name(S.object_id) SchemaName,

        Object_Name(S.object_id) ObjectName,

        I.name,

        I.type_desc,

        S.[Indexsize(KB)],

        P.data_compression_desc

From    S

Inner Join sys.indexes I (NoLock)

        On S.object_id=I.object_id

        And I.index_id=S.index_id

Inner Join sys.partitions P (NoLock)

        On S.object_id=P.object_id

        And S.index_id=P.index_id

Where   data_compression_desc='NONE'

Order By [Indexsize(KB)] Desc;

ולבסוף – כיצד מקמפרסין אינדקס קיים? אין צורך לבצע Drop & Create או (עדיף) להיפך, אלא:

Alter Index Idx_MyTbl On MyTbl Rebuild With(Online=On,Data_Compression=Page);

 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *