2019-03-04

Azure SQL DB tiers comparison

Hi All
In the last few month Brent Ozar gae us 2 masterpiece blogs related to Azure SQL DB:
 
 
In this blog Brent compared the abilities of Azure SQL DBs to load Data - he compared all combinations of vCors tiers. (When I asked him about comparing the Standard\Premium tiers, he told me to do it.... :-) )
 
 
In this blog Brent showed us that in the vCors world the storage throughput has limit and there is not need to pay so much money when you need to upload lots of data.
 
So I took have taken up his challenge and done a comparison in Azure SQL DB in Standard\Premium tiers.
I have created a new DB with 1 Table.
I have generated 7 GB of DATA, and created the file in my local on premise drive (Yes, do not kill me, I did not had the time to put it on azure), and uploaded it via BCP command.
 
bcp "TableName" in "T:\MyTable.bcp"  -S"myservername.database.windows.net" -UUserName@myservername -P"Password" -n -d"DBName"
 
After each test I have truncate the table and changed the tier.
 
Here are the main results:
  
 
Rows/second
Time(MS)
Cost per month
S2
             4,071
           18,184,812
 $                    73.0
S4
             4,083
           18,129,531
 $                  294.0
S6
             9,007
              8,219,047
 $                  588.0
S9
           18,733
              3,952,062
 $              2,354.0
S12
           15,054
              4,917,703
 $              4,415.0
P1
             3,670
           20,168,375
 $                  456.0
P4
           22,851
              3,239,875
 $              1,825.0
P11
           22,188
              3,336,688
 $              6,868.0
P15
           24,487
              3,023,344
 $            15,698.0
 
It is clearest to see if we view the results in a chart of cost vs Rows\Second.
 
 
What does the Charts shows us?
Most cost effective is S9 tier, but as we would expect P15 is the fastest  
 
Below are various graphs of resource utilization for each tier.
 
S2 tier Log IO and Data IO took time
 
 
S4 Had only LOG IO issues
 
S6 - the same chart.
 
S12 Log IO is 100% and I have also added the DTU.
P4 looks the Same


 
 
P11 start to change Log IO was 100% only for a short time
 
 
P15 \ P11 \ P4 on the same Chart
 
 
 
In conclusion - Just as Brent found, Log IO is the bottleneck, the storage write operations. 
Log IO is the bottleneck but you get what you pay for, the more you pay the more I/O. Therefore the effects of the Log IO bottleneck are reduced the more resources/money you throw at the problem.
 
Next time I will test reads operations and CPU's
 
Have a good day.

2019-01-03

Static Data Masking in SQL Server

סיפור המעשה התחיל לפני שנים מספר, אז אמרתי לחבר צוות שלי: יללה חייבים לבדוק את הגיבויים.
אז איך בודקים גיבויים? משחזרים.

אכן רעיון מעולה - ויותר טוב זה לחבר אליו אפליקציה ולוודא שהדברים עובדים...

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

באו החכמים ממיקרוסופט (באמת ישבו על זה צוותים ובנו GUI מדהים) ופיתחו את הפיצ'ר הידוע בשם :
Static Data Masking.

ראשית מהיכן מריצים?
מ SSMS 18 ומעלה. אין פה תלות לגירסת בסיס הנתונים.

מהו במהותו? מגדירים שדות שיימוסכו - רץ גיבוי - רץ שיחזור ואז יש הרצת עדכון לשדות הממוסכים לפי הגדרת השדות למיסוך כמובן ב Bulk אחד. מעדכנים בפועל את המידע הקיים.

הפיצ'ר במהותו נכון אבל באמת לא נראה לי שמישהו שיש לו בסיס נתונים בגודל מעל כמה GB יוכל להשתמש בו - העדכון כמובן עף על טבלאות גדולות.
למשל אם מעדכנים כמה שדות באותה טבלה הוא מריץ לכל עמודה עדכון בפני עצמו, כמובן שזה לא יעיל....

בגלל שזה תוכנן כך - הנתונים הרגישים זמינים בקובץ הגיבוי וזה כשלעצמו לא יעבור לדעתי, בקרת רגולציה...

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

הלינק לדוקומנטציה:
 
 





 

2018-11-08

AzureDiagnostics and AzureMetrics in SQL Azure DB

שלום רב
מיקרוסופט התקדמו מאד במתן האפשרויות ב SQL Azure לנטר ולדעת מה קורה בבסיס הנתונים.
המדדים נשמרים במחסן נתונים ומתחלקים ל 2 אגפים :

AzureMetrics

אלו המדדים הראשים של AZURE שם הם אוספים הכל גם למכונות לסטורג וכמובן לבסיסי נתונים.
למשל בעולם של SQL Azure מדובר על DTU וכל מה שאפשר לצפות בגרפים בפורטל.

AzureDiagnostics

פה מדובר על מטריקות יותר מתקדמות תחת אגף זה נכנסים קטגוריות כמו Audit שהחלטה לשלוח לשמירה, Query store, המלצות, Wait type של DBA וגם Insights. בקיצור אגף מרתק ומעניין - וארחיב עליו בקרוב בפוסט מורחב.

