בעיות ידועות בגרסאות משניות של MySQL 8.0

בדף הזה מתוארות בעיות ידועות וחוסר תאימות שאולי תיתקלו בהם אחרי שתבצעו שדרוג גרסה משמעותי מ-Cloud SQL ל-MySQL 5.7 ל-Cloud SQL ל-MySQL 8.0.

מידע נוסף על שדרוג גרסה ראשית זמין במאמר שדרוג גרסה ראשית של מסד נתונים במקום. מידע נוסף על יומני שגיאות זמין במאמרים הצגת יומני שגיאות.

בעיות בביצועים

בקטעים הבאים מפורטות בעיות ידועות בביצועים.

בעיות בשאילתת SELECT DISTINCT

אם משתמשים בשאילתה SELECT DISTINCT ב-MySQL 8.0.18 עד MySQL 8.0.20, יכול להיות שהביצועים יהיו נמוכים יותר. זמני הביצוע של שאילתות עשויים להיות ארוכים פי שלושה בהשוואה ל-MySQL 5.7.

מידע נוסף זמין במאמר MySQL Bug #99593.

כדי לפתור את הבעיה, אפשר לנסות את הפתרונות הבאים:

  • צריך לעדכן ל-MySQL 8.0.21, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.
  • אם משתמשים ב-MySQL 8.0.18 עד MySQL 8.0.20, צריך לעדכן את הערך של internal_tmp_mem_storage_engineהדגל של מסד הנתונים ל-memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

בעיות בשאילתות GROUP BY

אם משתמשים בשאילתות SELECT... GROUP BY ב-MySQL 8.0.36 או בגרסה קודמת, יכול להיות שתהיה ירידה בביצועים ועלייה בזמני הביצוע של השאילתות.

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

מידע נוסף זמין ב-MySQL bug #107700

כדי לפתור את הבעיה, אפשר לנסות את הפתרונות הבאים:

  • צריך לעדכן ל-MySQL 8.0.37, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.
  • אם משתמשים ב-MySQL 8.0.36 או בגרסה קודמת, צריך לעדכן את הדגל של מסד הנתונים internal_tmp_mem_storage_engine כדי להשתמש במנוע הזיכרון במקום במנוע של הטבלה הזמנית:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

בעיות בשרשורים עם רמת מקביליות נמוכה

מופעים שנוצרו ב-MySQL 8.0.22 או בגרסאות מאוחרות יותר שתומכות באפליקציות לקוח עם שרשורים בבו-זמניות נמוכה, עלולים לחוות בעיות בביצועים וזמני הרצת שאילתות ארוכים יותר.

ב-MySQL 8.0.22 נוסף הדגל innodb_log_writer_threads כדי לשפר את הביצועים במערכות עם רמת בו-זמניות (concurrency) גבוהה. הדגל הזה מופעל כברירת מחדל. אם יש לכם מופעים שנוצרו ב-MySQL 8.0.22 או בגרסה מאוחרת יותר שתומכת באפליקציות לקוח עם שרשורים בבו-זמניות נמוכה, מומלץ להשבית את הדגל innodb_log_writer_threads.

מידע נוסף זמין במאמר MySQL Bug #93734.

בעיות ב-JOINS

אם משתמשים בשאילתות JOIN עם התצוגה eq_ref במופעים שמשתמשים ב-MySQL מגרסה 8.0.29 עד גרסה 8.0.32, יכול להיות שתיתקלו בבעיות משמעותיות בביצועים.

מידע נוסף זמין בבאג מספר 109361 ב-MySQL.

כדי לפתור את הבעיה, צריך לעדכן ל-MySQL 8.0.33, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.

בעיות בסעיף LIMIT ובסעיף ORDER BY

אם מריצים שאילתה עם פסקה LIMIT ופסקה ORDER BY ב-MySQL 8.0.32 או בגרסה קודמת, יכול להיות שתיתקלו בבעיה בביצועים. במקרים מסוימים, יכול להיות שייעשה שימוש בתוכנית שאילתה שונה ב-MySQL 8.0 בהשוואה ל-MySQL 5.7 עבור אותה שאילתה.

מידע נוסף זמין במאמר בנושא שינויים ב-MySQL 8.0.33.

כדי לפתור את הבעיה, צריך לעדכן ל-MySQL 8.0.33, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.

בעיות של דליפת זיכרון ב-MySQL 8.0

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

דליפת זיכרון שנגרמת על ידי שאילתות טווח

אם משתמשים באופטימיזציה של טווח במופעים עם MySQL בגרסה 8.0.16 עד MySQL 8.0.28, יכול להיות שצריכת הזיכרון תהיה גבוהה בגלל קובץ הקוד והפונקציה memory/sql/THD::main_mem_root. זה עלול לגרום למיצוי הזיכרון (OOM) של המופע.

מידע נוסף זמין במאמר MySQL Bug #105331.

כדי לפתור את הבעיה, צריך לעדכן ל-MySQL 8.0.29, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.

דליפת זיכרון שמשויכת לתהליכים מאוחסנים

אם מריצים שאילתה בפרוצדורה מאוחסנת במופעים עם MySQL 8.0.27 עד 8.0.31, יכול להיות שהשאילתה תצרוך כמות גדולה מאוד של זיכרון בקובץ הפונקציה memory/sql/sp_head::execute_mem_root.

מידע נוסף זמין ב-MySQL Bug #107327.

כדי לפתור את הבעיה, צריך לעדכן ל-MySQL 8.0.32, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.

דליפת זיכרון שנגרמת מגישה לתצוגה באמצעות SELECT

אם אתם משתמשים בשאילתת SELECT ב-MySQL 8.0.35 או בגרסה קודמת, והאפליקציה שלכם משתמשת בהרבה קריאות לתצוגות, יכול להיות שתיתקלו בדליפת זיכרון משמעותית.

בנוסף, אם התצוגה DEFINER מוגדרת לroot@'%' או למשתמש שנגזר מהתפקיד cloudsqlsuperuser, יכול להיות שתיתקלו בדליפת זיכרון. הסיבה לכך היא שלתפקיד cloudsqlsuperuser יש הרשאות ביטול חלקיות.

מידע נוסף זמין בבאג מספר 103133 ב-MySQL.

כדי לפתור את הבעיה, אפשר לנסות את הפתרונות הבאים:

  • צריך לעדכן ל-MySQL 8.0.36, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.
  • אם משתמשים ב-MySQL בגרסה 8.0.35 או בגרסה מוקדמת יותר, צריך להשתמש במשתמש נפרד לתצוגה DEFINER, כלומר במשתמש שאין לו הרשאות ביטול חלקיות. אם אתם חייבים להשתמש בroot@'%' משתמש או בcloudsqlsuperuser תפקיד, הקפידו להשתמש בהם רק לתהליכי ניהול ולא לשאילתות של אפליקציות. אם דליפת הזיכרון נמשכת, צריך לשדרג ל-MySQL 8.0.36, לכל גרסה משנית מאוחרת יותר או לגרסה האחרונה.

בעיות בשכפול

בקטע הבא מפורטות בעיות מוכרות שקשורות לשכפול.

בעיות בשכפול מקביל

אם משתמשים ברפליקציה מקבילית ברפליקה מרובת-הליכי משנה שרכיב slave_preserve_commit_order מופעל בה, והמופע משמש לעומסי עבודה של כתיבה גבוהה, יכול להיות שפעולות המופע יושהו ללא הגבלת זמן בגלל קיפאון (deadlock) וזמן השהיה מצטבר של הרפליקציה.

הבעיה הזו מופיעה ב-MySQL 8.0.27 עד MySQL 8.0.32.

מידע נוסף זמין במאמרים MySQL Bug #95863 ו-MySQL Bug #103636.

כדי לפתור את הבעיה, אפשר לנסות את הפתרונות הבאים:

  • צריך לעדכן לגרסה 8.0.33 של MySQL, לכל גרסה משנית שבהמשך או לגרסה האחרונה.
  • כדי לגלות את הגורם לבעיה, כדאי להשבית את השכפול המקביל ואז לתזמן שדרוג מתאים. השבתה של שכפול מקביל יכולה לפתור את הבעיה באופן זמני, אבל לא מומלץ להשתמש בה כפתרון לטווח ארוך.

בעיות שקשורות להרשאות

בקטעים הבאים מפורטות בעיות מוכרות שקשורות להרשאות.

שינויים בהרשאות

‫MySQL שינתה את מערכות האבטחה וניהול החשבונות ב-MySQL 8.0.

אחרי שמשדרגים ל-MySQL 8.0, יכול להיות שלמשתמשים שנוצרו ב-MySQL 5.7 לא יהיו אותן הרשאות גישה כמו למשתמשים שנוצרו ב-MySQL 8.0. כתוצאה מכך, יכול להיות שמשתמשים שנוצרו ב-MySQL 5.7 יקבלו הודעת שגיאה על דחיית גישה בתרחישים הבאים:

  • יכול להיות שלמשתמשים ששודרגו מ-MySQL 5.7 לא יהיו הרשאות CREATE ROLE ו-DROP ROLE, כי ההרשאות האלה לא היו קיימות ב-MySQL 5.7.
  • יכול להיות שמשתמשים ששודרגו מ-MySQL 5.7 לא יוכלו להריץ את הפקודה KILL שדורשת עכשיו הרשאות CONNECTION_ADMIN כדי לפעול ב-MySQL 8.0.

מידע נוסף זמין במאמר בנושא הרשאות שזמינות ב-MySQL 8.0.

דוגמה להודעת שגיאה:

    ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
  

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

מידע נוסף זמין במאמר שדרוג הגרסה הראשית של מסד הנתונים במקום.

שינויים בהרשאות גורמים לשגיאה 'הגישה נדחתה'

יכול להיות שמשתמשים שנוצרו ב-MySQL 5.7 ושודרגו ל-MySQL 8.0 לא יוכלו להתחבר למסד הנתונים בגלל בעיה בהרשאות. במקרים כאלה, יכול להיות שהמשתמשים יקבלו את הודעת השגיאה הבאה:

    Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
  

ב-MySQL 8.0.16 נוסף סימון מסד הנתונים partial_revokes והוא הופעל כברירת מחדל, כך שניתן לבטל חלקית את הרשאות המשתמש.

אם משתמשים שנוצרו ב-MySQL 5.7 הוגדרו באמצעות תווים כלליים, יכול להיות שהמשתמשים האלה לא יוכלו להתחבר למסד הנתונים. אין יותר תמיכה בתווים כלליים לחיפוש ב-MySQL 8.0.16 ואילך. המשמעות היא שמערכת MySQL לא יכולה לאתר התאמה מדויקת למסד הנתונים ולמשתמש, ולכן יכול להיות שחלק מהקצאות ההרשאות הקיימות לא יועברו בשדרוג.

הבעיה הזו משפיעה על MySQL מגרסה 8.0.16 ואילך.

מידע נוסף זמין במאמרים הגדרת דגלים של מסד נתונים ואבטחה וניהול חשבונות.

כדי לפתור את הבעיה, אדמין צריך להקצות הרשאות באופן ידני למשתמשים ב-MySQL 8.0.

שינויים בערכי הדגלים בין MySQL 5.7 ל-MySQL 8.0

כשמשדרגים מ-MySQL 5.7 ל-MySQL 8.0, יכול להיות שחלק מהערכים של הדגלים של מסד הנתונים ישתנו בגלל שינוי בערכי ברירת המחדל בין הגרסאות. התנהגות כזו עלולה לגרום לבעיות בביצועים.

מידע נוסף מופיע במאמר ערכי ברירת מחדל חדשים ב-MySQL 8.0.

כדי לפתור את הבעיה, צריך לוודא שערכי הדגלים של מסד הנתונים שהוקצו באופן ידני ב-MySQL 5.7 עדיין חלים אחרי השדרוג ל-MySQL 8.0 ואילך. מומלץ להשאיר את ערכי ברירת המחדל שמוקצים לסימוני המערכת.

המאמרים הבאים