בדף הזה מפורטות בעיות ידועות שקשורות לשימוש גבוה בדיסק, ומוצעים פתרונות לבעיות האלה.
בעיות מוכרות שקשורות לשימוש גבוה בדיסק:
- שימוש גבוה בקובצי
Temporary_filesב-MySQL מגרסה 8.0 ואילך. - שימוש גבוה בקבצים מסוג
Othersב-MySQL 8.0 ובגרסאות קודמות.
השימוש בקבצים זמניים מסווג כשימוש בtmp_data בקבצים בגרסאות שקדמו ל-MySQL 8.0.
מדד של פירוט נפח האחסון ב-MySQL
המדד העיקרי שמשמש למעקב אחרי השימוש המפורט בדיסק הוא cloudsql.googleapis.com/database/disk/bytes_used_by_data_type. המדד הזה
מספק פירוט של השימוש בדיסק במופע לפי סוג הנתונים, באופן הבא:
| סוג נתונים | הגדרה |
|---|---|
Binlog |
נפח האחסון שנדרש ליומנים בינאריים של MySQL, שחיוניים לשחזור לנקודת זמן מסוימת ולשכפול. |
Cloudsql_mysql_audit_log |
שטח האחסון שבו נעשה שימוש ביומן הביקורת של Cloud SQL MySQL. |
Data |
כולל את מרחבי הטבלאות הראשיים InnoDB (.ibd קבצים) ואת מרחב הטבלאות של המערכת (ibdata1). |
General_log |
נפח האחסון שמשמש את יומן השאילתות הכללי. |
General_tablespace |
נפח האחסון שנמצא בשימוש של מרחב הטבלאות של המערכת InnoDB, שמורכב מהקבצים ibdata*. |
Last_sys_tablespace |
נפח האחסון שנמצא בשימוש של מרחב הטבלאות האחרון. |
Others |
כולל קבצים פנימיים של המערכת. |
Redo_log |
נפח האחסון שנוצל על ידי יומני ה-redo של InnoDB שמשמשים לשחזור אחרי קריסה. |
Relaylog |
נפח האחסון שמשמש ליומני ממסר במופע משוכפל במהלך השכפול. |
Slow_log |
נפח האחסון שמשמש את יומן השאילתות האיטיות אם הוא מופעל ומאוחסן בדיסק. |
Temporary files |
אחסון במעקב מפורש של קבצים זמניים שנוצרו על ידי MySQL. |
Temporary_space |
האחסון שמשמש את הקבצים הזמניים של מערכת ההפעלה בספרייה /tmp. |
Tmp_data |
נתונים זמניים שנוצרו על ידי MySQL במהלך פעולות כמו מיון וצירוף. |
Undo_log |
נפח האחסון שמשמש את יומני הביטול. |
איתור קבצים בקטגוריות Temporary_files ו-Others
שאילתות שפועלות לאורך זמן (למשל, פעולות מורכבות של JOIN, ORDER BY או GROUP BY) יוצרות קבצים זמניים גדולים בספריית MySQL.
במכונות MySQL שמשתמשות בגרסאות תחזוקה שפורסמו החל מאפריל 2026, הקבצים הזמניים האלה מדווחים באופן מפורש בקטגוריה Temporary_files.
בגרסאות קודמות, הקבצים הזמניים מדווחים בקטגוריה Others.
פתרון בעיות שקשורות לשימוש גבוה בדיסק
כדי לפתור בעיות של שימוש גבוה בדיסק שנגרמות בגלל קבצים זמניים גדולים, פועלים לפי השלבים הבאים:
- זיהוי שאילתות פעילות שפועלות במשך זמן רב.
- צמצום מיידי של הסיכון.
- שימוש בתובנות לגבי שאילתות.
- ביצוע ניתוח רטרוספקטיבי.
- אופטימיזציה של שאילתות.
- הגדרת מעקב והתראות.
זיהוי שאילתות פעילות ממושכות
בעיות של שימוש גבוה בדיסק נגרמות בדרך כלל על ידי שאילתות שפועלות במשך זמן רב (לדוגמה, פעולות מורכבות של JOIN, ORDER BY או GROUP BY) שיוצרות קבצים זמניים גדולים בספריית MySQL. הקטגוריות של הקבצים הזמניים האלה הן Temporary_files או Others.
במופעי MySQL עם גרסאות תחזוקה חדשות (גרסה r20260320.00_00 ואילך) יש טבלה INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES שמציגה את הקבצים הזמניים שנוצרו על ידי שאילתות שפועלות לאורך זמן ושלא מקושרים (כלומר, הקבצים קיימים, אבל לא מקושרים לתהליך MySQL) על ידי MySQL.
כדי לקבל את השאילתה הפעילה הממושכת, משתמשים בשאילתה הבאה:
SELECT
otf.fd, otf.size, p.id, p.info, p.user
FROM
INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES otf
LEFT JOIN
performance_schema.processlist p
ON
otf.SESSION_ID = p.ID;
פלט לדוגמה:
+----+------------+------+----------------------------------+------+
| fd | size | id | info | user |
+----+------------+------+----------------------------------+------+
| 39 | 1670750208 | 8 | select * from t1 order by rand() | root |
| 40 | 1670750208 | 8 | select * from t1 order by rand() | root |
+----+------------+------+----------------------------------+------+
2 rows in set (0.00 sec)
במקרים שבהם הגרסה של התחזוקה היא r20260320.00_00 או גרסה קודמת, אפשר להשתמש בשאילתה הבאה כדי לקבל את השאילתה הפעילה לטווח ארוך:
SHOW FULL PROCESSLIST;
בפלט, מחפשים את הפעולות שבדרך כלל משתמשות בקבצים זמניים בדיסק:
- פעולות גדולות של
JOIN, במיוחד ללא אינדקסים מתאימים. - פעולות מורכבות של
ORDER BYאוGROUP BYבקבוצות גדולות של תוצאות. - פעולות
ALTER TABLEגדולות.
צמצום מיידי
אם במהלך הבדיקה מזוהה שאילתה פעילה כמקור לניצול נפח האחסון בדיסק, אפשר להפסיק אותה כדי לפנות את נפח האחסון הזמני שמשויך אליה.
כדי להפסיק את השאילתה, מריצים את הפקודה הבאה:
KILL PROCESS_ID;
מחליפים את PROCESS_ID במזהה התהליך של השאילתה:
בגרסאות תחזוקה
r20260320ואילך, אפשר לאחזר את הערך PROCESS_ID דרך העמודה SESSION_ID בטבלהINFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES.בגרסאות קודמות (גרסה
r20260117ומטה) , אפשר לאחזר את הערך PROCESS_ID מהפלט של הפעולהSHOW FULL PROCESSLIST.
אחרי סיום של שאילתה שאחראית על צריכת דיסק מוגברת באמצעות קבצים זמניים, יכול להיות שיחלפו עד 5 דקות עד שהשינויים האלה יירשמו במדדי השימוש בדיסק.
שימוש בתובנות לגבי שאילתות
מומלץ להשתמש בתובנות לגבי שאילתות כדי לזהות ולשפר שאילתות שפועלות לאט.
מידע נוסף מופיע במאמר שימוש בתובנות לגבי שאילתות כדי לשפר את הביצועים של השאילתות.
ביצוע ניתוח רטרוספקטיבי
אחרי שהשימוש יחזור לרמה הרגילה, תוכלו לנתח את הנתונים ההיסטוריים כדי לזהות את הסיבה באמצעות הכלים הבאים:
תובנות לגבי שאילתות. בודקים אם יש שאילתות שיצרו קבצים זמניים גדולים. בודקים את השאילתות שמופיעות בסיכום השאילתות (כולל מדדים כמו זמן הביצוע הממוצע, מספר השאילתות והממוצע של השורות שנסרקו והוחזרו).
Slow_log. מפעילים אתSlow_logומגדירים אתlong_query_timeלסף מתאים. ביומן הזה מתועדות שאילתות שפועלות לאורך זמן לצורך ניתוח ואופטימיזציה.
General_log. בודקים אתGeneral_log(אם האפשרות מופעלת) כדי לראות אם יש שאילתות שנרשמו ביומן במהלך חלון האירוע עם פעולותJOINאוSORTשאולי יצרו קבצים זמניים גדולים. אחרת, אפשר להפעיל את התכונהGeneral_logולתעד את השאילתה באירוע הבא.מדדים של Cloud Monitoring. בודקים את המדדים הבאים:
-
cloudsql.googleapis.com/database/mysql/tmp_disk_tables_created_count: עוקב אחרי מספר הטבלאות הזמניות שנוצרו בדיסק, שלעתים קרובות הן הגורם לקבצים גדולים שלא מקושרים. -
cloudsql.googleapis.com/database/mysql/handler_operations_count: עוקב אחרי העלייה במספר הפעולות באזור באותו זמן. -
cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: עוקב אחרי העסקאות שפעילות למשך זמן ארוך יותר.
עלייה במדדים האלה שחלה במקביל לעלייה החדה בשימוש בדיסק מצביעה בבירור על כך שהשאילתות שיצרו טבלאות זמניות גדולות היו הגורם העיקרי לבעיה.
-
היסטוריית עסקאות. בודקים את המדדים הבאים:
-
cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric: אורך רשימת היסטוריה גבוה יכול להיגרם מעסקאות שפועלות במשך זמן רב וחוסמות את הטיהור של יומני הביטול, מה שיכול גם לתרום לבעיות בשימוש בדיסק. -
cloudsql.googleapis.com/database/mysql/innodb/active_trx_longest_time: עסקאות שפועלות לאורך זמן במהלך התקופה של שימוש גבוה בדיסק.
-
אופטימיזציה של שאילתות
אחרי שבעזרת ניתוח היומן מזהים את השאילתות הספציפיות שגורמות לעליות חדות במדדים, אפשר לבצע אופטימיזציה שלהן או לכתוב אותן מחדש כדי לצמצם את יצירת הקבצים הזמניים הנרחבים.
כדי לבצע אופטימיזציה של שאילתה, אפשר לבצע את הפעולות הבאות:
- מוסיפים אינדקסים מתאימים.
- מבצעים רפקטורינג לצירופים מורכבים או לפעולות מיון.
מידע נוסף זמין במאמר בנושא שיפור שאילתות.
הגדרה של מעקב והתראות
כדי למנוע מקרים עתידיים שנגרמים כתוצאה משימוש לא מבוקר בדיסק, במיוחד בגלל קבצים זמניים שנוצרים משאילתות שפועלות לאורך זמן, כדאי להטמיע ניטור פרואקטיבי והתראות באמצעות Monitoring.
אפשר ליצור התראות לגבי מדדים שמצביעים על צריכת משאבים גבוהה או על דפוסי שאילתות שידוע שהם יוצרים קבצים זמניים גדולים.
| שם המדד | תיאור | סף ההתראה המומלץ |
|---|---|---|
cloudsql.googleapis.com/database/disk/utilization |
אחוז ניצול נפח האחסון שהוקצה.
המדד הזה עוקב אחרי השימוש הכולל בקיבולת הדיסק. |
יותר מ-80% (למשך 5 דקות) |
cloudsql.googleapis.com/database/disk/bytes_used |
מספר הבייטים הכולל של נפח האחסון שבו נעשה שימוש במופע של מסד הנתונים.
המדד הזה עוקב אחרי הגידול האבסולוטי בצריכת הדיסק. |
מעקב אחרי המדד database/disk/quota. |
במאמרים סקירה כללית על התראות ומעקב אחרי מכונות Cloud SQL מוסבר איך מגדירים התראות ומעקב אחרי מדדים של Cloud SQL.