2011-08-21

על עלויות ב SQL Azure

זהו נושא מעניין ומיוחד רק לענן בניגוד ל SQL Server רגיל שאתה משלם על חומר ורישיון, פה אתה משלם על תעבורה ועל זיכרון.

חיוב ברמת ה SQL Azure מתחלק ל2 רמות של חיוב:
1.      עלות בסיסי נתונים שנרכשים.
2.      עלות תעבורה אל בסיס הנתונים וממנו (כאשר ממנו אל ה windows azure לא מחושב).

1.      עלות בסיסי נתונים שנרכשים.
ישנן 2 סוגי שרתים שאפשר לרכוש Web addition and Business addition כאשר השוני בניהם זה גודל הדיסק שאתה רוכש  (ניתן בכל רגע נתון לשדרג את הגודל של בסיס הנתונים – אם יגיע לקצה גבול הגודל ולא תדאגו להגדיל הוא פשוט יתקעלהלן טבלת העלויות:
  • Web Edition
    • $9.99 per database up to 1GB per month
    • $49.95 per database up to 5GB per month
  • Business Edition
    • $99.99 per database up to 10GB per month
    • $199.98 per database up to 20GB per month
    • $299.97 per database up to 30GB per month
    • $399.96 per database up to 40GB per month
    • $499.95 per database up to 50GB per month
רואים ברשימה שמה שקובע זה גודל בסיס הנתונים כך שאם כמשל לקחת גירסה של 1GB הרי ברמה יומית מדובר על 0.33$ וכך זה יחושב, לפי הימים שהיו לך בחודש. אם יש לך 2 בסיס נתונים זה יחושב לפי 0.66$.
כמה בסיסי נתונים יש לך כל יום?
select time,sku,quantity   from sys.database_usage 

דוגמא לתוצאת ריצה:
2.      לחישוב זה של עלות שרת מצטרפת עלות תעבורה אל בסיס הנתונים וממנו:
נתחיל מהשאילתא הבסיסית:
SELECT *
  FROM sys.bandwidth_usage
  WHERE time >= '20110501' 
המחזירה תוצאות מדהימות אלו:
Time – עמודה זו יש שעה למשל רשום 8:00:00:000 זה מסכם מידע מ 8 עד 9 לפי שעון שרת – תלוי באיזה מרכז נמצא השרת (על מיקום ואופי חוות השרתים – זה כבר נשאיר למאיר לדבר....)
Database_name – קשה לנחש... שם בסיס הנתונים עליו התבצע איסוף הנתונים
Direction – גם כאן קשה לנחש... הערכים האפשריים Egress/Ingress – המייצגים  Output\Input כלומר data הנכנס או יוצא מבסיס הנתונים ואליו.
Class – הערכים האפשריים Internal\External . כאשר זהו מידע פנימי (Internal) הוא לא נושא בעלויות... (יללה כולם למסור מידע פנימי). מידע פנימי פירושו מידע היוצא או הנכנס מה windows azure ל SQL Azure  ולא אל שאר העולם.
Time_period – הערכים האפשריים OffPeak\Peak – ופירושו הוא מתי אירע האירוע האם בשעות העומס או לא למשל אם זה שרת שיושב בצפון ארה"ב שעות העומס הן בין 10 בבוקר ל 6 בערב
Quantity – סכום של כמות מידע שעברה ב KB

עכשיו לשוס – איך מחשבים – יום לימודים ארוך – אבל לכן אני כותב כדי להקל....
מידע Internal לא מחוייב.

מידע הזורם פנימה Ingress בזמן OffPeak גם לא מחושב – וזה נכון עד סוף יוני 2011
עלויות תלויות היכן המרכז מחשבים שאתה מתחבר אליו :

בצפון אמריקה או אירופה למשל  -  $0.10 per GB in / $0.15 per GB out
אסיה -  $0.10 per GB in / $0.20 per GB out

נריץ את זה:

select direction,
    time_period,   
    sum(
        case when sys.bandwidth_usage.direction = 'Egress'
                then (0.15 * quantity/ (1024*1024) )    
            when sys.bandwidth_usage.direction = 'Ingress'
                then (0.10 * quantity/ (1024*1024))
        end ) as "cost"
        from sys.bandwidth_usage
        where datepart(yy,time) = datepart(yy, getutcdate()) and    
        datepart(mm,time) = datepart(mm, getutcdate()) and
        class = 'external'
        group by direction, time_period
נקבל את זה:

direction  time_period  cost
---------- ------------ ---------
Egress     OffPeak      0.000006
Ingress    OffPeak      0.000000
Egress     Peak         0.000575
Ingress    Peak         0.010554

מעולה – כל המידע לפנינו
ניסכום ונוריד מה שלא משלמים   (מה לא משלים - משתנה אחת לכמה זמן למשל היה שינוי בראשון ליולי) אפשר כמובן להוסיף פילטר לפי חודש...

select sum(
    case when sys.bandwidth_usage.direction = 'Egress'
            then (0.15 * quantity/ (1024*1024) ) 
        when sys.bandwidth_usage.direction = 'Ingress'
            then (0.10 * quantity/ (1024*1024)) 
    end
    ) as "cost"
 from sys.bandwidth_usage
 where
 class = 'external' and
(direction!='Ingress' and time_period!='offpeak')

והנה עלות התעבורה....

צרפו את עלות התעבורה לעלות השרת ויש לנו עלות ה SQL Azure, יש לזכור שהתנאים והעלויות יכולים להשתנות אולם זה מה שיש כרגע.


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