כאשר מחליטים לקשר Azure SQL לאגף - הולכים לבסיס הנתונים מקשרים אותו והמערכת מלבד מתחילה לשמור נתונים...(היא שומרת אותם בבסיס הנתונים הידוע בשם Kusto או בשמו החדש Azure Data Explorer, וגם על כך אני מבטיח פוסט בקרוב ממש) השמירה היא ל 30 יום.
ואז אפשר לתחקר בשפת ה  Kusto ( עוד פוסט בקרוב אמרנו?...) או בדשבורדים שמיקרוסופט נתנו, או אפילו ב Power bi (וואו גם על זה עוד פוסט?... בכיף.) העיקר שיהיה אפשר לתחקר.

בקיצור ים של DATA נשמר - רק קחו ונצלו אותו.

להלן מספר תמונות שממחישות

תמונה מספר 1 מספרת לנו את המיקום שבו בוחרים מה יש לנו ב Azure Metrics מגיעים לשם דרך בסיס הנתונים כל המטריקות ניתנות להגדרת התרעה ורואים בגרף.
עדיין זה לא נשמר למחסנית הנתונים. כלומר אפשר כרגע רק לתחקר עם מה שיש.
זה לפני שבחרתי מדד CPU של בסיס נתונים.

 
 
 
תמונה מספר 2 מציגה לנו את הגרף שעלה אחרי בחירת המדד -  אצלינו CPU.
 
 
 
תמונה מספר 3 מספרת לנו איך אנו מגדירים לשמור למחסנית הנתונים את ה AzureDiagnostics and AzureMetrics.
בוחרים פה ואז ניתן לבחור מה רוצים לשמור.



תמונה מספר 4 מספרת לנו את סיפור תיחקור הלוג. רואים בצד שמאל המון אפשרויות - תלכו ל Logs וייפתח לכם מסך תיחקור שימו לב לשפת התיחקור של Kusto, תוצאת השאילתה נכתבת למסך בצורת טבלה אבל אפשר להעביר לגרף בקלות. פה שאלתי את המנוע כל מה שנשמר ל AzureMetrics והוא קשור ל SQL לפי מדד - מה הערך הממוצע. אפשר עוד חלוקה לפי בסיסי נתונים (אפשר כמה בסיסי נתונים למחסנית אחת).


בתמונה מספר 5 ספרתי כמה דגימות לכל מדד.




תמונה מספר 6 מספרת את סיפורו של הקליק - בקליק אפשר להפוך את התוצאה לגרף ואפשר לראות יותר טוב מה קרה..



תמונה מספר 7 מתחילה לספר את עולם ה AzureDiagnostics שימו לב במחסנית בחרתי Logs, והתחלתי לתחקר בשאילתא, ספרתי כל מה שיש לנו לפי קטגוריות.
בחלק השני יש את הקטגוריות שהם אוספים עבורינו כמו שציינתי למעלה המון דברים מאד מעניינים. שימוש רב אפשר לעשות פה.


תמונה מספר 8 מספרת את סיפורו של הקליק 2 - גם פה בקליק אפשר לראות ברף מה יש ומא אין בתוצאות

וכמו שאמרתי אפשר להוציא מפה דוח, התרעה, לינק לדש בורד ועוד.

ממליץ מאד לנשות ואם משהו לא ברור אנא שאלו.

2018-10-23

Azure SQL DB Changes Monitoring

שלום רב
מעקב אחרי שינויים בבסיס נתונים זה דבר בסיסי.
  • מי שינה קונפיגורציה של בסיס הנתונים ומתי.
  • מי עשה שינויים בסכמה או ב DATA ומתי.
  • מי שינה קונפיגורציה של השרת ומתי.
בקיצור הרבה מידע לדעת.
בשירות המנוהל SQL Azure DB , הקונפיגורציות הן ברמות שונות, יש ברמת של T-sql, יש ברמה של PowerShell
ויש פעולות שעושים בפורטל.

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

אז ככה:
יש ללכת ל RG של בסיס הנתונים ולגשת לספריה הקרויה Deployment.


 


פה רואים כל מה שקרה ב RG.
לדוגמא פה רואים שיש Deployment שבוא בביצוע כעת (יצירת רפליקה):
אפשר לראות שיש היסטוריה של שגיאות :

וכמובן מה השגיאה שארעה למשל פה הגענו לגבול ה TDU שבשרת הזה:

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



כשלוחצים על מה שכן הצליח רואים פרטים רבים:


זהו
עוד מידע לצבור - אולי נעשה עליו AI? :-)
יום נעים

2018-08-22

PowerShell to get Some DATA on ALL your Azure SQL DB's

שלום רב

למי שיש הרבה בסיסי נתונים מפוזרים בענן רוצה לצבור עליהם מידע לצרכים שונים יכול ליצור סקריפט PowerShell שיעבור על כל ה Subscriptions ויאסוף מידע שקיים ב PowerShell.

