הבלוג של גרי רשף

18/10/2010

חישוב גודל הדטבייס

Filed under: Uncategorized — גרי רשף @ 09:15

פרץ ויכוח במשרד בין ה-DBA-ים המשועממים: מה גודלו של הדטבייס?

האחד משתמש בפרוצדורות מערכת כדוגמת sp_SpaceUsed, השני רק בפקודות DBCC, השלישי בודק את גודל הקבצים לפי טבלת המערכת sys.sysfiles, הרביעי לא מכיר את אובייקטי המערכת אלא רק את הממשק הגרפי בו הוא בודק את ה-Properties של הדטבייס על ידי קליק ימני, והחמישי – לא תנוח דעתו עד שיראה במו עיניו מה גודל הקבצים ב-File system.

התוצאות השונות לא מתואמות זו עם זו, כל אחת מראה משהו קצת אחר, וכל אחד בטוח שהצדק עימו ומלגלג על זולתו..

הגדלים השונים הנמדדים הם אלו:

clip_image002

Database Size =הגודל הכללי, כולל הלוג (זה המספר המבוקש – למי שזה כל מה שמעניין אותו).

*.ldf =גודל קובץ הלוג.

*.mdf =גודל קובץ הנתונים (ניתן לפצל אותו למספר קבצים).

Unallocated Space =שטח אחסון בקבצי ה-mdf שלא הוקצה לצרכים של הדטבייס. הוא נוצר על ידי מנגנון ה-Auto Growth וניתן להיפטר ממנו (לא מומלץ!) על ידי DBCC ShrinkFile .. TruncateOnly).

Reserved =שטח אחסון בקבצי ה-mdf שנשמר לצרכי הדטבייס והוקצה לאובייקטים הקיימים בו.

Unused =שטח אחסון בקבצי ה-mdf שהוקצה לצרכי הדטבייס (טבלאות ואינדקסים) אך לא נעשה בו שימוש (זה יכול ללמד על בעיית פרגמנטציה).

Data =שטח אחסון הנתונים בקבצי ה-mdf בדטבייס (כולל Clustered Indexes).

Index Size = שטח אחסון האינדקסים בקבצי ה-mdf בדטבייס (לא כולל Clustered Indexes).

הגדלים השונים נמדדים בדרך כלל ב-Bytes, KB, MB, GB ו-Pages; כשאני אתרגם את כולם ל-MB:

Bytes נחלק ב-10242 (ולא ב-1,000,000 המקובל כקירוב..),

KB נחלק ב-1024,

GB נכפול ב-1024,

ו-Pages נכפול ב-8 (כדי לתרגם ל-KB) ונחלק ב-1024..

לצורך הדגמה אגש לדטבייס master אצלי בשרת:

clip_image004

ולהלן סיכום התוצאות מתורגמות ל-MB:

image

עד כאן- הנתונים מסתדרים זה עם זה "על הקשקש"..

כעת נבדוק עד כמה sp_SpaceUsed מתואמת עם עצמה: עד כה השתמשתי בה לשליפת נתונים לגבי הדטבייס כולו, וכעת אשלוף נתונים לאובייקטים השונים; כאשר מדובר בטבלאות, Indexed Views (שיש עליהם אינדקסים), Queues של Service Broker (שממתינים לשליפה אסינכרונית), וטבלאות המערכת- ניצור טבלה ב-tempdb (כדי שלא תשפיע על גודלו של הדטבייס אותו בודקים), ונקלוט לתוכה את הפלט של sp_SpaceUsed:

Use master;

Go

If object_id('tempdb..T_SpaceUsed') Is Not Null Drop Table tempdb..T_SpaceUsed;

Go

Create Table tempdb..T_SpaceUsed(ID Int Identity Primary Key,

                                name Varchar(Max),

                                rows Int,

                                reserved Varchar(Max),

                                data Varchar(Max),

                                index_size Varchar(Max),

                                unused Varchar(Max));

Go

Declare @SQL Varchar(Max);

Set @SQL='';

Select @SQL=@SQL+'Insert Into tempdb..T_SpaceUsed Exec SP_SpaceUsed '''+Schema_name(schema_id)+'.'+name+''';'+Char(13)

From sys.objects

Where type In ('U','S','SQ','V')

Order By type_desc;

Print @SQL;

Exec(@SQL);

Go

ונשלוף מתוכה את הסיכום:


Select Sum(Cast(Replace(reserved,' KB','') As float))/1024 reserved,

    Sum(Cast(Replace(data,' KB','') As float))/1024 data,

    Sum(Cast(Replace(index_size,' KB','') As float))/1024 index_size,

    Sum(Cast(Replace(unused,' KB','') As float))/1024 unused

From tempdb..T_SpaceUsed;

Go

אצלי יש התאמה מלאה לנ"ל (2.438, 1.094, 1.016, 0.328):

clip_image006

אפשר כמובן לעיין בפלט המפורט כדי לשלות מהרשת את הדגים השמנים..

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

יצירה של אתר חינמי או בלוג ב־WordPress.com.

%d בלוגרים אהבו את זה: