במאמר הזה מוסבר איך להגדיר ולהשתמש בקבוצות משאבים של MySQL ב-Cloud SQL ל-MySQL כדי לנהל את הקצאת משאבי המעבד (CPU) לצרכים שונים של עיבוד נתונים ולתת להם עדיפות.
סקירה כללית
קבוצות משאבים של MySQL, שהוצגו ב-MySQL 8.0, מאפשרות לכם לנהל את הקצאת משאבי ה-CPU ולתת לה עדיפות בין שרשורים שונים שפועלים במופע מסד נתונים יחיד. התכונה הזו שימושית לצמצום הבעיה של "שכנים רועשים", שבה משימות בעדיפות נמוכה, כמו ניתוח נתונים יומי או דוחות אצווה, עלולות לגרום לעלייה חדה בשימוש במעבד ולהוריד את רמת הביצועים של חיבורי לקוח קריטיים בעדיפות גבוהה, כמו עיבוד עסקאות אונליין (OLTP).
קבוצות משאבים נתמכות בכל המכונות של Cloud SQL ל-MySQL 8.0 ואילך, גם במהדורת Cloud SQL Enterprise וגם במהדורת Cloud SQL Enterprise Plus.
ההבדלים בין קבוצות משאבים ב-MySQL של הקהילה לבין קבוצות משאבים ב-Cloud SQL
Cloud SQL ל-MySQL הוא שירות שמנוהל במלואו. כדי להבטיח את המהימנות של המכונה ולהגן על התהליכים הפנימיים של Cloud SQL, חלים ההבדלים וההגבלות הבאים בהשוואה להתנהגות של MySQL בקהילה:
- אין תמיכה בהקצאת ליבות CPU
- קבוצות אסורות של משאבי מערכת
- רישום אוטומטי ביומן (binlog) ושכפול של קובצי DDL של קבוצות משאבים
- הרשאות אדמין שניתנו מראש
אין תמיכה בהקצאת ליבות CPU
אין תמיכה בהצמדה של מעבד ברמת הליבה. לדוגמה, אי אפשר לציין VCPU = 2-3 או VCPU = 0 כשיוצרים קבוצת משאבים ב-Cloud SQL ל-MySQL. מכיוון שהטופולוגיה הבסיסית של ליבת המכונה הווירטואלית מופשטת, כל ניסיון להשתמש בסעיף VCPU בהצהרה CREATE RESOURCE GROUP או ALTER RESOURCE GROUP נכשל עם שגיאת דחיית הגישה הבאה.
ERROR 1227 (42000): Access denied; This operation (CPU clause)
is not allowed on the Cloud SQL environment. Only THREAD_PRIORITY allowed;
קבוצות אסורות של משאבי מערכת
אי אפשר ליצור קבוצות של משאבי מערכת ב-Cloud SQL.
מותרות רק קבוצות משאבים ברמת המשתמש (TYPE = USER), עם עדיפויות לשרשור שנעות בין 0 (העדיפות הכי גבוהה למשתמש) לבין 19 (העדיפות הכי נמוכה למשתמש).
אסור להשתמש בקבוצות של משאבי מערכת כדי למנוע מעומסי עבודה של משתמשים להפריע לעבודות רקע קריטיות של Cloud SQL, כמו גיבויים, מעקב ושכפול.
הפעלת הפקודה CREATE RESOURCE GROUP עם TYPE = SYSTEM תיכשל עם השגיאה הבאה:
ERROR 1227 (42000): Access denied; This operation (TYPE=SYSTEM) is
not allowed on the Cloud SQL environment. Only TYPE=USER is allowed;
רישום אוטומטי של יומנים בינאריים ושכפול של DDL של קבוצות משאבים
ב-MySQL של הקהילה, פעולות של קבוצת משאבים כמו CREATE, ALTER ו-DROP RESOURCE GROUP אף פעם לא נכתבות ביומן הבינארי. ב-Cloud SQL, התנהגות ברירת המחדל הזו מבוטלת כך שכל הפקודות להגדרת קבוצת משאבים נכתבות ביומן הבינארי.
כך קבוצות המשאבים משוכפלות אוטומטית לרפליקות לקריאה, ואפשר להשתמש ברמזים לאופטימיזציה של שאילתות (או ברמזים של RESOURCE_GROUP) ברפליקות כדי למנוע כשלים בשאילתות בגלל קבוצות חסרות.
הגדרות הקבוצה נרשמות גם בזרם של יומן בינארי לצורך שחזור מערכת מנקודה מסוימת בזמן (PITR).
הקצאות של סשנים לשרשורים, כמו SET RESOURCE GROUP, לא נכתבות ביומני הבינארי.
הרשאות אדמין הוענקו ל-cloudsqlsuperuser
כדי לעבוד עם קבוצות משאבים, צריך את הרשאות האדמין הבאות במסד הנתונים:
-
RESOURCE_GROUP_ADMIN: יצירה, שינוי ומחיקה של קבוצות משאבים -
RESOURCE_GROUP_USER: הקצאת שרשורים או שימוש ברמזים בשאילתות
ב-Cloud SQL, שתי ההרשאות מוענקות כברירת מחדל לתפקיד cloudsqlsuperuser.
אדמינים של MySQL יכולים גם להעניק למשתמשים אחרים את הרשאת מסד הנתונים RESOURCE_GROUP_USER או RESOURCE_GROUP_ADMIN.
ניהול קבוצות משאבים ב-Cloud SQL
אתם יכולים להגדיר ולנהל קבוצות משאבים ברמת המשתמש ב-Cloud SQL כדי לייעל את הקצאת המשאבים במסד הנתונים. כך תוכלו לשלוט בהקצאת משאבי ה-CPU בין עומסי עבודה שונים של סשנים במסד הנתונים במופע, ולתת עדיפות להקצאה.
פרטים נוספים על הגדרת קבוצות משאבים ב-MySQL ועל התנהגות ההפניה מופיעים במאמר קבוצות משאבים במסמכי התיעוד של MySQL.
כדי לנהל קבוצות של משאבים ב-Cloud SQL, אפשר לבצע את הפעולות הבאות:
- יצירת קבוצת משאבים: יצירת קבוצות משאבים ברמת המשתמש וציון סדרי עדיפויות מותאמים אישית לשרשורים.
- שינוי העדיפות של קבוצת משאבים: שינוי העדיפות של תזמון המעבד של קבוצת משאבים קיימת ברמת המשתמש.
- הסרת קבוצת משאבים: מסירים קבוצת משאבים כשאין בה יותר צורך.
- הקצאת חיבורים ושאילתות לקבוצת משאבים: מיפוי של סשנים פעילים, משתמשי מסד נתונים או שאילתות ספציפיות לקבוצת משאבים.
- מעקב אחרי קבוצות משאבים: בדיקה של קבוצות משאבים שהוגדרו והקצאות של שרשורים.
לפני שמתחילים
לפני שיוצרים קבוצת משאבים, צריך לוודא את הדברים הבאים:
אתם מחוברים למסד הנתונים באמצעות חשבון משתמש עם הרשאת
RESOURCE_GROUP_ADMIN. כברירת מחדל, למשתמשrootולכל חשבון מסד נתונים שהוקצה לו התפקידcloudsqlsuperuserיש את ההרשאה הזו.המכונה ב-Cloud SQL פועלת ב-MySQL מגרסה 8.0 ואילך.
יצירת קבוצת משאבים
יוצרים קבוצות משאבים ברמת המשתמש עם עדיפות לשרשור בין 0 (העדיפות הכי גבוהה) לבין 19 (העדיפות הכי נמוכה). עדיפות ברירת המחדל של השרשור לחיבורים רגילים היא 0.
כדי ליצור קבוצת משאבים, מריצים את ההצהרה הבאה:
CREATE RESOURCE GROUP GROUP_NAME TYPE = USER THREAD_PRIORITY = PRIORITY_VALUE;
מחליפים את מה שכתוב בשדות הבאים:
-
GROUP_NAME: השם של קבוצת המשאבים שרוצים ליצור. -
PRIORITY_VALUE: עדיפות התזמון של ה-CPU לקבוצת המשאבים, מ-0(העדיפות הכי גבוהה) עד19(העדיפות הכי נמוכה).
שינוי העדיפות של קבוצת משאבים
כדי לשנות את העדיפות של תזמון ה-CPU של קבוצת משאבים קיימת, מריצים את ההצהרה הבאה:
ALTER RESOURCE GROUP GROUP_NAME THREAD_PRIORITY = PRIORITY_VALUE;
מחליפים את מה שכתוב בשדות הבאים:
-
GROUP_NAME: השם של קבוצת המשאבים שרוצים לשנות. -
PRIORITY_VALUE: העדיפות החדשה של תזמון ה-CPU.
הסרה של קבוצת משאבים
כדי להסיר קבוצת משאבים, מריצים את ההצהרה הבאה:
DROP RESOURCE GROUP GROUP_NAME;
מחליפים את מה שכתוב בשדות הבאים:
-
GROUP_NAME: השם של קבוצת המשאבים שרוצים להסיר.
הקצאת חיבורים ושאילתות לקבוצת משאבים
כדי לאכוף מגבלות על משאבים בעומס עבודה, צריך להקצות חיבורים פעילים או שאילתות ספציפיות לקבוצות משאבים של משתמשים.
כדי להקצות חיבורים של סשנים לקבוצה:
נותנים הרשאה למשתמש של עומס העבודה:
GRANT RESOURCE_GROUP_USER ON *.* TO 'USERNAME'@'%';
מחליפים את מה שכתוב בשדות הבאים:
-
USERNAME: משתמש מסד הנתונים שרוצים להעניק לו את ההרשאה.
-
כשהמשתמש מתחבר, מריצים את הפקודה:
SET RESOURCE GROUP GROUP_NAME;
מחליפים את מה שכתוב בשדות הבאים:
-
GROUP_NAME: השם של קבוצת המשאבים שרוצים להקצות לה את החיבור.
אפשר גם לציין מזהה שרשור ספציפי:
SET RESOURCE GROUP GROUP_NAME FOR THREAD_ID;
מחליפים את מה שכתוב בשדות הבאים:
-
GROUP_NAME: השם של קבוצת המשאבים שרוצים להקצות לה את החיבור. -
THREAD_ID: המזהה של השרשור הספציפי במסד הנתונים שרוצים להקצות.
-
כדי להקצות שאילתה יחידה לקבוצה (באמצעות רמז לאופטימיזציה):
משתמשים בהערה של האופטימיזציה של RESOURCE_GROUP בתוך הצהרת ה-DML או SELECT:
SELECT /*+ RESOURCE_GROUP(GROUP_NAME) */ COLUMN_NAME_1, SUM(COLUMN_NAME_2) FROM TABLE_NAME GROUP BY COLUMN_NAME_1;
מחליפים את מה שכתוב בשדות הבאים:
-
GROUP_NAME: השם של קבוצת המשאבים שרוצים להריץ את השאילתה במסגרתה. -
COLUMN_NAME_1: העמודה שלפיה רוצים לקבץ את התוצאות. -
COLUMN_NAME_2: ערך העמודה שרוצים לסכם. -
TABLE_NAME: הטבלה שרוצים לשלוח אליה שאילתה.
מעקב אחרי קבוצות משאבים
כדי לבדוק את קבוצות המשאבים שהוגדרו:
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
כדי לראות את שרשורי החיבור הפעילים ואת קבוצות המשאבים שהוקצו להם, מריצים את השאילתה הבאה:
SELECT THREAD_ID, NAME, TYPE, RESOURCE_GROUP
FROM performance_schema.threads;