וכן המקום לפינת הקיטור היומית - ידידינו ממיקרוסופט מה עם Backward Compatability?
היו לי פרמטרים שיכלנו לשאוב למשל כמה גודל בסיס הנתונים וכרגע אי אפשר לדעתי. נכון נותנים את המידע במקומות אחרים אבל נוח שזה יעבוד שנים - וסקריפט שעבד לי שנים - לאחרונה הפסיק לעבוד.

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

אז הנה סקריפט בסיסי ממש - מוזמנים לשפר ולשתף עם הקהילה.

  1. ראשית עליכם לוודא שהמודולים של Azure מותקנים אצלכם (הרצה חד פעמית במחשב)
install-module -Name AzureRM -Force
  1. עושים לוגאין ליוזר שלכם ב Azure (חד פעמית בסשין)
Add-AzureRmAccount
  1. מריצים את הסקריפט להנאתכם
Write-Host "Login to Azure..." -ForegroundColor Cyan
$subscription = ( Get-AzureRmSubscription)
$subscriptionId = ( $subscription).SubscriptionId
$subscriptionName = ( $subscription).Name
foreach ($s in $subscription)
 
{



$c = Set-AzureRmContext -Subscriptionid $s.SubscriptionId
$a = Select-AzureRmSubscription -SubscriptionId $s.SubscriptionId
$ResourceGroup = @(Get-AzureRmResourceGroup)
foreach ($RG in $ResourceGroup)

{


$Sds = @(Get-AzureRmSqlServer -ResourceGroupName $RG.ResourceGroupName)
foreach ($SqlDatabaseServer in $Sds)

{


$databases = @(Get-AzureRmSqlDatabase -ResourceGroupName $RG.ResourceGroupName -ServerName $SqlDatabaseServer.ServerName | Where-Object {$_.DatabaseName -ne "master" })
foreach ($SqlDatabase in $databases)

{


Write-Host -Separator " " $s.Name $SqlDatabase.ServerName $SqlDatabase.DatabaseName $SqlDatabase.Location $SqlDatabase.CurrentServiceObjectiveName MAX:($SqlDatabase.MaxSizeBytes/1024/1024/1024)GB }



}

}

}
 

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


 
 
 

2018-07-03

Load Balance Read Operations in SQL Azure

שלום רב

והיום קצת על ארכיטקטורה ועל Load Balancing.

איך עובד SQL Azure DataBase?

בכל Data Center לכל בסיס נתונים יש 3 עותקים נסתרים, הם לא נגישים (רגע תכף תמתינו עד הסוף... :-) ), כאשר יש בעותק אחד בעיה ישנה פעולה שנקראת  Re configuration שהם מרימים עותק נוסף כדי שכל הזמן יהיו 3 עותקים בתוך אותו Data Center.
אחלה, מעולה, אכן SLA  גבוה.

כאשר עלה צורך לגופים בארגון לבצע קריאות רבות, או כשרציתי לאזן עומסים מהעותק הראשי בנינו עותק ב data center אחר, וכיוונתי לשם עומסים.
הא מה?
  1. העותק הזה עולה כסף.
  2. העותק הנוסף חייב להיות ב Data Center אחר.
לכן הוצג הפתרון הזה - מיקרוסופט ייתנו לנו אפשרות לקרוא מאחד העותקים בתוך אותו ה Data Center, וזה גם יהיה ללא עלות כי הוא כבר קיים. וגם זה לא ישפיע על העותק הראשי.

כיצד זה מתבצע? הנה ההסבר המפורט:
  1. בודקים איזה tier בסיס הנתונים שלך במידה והוא Premium שזה בשיטת ה DTU, או ב Business Critical  שזה בשיטת ה V-Core, אם כן אז סבבה  יש לנו אישור להמשיך.
  2. מריצים סקריפט PowerShell שמאפשר לקרוא את העותק הרצוי.
  3. מתחברים לבסיס הנתונים עם התוסף: ApplicationIntent=ReadOnly
  4. מוודאים שאתה בעותק של read only .
וזהו סעו ברכה, אחלה פיצר.
 
להלן סקריפט PS:

Login-AzureRmAccount;
 
Select-AzureRmSubscription -SubscriptionName "MySubscriptionName" 

Set-AzureRmSqlDatabase -ResourceGroupName 'MyRGName' -ServerName 'MyServeName' -DatabaseName 'MyDBName' -ReadScale Enabled

 

 



 
מי שרוצה להתחבר מ SSMS מוזמן לעשות את זה ככה:



עכשיו צריך לוודא שאתה בעותק הנכון:


SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability'),DB_NAME(),@@SERVERNAME


 
הנה ב SSMS רואים שחיבור אחד הוא לעותק ה Read only.

ועכשיו לבדיקה עצמה:
מריץ שאילתא כבדה על העותק של הקריאה כתיבה והנה קופץ בפורטל הDTU.


ואם אני מריץ את אותה שאילתא על העותק ה Read Only, אין קפיצה ב DTU.



שימו לב אין שום GUI שמחובר לעותק ה Read Only.
והנה לינק לתעוד:

שאפו לרן עובדיה שסייע לי במציאת הפתרון.

נסו ותהנו.
יום נעים