2019-08-06

sp_whoisactive of Adam Machanic at GitHub is now support Azure SQL DB

sp_whoisactive is a very helpful monitoring sp used by almost ever SQL Server DBA. It was written by Adam Machanic. 

It provide a lot of data showing what is running in your server and the resources being consumed.

Adam & his great team have saved us many hours of work - Thank you Adam!!!
I have been waiting for many years for this SP to be compatible with SQL Azure. 
In previous versions when we tried running it on Azure SQL DB we got this error:
"Msg 40515, Level 15, State 1, Procedure sp_WhoIsActive, Line 16 [Batch Start Line 7]Reference to database and/or server name in 'msdb.dbo.sysjobs' is not supported in this version of SQL Server." on (v10.76)
In the SP it called MSDB and since we do not have MSDB in SQL Azure we got the error.
Adam put his SP in GitHub https://github.com/amachanic/sp_whoisactive , and I found out this the version was upgraded to v11.33. And now it runs on SQL Azure.
And finally I can see everything in our PAAS DB's.
Thank you Adam.

2019-05-30

Cost Management in Azure

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




יש להקליק ולהגיע למסך הזה.




במסך זה יהיו רשימת ה Subscriptions ונגיע לרצוי לנו.




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




לאחר מכן אפשר לשחק בסוגי החיתוכים למשל רוצים חיתוך יומי ולא מצטבר:



לאחר מכן נגיע למסך לחיתוך לפי סוג או לפי ה meter name,

יש אפשרויות רבות


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


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












 

2019-05-06

Rising prices of Azure

שלום רב
פוסט זה אני כותב לאחר מספר פעמים שהתופעה הזו התרחשה, מדובר על עליית מחרים בשירותים של azure.
אני רוצה להתמקד בשני נושאים:
  1. New Alert system
  2. Azure SQL DB PRS tiers
הנקודה הראשונה:
  • כחלק מהשירותים שניתנו למשתמשי השירותים המנוהלים - קיבלנו מערכת התרעות סבירה ונוחה, ניתן היה להגדיר התרעות כאשר ה DB עובד קשה מידי DTU גבוה או הגענו ל 90% מהסטורג' וכדומה.
  • לא מזמן קפצה הודעה שההתרעות הללו ייפסקו ב 30 ביוני ראו תמונה:


  • ואז הולכים להגדיר התרעה חדשה:

  • מסך יותר משוכלל שנותן התרעות לפי שלבים ומצבים, פה הגדרתי אם DTU מעל 85% לזמן מסויים:
  • ואז מגדירים את ההתרעה - וראה זה פלא יש עלות!!! סנט להתרעה:

  • כאשר ממש לא ברור אם זה פר התרעה או פר הגדרה, נכון סכום נמוך - אבל במאות שירותים ובמאות ריסורסים זה מגיע למאות דולרים ובמצטבר עוד שורה שמנה בחשבונית.
הנקודה השנייה:
  • היה שירות ב DB שנקרא PRS שהוא נתן יכולות של Premium tier עם SLA יותר נמוך.
  • לא שמנו עליו production אבל הוא היה מעולה לבדוק , Load test בעלות הגונה.
  • והנה גם את זה מורידים בסוף יוני - אותה הודעה מלמעלה, וממש אין שום פתרון הגיוני. זה יגרום לעליית עלויות ביותר מפי 4.
ההתנהגות הזו מצביעה על שינוי שקורה במיקרוסופט לאחרונה, פחות מקשיבים ללקוחות, וממוקדים רק מטרה אחת, לא חשוב מה הלקוח חושב, חשוב מהי השורה התחתונה...
אלו תזכורות לימים אחרים במיקרוסופט.

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

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




 

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 }



}

}

}
 

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