מסד נתונים חווה ירידה בביצועים. יש צורך לזהות שאילתות צורכות משאבים מובילות, לעקוב אחר שינויים בתוכניות, ולמצוא רגרסיות בביצועים.
→אפשר והשתמש ב-Query Store.
למה: Query Store הוא "מקליט נתוני הטיסה" המובנה לביצועי שאילתות. הוא לוכד אוטומטית היסטוריית שאילתות, תוכניות וסטטיסטיקות המתנה, מה שהופך אותו לכלי העיקרי לאבחון בעיות ביצועים לאורך זמן.
מקור↗
שאילתה מבצעת היטב לעיתים אך גרוע בזמנים אחרים עקב בעיות parameter sniffing, שבהן תוכנית ביצוע מותאמת עבור ערך פרמטר לא מייצג.
→השתמש ב-Query Store כדי לזהות את התוכניות השונות ולאכוף את תוכנית הביצוע הטובה באופן עקבי.
למה: אכיפת תוכנית ב-Query Store מספקת דרך מהירה ויעילה לייצב ביצועים עבור שאילתות בעייתיות ללא שינויים בקוד. היא עוקפת את בחירת האופטימייזר עם תוכנית ידועה וטובה.
לשפר את ביצועי השאילתות ללא שינויי קוד על ידי ניצול תכונות כמו batch mode on rowstore, memory grant feedback, ו-table variable deferred compilation.
→הגדר את רמת התאימות של מסד הנתונים ל-150 (עבור תכונות SQL 2019) או גבוה יותר.
למה: סט התכונות של Intelligent Query Processing (IQP) מופעל על ידי רמת התאימות של מסד הנתונים. רמה 150+ מפעילה מגוון רחב של שיפורי ביצועים "ללא שינוי קוד" במעבד השאילתות.
צוות התפעול צריך לקבל הודעה כאשר מדדי ביצועים מרכזיים, כגון אחוז מעבד או deadlocks, עולים על סף מוגדר.
→השתמש ב-Azure Monitor ליצירת התראות מדדים (עבור CPU) והתראות יומן (עבור deadlocks) המפעילות Action Group.
למה: Azure Monitor היא הפלטפורמה המרכזית לניטור והתראות על משאבי Azure. Action Groups מספקים ערוצי התראות גמישים (דוא"ל, SMS, webhook וכו').
שפר את ביצועי הכתיבה על ידי זיהוי והסרה של אינדקסים שאינם בשימוש על ידי שאילתות קריאה כלשהן.
→בצע שאילתה ל-sys.dm_db_index_usage_stats DMV.
למה: DMV זה עוקב אחר שימוש באינדקס (seeks, scans, lookups) לעומת עדכונים. אינדקסים עם עדכונים רבים אך שימוש אפס או נמוך מאוד הם מועמדים עיקריים להסרה, מה שמפחית את תקורת התחזוקה.
יש צורך ללכוד מידע מפורט על בעיות חסימה לסירוגין, כולל ההצהרות והסשנים המעורבים בשרשרת החסימה.
→הגדר סשן Extended Events הלוכד את האירוע blocked_process_report.
למה: אירוע זה מספק דוח XML מפורט של שרשראות חסימה כאשר סף התהליך החסום נחצה, ומציע מידע אבחוני עמוק שאינו זמין ב-DMVs.
מסד נתונים צריך שאסטרטגיית האינדקס שלו תתאים אוטומטית לדפוסי עומס עבודה משתנים ללא התערבות ידנית.
→אפשר את האפשרות CREATE_INDEX ב-Azure SQL Database Automatic tuning.
למה: תכונה זו מאפשרת ל-Azure לנתח את עומס העבודה, לזהות אינדקסים חסרים בעלי השפעה גבוהה, ליצור אותם, ולאמת את יתרון הביצועים שלהם, ובכך לאוטומט משימת DBA מרכזית.
העבר עומסי עבודה של דוחות עתירי קריאה ממסד הנתונים הראשי של OLTP ברמת Business Critical או Premium.
→שנה את מחרוזות החיבור לקריאה בלבד של היישום לכלול 'ApplicationIntent=ReadOnly'.
למה: רמות אלו כוללות עותק משני קריא מובנה בחינם. מאפיין ApplicationIntent במחרוזת החיבור מנתב אוטומטית חיבורי קריאה בלבד לעותק זה, ומבודד עומסי עבודה של קריאה.
טבלת עובדות גדולה במחסן נתונים משמשת לעיתים קרובות לשאילתות אגרגציה (SUM, COUNT, AVG) המבצעות לאט.
→צור אינדקס columnstore מקובץ על טבלת העובדות.
למה: אינדקסים מסוג Columnstore מאחסנים נתונים בפורמט עמודות, ומספקים דחיסת נתונים גבוהה מאוד ומאפשרים ביצוע במצב batch, מה שמאיץ באופן דרמטי שאילתות אגרגציה ושאילתות אנליטיות עתירות סריקה.
מסד נתונים חווה התנגשות חסימה משמעותית בין שאילתות קריאה (דוחות) ושאילתות כתיבה (טרנזקציות).
→אפשר Read Committed Snapshot Isolation (RCSI) במסד הנתונים.
למה: RCSI משתמש בגרסאות שורות, ומאפשר לקוראים לראות את הגרסה האחרונה המאושרת של הנתונים מבלי לקחת נעילות משותפות, ובכך מבטל חסימות מכותבים. כותבים אינם חוסמים קוראים.
יישום המשתמש במסד נתונים Serverless חווה זמני חיבור איטיים ראשוניים לאחר תקופה של חוסר פעילות.
→הפחת את השהיית העצירה האוטומטית או הגדר ערך vCore מינימלי גדול מאפס.
למה: העיכוב נגרם כתוצאה מהתחדשות מסד הנתונים ממצב מושהה (cold start). הגדרת ערך vCore מינימלי מונעת ממסד הנתונים לעצור לחלוטין, ומבטלת זמן אחזור של חידוש במחיר של חיוב מחשוב רציף מסוים.