Skip to main content

What is Azure SQL Database DTU and its connection to SQL Database elastic pools - Part 1

שלום לכולם
אנו DBA's תן לנו SSD, תן לנו יותר RAM, תנו לנו עוד Cores, שימו את הלוגים על דיסקים מהרים - תמי תמיד יש לנו בקשות ותלונות לכולם.... רק לא לנו עצמינו.

אבל האמת המרה היא שמה שחשוב בסוף זה ה Latancy, כמה זמן לקח לפעולה להתבצע - ובאמת באמת לא משנה מה התשתית של הברזלים, אצלינו באיטורו - לקוחות מכניסים טרזקציות כספיות... בסוף בסוף זה באמת לא משנה מה רץ ועל מה רץ - חשוב שזה ירוץ מהר - שפוזיציה לא תיכנס ביותר מ 20 MS לצורך העניין.

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

ובכן ב SQL Azure הכלי הוא מדידת DTU.

לפני זמן מה כשהכריזו על  SQL Database elastic pools, מיד התחלתי לבדוק את המוצר, ולנסות להבין האם הוא מממש את ההבטחה שיוצריו הבטיחו לנו.
תוך כדי בדיקות וחקירות, הבנתי שבכדי להסביר את המוצר ומה שעומד מאחריו לא אוכל להתחמק מלהסביר על ה DTU.

הסבר על ה DTU רציתי לעשות מזמן. זהו מושג חובה בהבנת התנהלות של SQL Azure.
אבל התחמקתי מההסבר כי ל DBA קלאסי קשה עם המושג הזה (כמו שהסברתי למעלה).

אז הנה הכריחו אותי להסביר.

היום אסביר על DTU , ובפוסט הבא, אם וכאשר אגיע לכך, אסביר על SQL Database elastic pools .

DTU לפי ההגדרה הרישמית הוא:

Database Throughput Unit (DTU): DTUs provide a way to describe the relative capacity of a performance level of Basic, Standard, and Premium databases. DTUs are based on a blended measure of CPU, memory, reads, and writes. As DTUs increase, the power offered by the performance level increases. For example, a performance level with 5 DTUs has five times more power than a performance level with 1 DTU. A maximum DTU quota applies to each server. For more information on DTU quotas
 

משפט המפתח:
blended measure of CPU, memory, reads, and writes
לקחו מדידה של המטריקות הללו והרכיבו מדד של DTU, שבסופו של דבר נמדד ב אחוזים כלומר אם אתם מגיעים ל 100% DTU זהו סימן שאתה מנצל את כל משאבי החומרה המיועדים לחומרה - לא ינתקו קוננקשין, אין פה מגבלה של ביצוע - אלא פשוט העבודה תתבצע יותר לאט.
 
כיצד הם מחשבים DTU?
התשובה היא די פשוטה יש טבלה בכל בסיס נתונים שדוגם את המדדים כל כמה שניות, אגב הוא שומר אותם באגרגציה של 5 דקות בבסיס הנתונים master, ועל סמך המדדים הללו יש נוסחא לחישוב DTU.
שמו של ה DMV הוא:
sys.dm_db_resource_stats

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


אפשר גם ליצור התרעה דרך הפורטל במידה וה DTU גבוה מידי.

נקודה חשובה נוספת שיש ליזכור - הדברים משתנים מידי פעם - אם למשל פעם p1 היה 100 DTU היום הוא יותר.

עוד נקודה אחרונה לפני לינקים וטבלאות מידע - ל  DTU יש מיגלה ברמת Server כלומר לסרבר מוגדר כמה DTU הוא יכול להיות סך הכל וכל בסיס הנתונים המרכיבים אותו לא יכולים להיות בסכום גבוה ממה שמוגדר.

SQL Server ב Azure זו יחידה לוגית שמגדירה כמה נושאים משותפים של בסיס נתונים כמו חוקי firewall  וגם DTU.

מספר לינקים חשובים:

טבלאות והסברים מה יש בכל tier ברמה של כמה טרנזקציות לשניה, וכמה DTU התמונה מאד ברורה ממאמר זה:
https://msdn.microsoft.com/en-us/library/azure/dn741336.aspx

הסבר על ה benchmark:
https://msdn.microsoft.com/en-us/library/azure/dn741327.aspx

בלוג של בחור מדהים שביצע השוואות בין tiers שונים וכתב כמה בלוגים בנושא - הבעיה שוב שכל כמה חודשים יש שיפורים והתוצאות נכונות לזמנן אולם זה נותן תמונה מעניינת ולרוב נכונה לגבי מה יש ומה אין.
https://cbailiss.wordpress.com/2014/09/16/performance-in-new-azure-sql-database-performance-tiers/
עד כאן להיום...
אם לא הייתי ברור או הארכתי מידי מוזמנים לשלוח מייל ולשאול

יללה נלך לראות ברצלונה באיירן..
פיני
 

Comments

Popular posts from this blog

How to restore deleted Azure Synapse dedicated SQL pool

  Existing dedicated pool can be easily restored from Azure portal or PowerShell command, but for now deleted pool could be restored from PowerShell only! Example: # Connect to Azure with system-assigned managed identity $AzureContext = (Connect-AzAccount -Identity).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext # $AzureContext = Set-AzContext -SubscriptionName $SubscriptionName -DefaultProfile $AzureContext $SubscriptionName="Databases" $ResourceGroupName="stg-rg-we" $ServerName="stg-synapse-we"   $DatabaseName="sql_we_2023_11_07_13_42" $NewDatabaseName="sql_dp_we_deleted" ######################################## $token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token $SubscriptionId = "ce088f9e-1111111a3914b" $DedicatedPoolEndPoint = "stg-synapse-we.sql.azuresynapse.net" $DedicatedPoolName = $DatabaseNam...

Back to Basic - create new Azure SQL DB

Hi All Long time no posts, i have been busy in last few months on a hard day 2 day work and did not  had the chance to publish some posts. So i have decided to sit and write some "Back to Basic" posts. Today i will write about how to create an Azure SQL Db from the portal. Choose the Subscription. RG - if its in special Project connect to its RG (Resource group is a virtual collection of resources in order to easy manage budgets.) DB Name Server - choose the correct or create one(Server has limited manage capabilities on the DB like security, backup policies and other rules) Choose no (elastic pool is a feature that will not be explained here) This is the server tier, means the power of the DB and by pass the payments of the DB (i will have special post on the new tiers options, for this post i will leave the default) This is the Storage redundancy , for now leave it in the default option. now we will move to the Networking tab: 8 - 9. Configuration of networking and s...

Configuring secondary database in Azure SQL DB - Bug found

Hi All Last week we had an issue with a secondary DB in geo replication and fail over group. To make the long story short we had to delete the secondary and recreate a secondary from scratch . And now let me tell you the story, we build a DB in P6 tier - very high, expensive and highly available. Then we add a geo replication copy via the platform, like it shows here. This is take from MSFT documentation: https://docs.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview It is written:  " Both primary and secondary databases are required to have the same service tier. It is also strongly recommended that the secondary database is created with the same backup storage redundancy and compute size (DTUs or vCores) as the primary. If the primary database is experiencing a heavy write workload, a secondary with lower compute size may not be able to keep up with it. That will cause redo lag on the secondary, and potential unavailability of the secondary. To mit...