פתרון בעיות

בדקו אם השאלה או הבעיה שלכם כבר קיבלו מענה באחד מהדפים הבאים:

הנושאים בדף הזה:

גיבוי ושחזור

שגיאה פתרון בעיות
אי אפשר לראות את הסטטוס של הפעולה הנוכחית. במסוף Google Cloud מדווח רק על הצלחה או כישלון בסיום הפעולה. הוא לא מיועד להצגת אזהרות או עדכונים אחרים.

מריצים את הפקודה gcloud sql operations list כדי להציג את כל הפעולות במכונה הנתונה של Cloud SQL.

אתם רוצים לגלות מי ביצע פעולת גיבוי על פי דרישה. בממשק המשתמש לא מוצג המשתמש שהתחיל את הפעולה.

מחפשים ביומנים ומסננים לפי טקסט כדי למצוא את המשתמש. יכול להיות שתצטרכו להשתמש ביומני ביקורת כדי לראות מידע פרטי. קובצי היומן הרלוונטיים כוללים:

  • cloudsql.googleapis.com/postgres.log
  • אם יומני הביקורת של Cloud מופעלים ויש לכם את ההרשאות הנדרשות כדי לצפות בהם, יכול להיות שגם cloudaudit.googleapis.com/activity זמין.
אחרי שמוחקים מכונה, אי אפשר לגבות אותה.

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

אם ביצעתם פעולת ייצוא, צרו מכונה חדשה ואז בצעו פעולת ייבוא כדי ליצור מחדש את מסד הנתונים. הייצוא נכתב ב-Cloud Storage והייבוא נקרא משם.

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

אם אתם ממש צריכים לבטל את הפעולה, אתם יכולים לבקש מ תמיכת הלקוחות force restart את המכונה.

פעולת שחזור יכולה להיכשל כשמשתמש אחד או יותר שמצוינים בקובץ ה-SQL המוכן לשימוש לא קיימים. לפני שמשחזרים קובץ dump של SQL, כל המשתמשים במסד הנתונים שיש בבעלותם אובייקטים או שקיבלו הרשאות לאובייקטים במסד הנתונים שהושלך חייבים להיות קיימים במסד הנתונים של היעד. אם אין להם את ההרשאות האלה, פעולת השחזור לא תצליח ליצור מחדש את האובייקטים עם הבעלות או ההרשאות המקוריות.

יוצרים את המשתמשים במסד הנתונים לפני שמשחזרים את ה-SQL dump.

אתם רוצים להגדיל את מספר הימים שבהם אפשר לשמור גיבויים אוטומטיים מ-7 ל-30 ימים, או יותר. אפשר להגדיר את מספר הגיבויים האוטומטיים שרוצים לשמור, מ-1 עד 365. גיבויים אוטומטיים נמחקים באופן קבוע על סמך ערך השמירה שהוגדר. לצערנו, זה אומר שהגיבויים שמוצגים כרגע הם הגיבויים האוטומטיים היחידים שאפשר לשחזר מהם.

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

גיבוי אוטומטי נכשל ולא קיבלתם התראה באימייל. כדי לקבל מ-Cloud SQL התראה על סטטוס הגיבוי, מגדירים התראה מבוססת-יומן.
גיבוי אוטומטי או גיבוי על פי דרישה נכשל במכונה עם יותר מ-50 תוויות שהוגדרו על ידי המשתמש. כש-Cloud SQL מבצע גיבוי, הוא מעתיק את התוויות שהמשתמשים הגדירו למכונה לתמונת המצב של האחסון הבסיסי, ומוסיף תוויות מערכת פנימיות. אם המספר הכולל של התוויות חורג מהמגבלה של 64 תוויות לכל קובץ snapshot, הגיבוי נכשל.

כדי לפתור את הבעיה, צריך להסיר תוויות עודפות כך שיהיו במכונה עד 50 תוויות שהוגדרו על ידי המשתמש. מידע נוסף זמין במאמר הוספת תוויות למכונות.

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

דברים שכדאי לנסות:

  1. מוודאים שמסד הנתונים מוגדר ל-autovacuum.
  2. בודקים אם יש לוגיקה של ניסיון חוזר להתחברות שמוגדרת בקוד בהתאמה אישית.
  3. מפחיתים את התנועה עד שמסד הנתונים מתאושש, ואז מגבירים אותה בהדרגה.
אתם מגלים שחסרים נתונים כשאתם מבצעים פעולת גיבוי או שחזור. הטבלאות נוצרו כלא מתועדות. לדוגמה:

CREATE UNLOGGED TABLE ....

הטבלאות הבאות לא נכללות בשחזור מגיבוי:

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

כדי לשחזר טבלאות באמצעות גיבוי, צריך להימנע משימוש בטבלאות שלא נרשמו ביומן. אם אתם משחזרים ממסד נתונים שכבר יש בו טבלאות לא מתועדות, אז אתם יכולים להעביר את מסד הנתונים לקובץ dump, ולטעון מחדש את הנתונים אחרי ששיניתם את הקובץ שהועבר מ-ALTER TABLE ל-SET LOGGED בטבלאות האלה.

אי אפשר למחוק מכונה כשבוחרים ליצור גיבוי סופי בזמן מחיקת המכונה. כשמוחקים מכונה, צריך לאשר אם רוצים ליצור גיבוי סופי של המכונה לפני המחיקה. אם הפעלתם את הגיבוי הסופי באמצעות הגדרת המכונה final-backup, הבחירה שתבצעו כשתמחקו את המכונה צריכה להתאים להגדרת המכונה של הגיבוי הסופי שקבעתם כשהפעלתם את הגיבוי הסופי למכונה. כדי לפתור את הבעיה, נסו אחד מהפתרונות הבאים:
  • מגדירים את ערך הגיבוי הסופי כך שיתאים להגדרות הגיבוי הקיימות של המכונה.
  • כשמוחקים את המכונה, משאירים את השדה של הגיבוי הסופי ריק. אם תשאירו את השדה ריק, Cloud SQL ישתמש בהגדרות הגיבוי הסופי שנקבעו בהגדרות המכונה כדי ליצור גיבוי סופי ולהגדיר את משך השמירה שלו.
כדי לראות את הגדרת המכונה של הגיבוי הסופי של המכונה, עיינו במאמר הצגת פרטי המכונה.
לא הצלחנו ליצור מכונה של רפליקה אחרי שיצרנו בהצלחה מכונה ראשית עם הגדרת הגיבוי הסופי. אם יוצרים מכונה חדשה כשההגדרה של מכונת הגיבוי הסופי מופעלת, צריך לעדכן את מדיניות הארגון של הגיבוי הסופי כדי להחיל את הגדרות הגיבוי על המכונה הראשית בלבד. אין תמיכה בגיבויים סופיים במכונות של רפליקות.
מידע נוסף זמין במאמר מדיניות הארגון ב-Cloud SQL.

ביטול הייבוא והייצוא

שגיאה פתרון בעיות
הודעת שגיאה: You can't cancel operation [operation-ID] because this operation isn't in progress.

אתם מנסים לבטל פעולת ייבוא או ייצוא שהושלמה, נכשלה או בוטלה. אם הפעולה פועלת, אפשר לבטל אותה.

הודעת שגיאה: You can't cancel operation [operation-ID] because Cloud SQL doesn't support the cancellation of an [operation-type] operation.

ב-Cloud SQL אי אפשר לבטל את הפעולה כי סוג הפעולה הוא לא IMPORT או EXPORT.

הודעת שגיאה: The [operation-type] operation isn't cancelled. Wait and retry in a few seconds.

‫Cloud SQL לא יכול לבטל את פעולת הייבוא או הייצוא כרגע. כדאי לנסות שוב בעוד כמה שניות. אם הבעיה נמשכת, אפשר לפנות Google Cloud לתמיכה.

שכפל

שגיאה פתרון בעיות
השכפול נכשל ומוצגת השגיאה constraints/sql.restrictAuthorizedNetworks. פעולת השכפול נחסמת על ידי ההגדרה Authorized Networks. Authorized Networks מוגדרים לכתובות IP ציבוריות בקטע Connectivity במסוף Google Cloud , ואי אפשר לשכפל בגלל שיקולי אבטחה.

אם אפשר, מסירים את כל הרשומות של Authorized Networks מהמכונה של Cloud SQL. אחרת, יוצרים רפליקה בלי רשומות Authorized Networks.

הודעת שגיאה: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

אתם מנסים להשתמש במסוף כדי לשכפל מכונה עם כתובת IP פרטית, אבל לא ציינתם את טווח ה-IP שהוקצה שבו אתם רוצים להשתמש, ומכונת המקור לא נוצרה עם הטווח שצוין. Google Cloud כתוצאה מכך, המכונה המשוכפלת נוצרת בטווח אקראי.

משתמשים ב-gcloud כדי לשכפל את המכונה ומספקים ערך לפרמטר
--allocated-ip-range-name. מידע נוסף זמין במאמר שכפול מכונה עם כתובת IP פרטית.

חיבור

שגיאה פתרון בעיות
Aborted connection. הבעיה יכולה להיות:
  • חוסר יציבות ברשת.
  • אין תגובה לפקודות TCP keep-alive (הלקוח או השרת לא מגיבים, אולי בגלל עומס יתר)
  • משך החיים של החיבור למנוע של מסד הנתונים חרג מהמגבלה, והשרת מסיים את החיבור.

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

כדי לנסות להתחבר מחדש, מומלץ להשתמש בשיטות הבאות:

  1. השהיה מעריכית לפני ניסיון חוזר (exponential backoff). להגדיל את מרווח הזמן בין כל ניסיון חוזר, באופן אקספוננציאלי.
  2. מוסיפים גם השהיה אקראית.

שילוב של השיטות האלה עוזר לצמצם את ההאטה.

הזמן הקצוב לתפוגה של החיבור או שגיאת חיבור כללית כשמשתמשים בכתובת IP פרטית או בקישור בין רשתות VPC שכנות (peering).

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

שלבים לפתרון בעיות:

  1. מריצים בדיקת קישוריות של Network Intelligence Center בין הלקוח במקור לבין כתובת ה-IP הפרטית של Cloud SQL ביציאה של מסד הנתונים (3306 ל-MySQL,‏ 5432 ל-PostgreSQL או 1433 ל-SQL Server). הבדיקה עוקבת אחרי נתיב החבילה ומזהה אם תעבורת הנתונים נדחתה בגלל כללים של חומת האש, נתיבים חסרים או הגדרות שגויות של קישור Peering.
  2. מוודאים שהסטטוס של החיבור בין רשתות VPC מקבילות הוא ACTIVE.
  3. מוודאים שכללי חומת האש ברשת ה-VPC מאפשרים תעבורת נתונים נכנסת (ingress) ביציאה של מסד הנתונים.
  4. אם אתם משתמשים בטווחי כתובות שהם לא RFC 1918, ודאו שעדכנתם את הגדרת הקישור בין רשתות שכנות (peering) כדי לייצא נתיבי רשתות משנה עם כתובת IP ציבורית.

לפרטים נוספים ולפקודות אבחון של gcloud, קראו את המאמר אבחון כשלים ברשת VPC ובקישור דרך IP פרטי.

הודעת שגיאה: Login failed for user "" יכול להיות שתיתקלו בשגיאת ההתחברות הזו במהלך אימות Microsoft Entra ID. כדי לפתור את הבעיה, ודאו שקיים פרטי התחברות ל-SQL Server למשתמש הזה ב-Microsoft Entra ID.
בעיות בקישוריות לרשת במכונות עם כתובת IP פרטית יכול להיות שתיתקלו בבעיות הבאות במהלך הגדרת השילוב:
  • פעולות איטיות ליצירת פרטי כניסה ל-Microsoft Entra ID
  • לא ניתן ליצור פרטי התחברות ל-Microsoft Entra ID
  • לא ניתן להתחבר למכונה באמצעות אימות של Microsoft Entra ID

במאמר פתרון בעיות בשילוב עם Microsoft Entra ID מוסבר איך לפתור את הבעיות האלה.

Certificate verify failed.

התוקף של אישורי הלקוח פג או שהנתיב לאישורים שגוי.

ליצור מחדש את האישורים.

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

החיבור למכונה של Cloud SQL באמצעות אימות של מסד נתונים ב-IAM נמשך כמה שניות או שנגמר הזמן הקצוב לתפוגה, בזמן שהחיבור באמצעות אימות מובנה של מסד נתונים מתבצע כרגיל.

הסיבה: המכונה משתמשת בסוג מכונה עם ליבה משותפת (db-f1-micro או db-g1-small). כשמגבילים את קצב ה-CPU, האימות של מסד הנתונים ב-IAM נמשך יותר זמן מאשר אימות סיסמה מובנה, כי הוא דורש יותר משאבי מחשוב.

פתרון:

מידע נוסף זמין במאמר ביצועים במכונות עם ליבת מעבד משותפת.

FATAL: database 'user' does not exist. ‫gcloud sql connect --user פועל רק עם משתמש ברירת המחדל של postgres.

מתחברים עם משתמש ברירת המחדל ואז מחליפים משתמש.

אתם רוצים לדעת מי מחובר. מתחברים למסד הנתונים ומריצים את הפקודה הבאה:

SELECT datname,
usename,
application_name as appname,
client_addr,
state,
now() - backend_start as conn_age,
now() - state_change as last_activity_age
FROM pg_stat_activity
WHERE backend_type = 'client backend'
ORDER BY 6 DESC
LIMIT 20
   

Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames.

כתובת המארח לא תואמת לכתובת בשמות החלופיים של אישור השרת.

אם אתם משתמשים ב-Node.js עם verify-full או המקבילה שלו, השתמשו בשם ה-DNS לפרמטר servername. אפשר למצוא את שם ה-DNS באישור השרת באמצעות openssl. לדוגמה, openssl x509 -in server-cert.pem -noout -text |grep 'DNS:'.

 ssl: {
  rejectUnauthorized: true,
  ca: fs.readFileSync("/path/to/server/CA"),
  servername: 'N-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx.us-central1.sql.goog'
}

יצירת מכונות

שגיאה פתרון בעיות
הודעת שגיאה: The zone or region does not have sufficient resources to handle the request at the moment.

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

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

הודעת שגיאה: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. אין יותר כתובות זמינות בטווח ה-IP שהוקצה. יכולים להיות כמה תרחישים אפשריים:
  • הגודל של טווח כתובות ה-IP שהוקצה לחיבור לשירות הפרטי קטן מ-‎ /24.
  • גודל טווח כתובות ה-IP שהוקצה לחיבור לשירות הפרטי קטן מדי למספר המכונות של Cloud SQL.
  • אם יוצרים מכונות בכמה אזורים, הדרישה לגבי הגודל של טווח כתובות ה-IP שמוקצה תהיה גדולה יותר. גודל הטווח שהוקצה

כדי לפתור את הבעיה, אתם יכולים להרחיב את טווח כתובות ה-IP שהוקצה או להקצות טווח כתובות IP נוסף לחיבור לשירות הפרטי. מידע נוסף זמין במאמר הקצאת טווח של כתובות IP.

אם השתמשתם בדגל --allocated-ip-range-name בזמן שיצרתם את המכונה של Cloud SQL, תוכלו להרחיב רק את טווח כתובות ה-IP שצוין.

אם אתם מקצים טווח חדש, חשוב לוודא שההקצאה לא חופפת להקצאות קיימות.

אחרי שיוצרים טווח כתובות IP חדש, מעדכנים את קישור ה-VPC השכנות באמצעות הפקודה הבאה:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
    

אם אתם מרחיבים הקצאה קיימת, הקפידו להגדיל רק את טווח ההקצאה ולא להקטין אותו. לדוגמה, אם ההקצאה המקורית הייתה ‎10.0.10.0/24, ההקצאה החדשה צריכה להיות לפחות ‎10.0.10.0/23.

באופן כללי, אם מתחילים מהקצאה של ‎ /24, כלל אצבע טוב הוא להפחית את ה-‎ /mask ב-1 לכל תנאי (קבוצה נוספת של סוגי מכונות, אזור נוסף). לדוגמה, אם מנסים ליצור את שתי קבוצות סוגי המכונות באותה הקצאה, מספיק לעבור מ-‎ /24 ל-‎ /23.

אחרי שמרחיבים טווח כתובות IP קיים, מעדכנים את הקישור בין רשתות ה-VPC באמצעות הפקודה הבאה:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID
    
הודעת שגיאה: Failed to create subnetwork. Router status is temporarily unavailable. Please try again later. Help Token: [token-ID]. מנסים ליצור שוב את המכונה של Cloud SQL.
הודעת שגיאה: HTTPError 400: Invalid request: Incorrect Service Networking config for instance: PROJECT_ID:INSTANCE_NAME:SERVICE_NETWORKING_NOT_ENABLED.

מפעילים את Service Networking API באמצעות הפקודה הבאה ומנסים ליצור שוב את המכונה של Cloud SQL.

gcloud services enable servicenetworking.googleapis.com \
--project=PROJECT_ID
    
הודעת שגיאה: Failed to create subnetwork. Required 'compute.projects.get' permission for PROJECT_ID. כשיוצרים מכונה באמצעות כתובת IP פרטית, נוצר חשבון שירות בזמן אמת באמצעות Service Networking API. אם הפעלתם את Service Networking API רק לאחרונה, יכול להיות שחשבון השירות לא ייווצר ויצירת המכונה תיכשל. במקרה כזה, צריך להמתין עד שחשבון השירות יופץ במערכת, או להוסיף אותו ידנית עם ההרשאות הנדרשות.
הודעת שגיאה: More than 3 subject alternative names are not allowed. אתם מנסים להשתמש ב-SAN בהתאמה אישית כדי להוסיף יותר משלושה שמות DNS לאישור השרת של מכונה ב-Cloud SQL. אי אפשר להוסיף למכונה יותר משלושה שמות DNS.
הודעת שגיאה: Subject alternative names %s is too long. The maximum length is 253 characters. חשוב לוודא ששמות ה-DNS שרוצים להוסיף לאישור השרת של מכונה ב-Cloud SQL לא מכילים יותר מ-253 תווים.
הודעת שגיאה: Subject alternative name %s is invalid.

מוודאים ששמות ה-DNS שרוצים להוסיף לאישור השרת של מכונה ב-Cloud SQL עומדים בקריטריונים הבאים:

  • הם לא מכילים תווים כלליים לחיפוש.
  • אין בהן נקודות בסוף.
  • הם עומדים במפרטים של RFC 1034.

הפעלת SQL באמצעות Data API

שגיאה פתרון בעיות
The instance doesn't allow using ExecuteSql to access this instance. You can allow it by patching the instance with {settings: { dataApiAccess: "ALLOW_DATA_API" }} ‫Data API מושבת כברירת מחדל. כדי לפתור את הבעיה, מפעילים את Data API במכונה.
Secret cannot be provided when auto_iam_authn is true. כשמגדירים את auto_iam_authn ל-true, מבצעים אימות למסד הנתונים באמצעות IAM. בשיטת האימות הזו לא נדרשת סיסמה או סוד. אימות באמצעות IAM
ExecuteSql API is not supported for instances in certain Assured Workloads control packages folders yet. יכול להיות שסקריפט ה-SQL והתגובה להפעלה שלו יעברו דרך מיקומי ביניים בין הלקוח לבין המיקום של מכונת היעד. לכן, בקשות ייכשלו במכונות בפרויקטים מסוימים של Assured Workloads. אם הפרויקט לא רשום ל-Assured Workloads אבל constraints/sql.restrictNoncompliantResourceCreation נאכף באופן ידני, צריך לבקש מהאדמין של הארגון להסיר את האילוץ, והבעיה תיפתר במכונות החדשות שייווצרו.
IAM authentication is not enabled for the instance כדי לפתור את הבעיה, מגדירים את המכונה לאימות IAM.
The database is currently unavailable. יכול להיות שהמכונה מופעלת מחדש, עוברת תחזוקה או במצב לא תקין. צריך לבדוק את הסטטוס של המכונה ולנסות שוב מאוחר יותר.

ייצוא

שגיאה פתרון בעיות
HTTP Error 409: Operation failed because another operation was already in progress. כבר יש פעולה בהמתנה למכונה. מותר לבצע פעולה אחת בלבד בכל פעם. כדאי לנסות לשלוח את הבקשה אחרי שהפעולה הנוכחית תסתיים.
HTTP Error 403: The service account does not have the required permissions for the bucket. כדי לאפשר ייצוא לקטגוריה, צריך לוודא שהקטגוריה קיימת ושלחשבון השירות של מכונת Cloud SQL (שמבצעת את הייצוא) יש את התפקיד Storage Object Creator (roles/storage.objectCreator). תפקידי IAM ל-Cloud Storage
הייצוא ל-CSV הצליח אבל הייצוא ל-SQL נכשל. יש הבדלים בייצוא של פורמטים מסוג CSV ו-SQL. בפורמט SQL, כל מסד הנתונים מיוצא, ולכן הייצוא עשוי להימשך זמן רב יותר. פורמט CSV מאפשר לכם להגדיר אילו רכיבים של מסד הנתונים ייכללו בייצוא.

ייצוא ל-CSV כדי לייצא רק את מה שצריך.

הייצוא נמשך יותר מדי זמן. ב-Cloud SQL אין תמיכה בפעולות סינכרוניות בו-זמניות.

להעביר את הייצוא ל-offload. ברמה הכללית, במקום להפעיל ייצוא במכונה המקורית, Cloud SQL מפעיל מכונה ייעודית לביצוע הייצוא. להעברת הייצוא יש כמה יתרונות, כולל שיפור הביצועים במכונה המקורית וביטול החסימה של פעולות ניהוליות בזמן שהייצוא פועל. כשמשתמשים ב-export offloading, זמן האחזור הכולל יכול לגדול במשך הזמן שלוקח להעלות את המכונה של ה-offload. בדרך כלל, בייצוא של נתונים בנפח סביר, זמן האחזור לא משמעותי. עם זאת, אם הייצוא קטן מספיק, יכול להיות שתבחינו בעלייה בזמן האחזור.

שגיאה ביצירת התוסף. קובץ ה-dump מכיל הפניות לתוסף לא נתמך.

עורכים את קובץ ה-dump כדי להסיר את ההפניות.

שגיאה בשימוש ב-pg_dumpall. כדי להשתמש בכלי pg_dumpall עם הדגל --global צריך את התפקיד "משתמש-על", אבל התפקיד הזה לא נתמך ב-Cloud SQL ל-PostgreSQL. כדי למנוע שגיאות במהלך פעולות ייצוא שכוללות שמות משתמשים, צריך להשתמש גם בדגל --no-role-passwords.
פעולת הייצוא מסתיימת לפני שמתבצע ייצוא, ומופיעה הודעת השגיאה Could not receive data from client: Connection reset by peer.. אם Cloud Storage לא מקבל נתונים בפרק זמן מסוים, בדרך כלל כ-7 דקות, החיבור מתאפס. יכול להיות שהרצת השאילתה הראשונית של הייצוא נמשכת יותר מדי זמן.

מבצעים ייצוא ידני באמצעות הכלי pg_dump.

אתם רוצים שהייצוא יתבצע באופן אוטומטי. ב-Cloud SQL אין דרך להפוך את הייצוא לאוטומטי.

אתם יכולים ליצור מערכת ייצוא אוטומטית משלכם באמצעות מוצרי Google Cloudכמו Cloud Scheduler,‏ Pub/Sub ופונקציות Cloud Run, בדומה למאמר הזה בנושא אוטומציה של גיבויים.

דגלים

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

מתחברים למסד הנתונים ומגדירים את אזור הזמן של מסד הנתונים לאזור הזמן הרצוי, לכל משתמש או לכל מסד נתונים.

ב-Cloud SQL ל-PostgreSQL, אפשר לציין את הפרטים הבאים. ההגדרות האלה נשמרות אחרי שסוגרים את הסשן, בדומה להגדרה של .conf:

ALTER DATABASE dbname SET TIMEZONE TO 'timezone';
ALTER USER username SET TIMEZONE TO 'timezone';

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

זמינות גבוהה

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

עורכים את המכונה כדי לשדרג למכונה גדולה יותר עם יותר מעבדי CPU וזיכרון.

ייבוא

שגיאה פתרון בעיות
הודעת שגיאה: permission denied for schema public בגרסאות 15 ואילך של PostgreSQL, אם מסד הנתונים של היעד נוצר מ-template0, יכול להיות שייבוא הנתונים ייכשל. כדי לפתור את הבעיה, צריך להריץ את פקודת ה-SQL‏ GRANT ALL ON SCHEMA public TO cloudsqlsuperuser כדי לתת למשתמש cloudsqlsuperuser הרשאות לסכימה ציבורית.
HTTP Error 409: Operation failed because another operation was already in progress. כבר יש פעולה בהמתנה למכונה. מותר לבצע פעולה אחת בלבד בכל פעם. כדאי לנסות לשלוח את הבקשה אחרי שהפעולה הנוכחית תסתיים.
פעולת הייבוא נמשכת יותר מדי זמן. יותר מדי חיבורים פעילים יכולים להפריע לפעולות הייבוא.

סוגרים פעולות שלא בשימוש. בודקים את המעבד (CPU) ואת השימוש בזיכרון במכונת Cloud SQL, כדי לוודא שיש מספיק משאבים זמינים. הדרך הטובה ביותר לוודא שמשימת הייבוא מקבלת את מרב המשאבים היא להפעיל מחדש את המכונה לפני התחלת הפעולה.

הפעלה מחדש:

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

יוצרים את משתמשי מסד הנתונים לפני הייבוא.

אחרי שמייבאים נתונים, השימוש בדיסק הנתונים גדל באופן משמעותי.

יכול להיות שיהיה שימוש לא צפוי בדיסק אחרי ייבוא הנתונים. יכול להיות שהשימוש הזה נובע משימוש בשחזור מערכת מנקודה מסוימת בזמן (PITR).

כדי לפתור את הבעיה, אחרי שמייבאים נתונים, משביתים את האפשרות "שחזור מערכת מנקודה מסוימת בזמן (PITR)" אם רוצים למחוק יומנים ולפנות נפח אחסון. חשוב לזכור שהקטנת נפח האחסון שבשימוש לא מקטינה את נפח האחסון שהוקצה למכונה.

הודעת שגיאה: GRANT stderr: ERROR: must be member of role ROLE_NAME

הודעת השגיאה הזו מופיעה אם מנסים לייבא קובץ SQL מוכן לשימוש שהועלה ב-Cloud Storage למסד נתונים של Cloud SQL, ומשימת הייבוא פועלת במשך כארבעה ימים.

‫ROLE_NAME הוא תפקיד מותאם אישית במסד הנתונים, שמוגדר במסד הנתונים של PostgreSQL במקור. משתמש ברירת המחדל cloudsqlsuperuser מייבא את קובץ ה-SQL המוכן לשימוש. עם זאת, יכול להיות שהמשתמש הזה לא שייך לתפקיד ROLE_NAME.

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

  1. יוצרים את התפקיד ROLE_NAME במסד הנתונים של היעד שאליו מייבאים את קובץ ה-SQL המוכן לשימוש.
  2. אל תשתמשו במשתמש cloudsqlsuperuser כדי לייבא את הקובץ. במקום זאת, במסד הנתונים של היעד, ציינו משתמש שמשויך לתפקיד ROLE_NAME. כדי לציין את המשתמש, מריצים את הפקודה הבאה:

    gcloud sql import sql INSTANCE URI [--async]
    [--database=DATABASE, -d DATABASE] [--user=USER] [GCLOUD_WIDE_FLAG …]

שילוב עם Vertex AI

שגיאה פתרון בעיות
הודעת שגיאה: Google ML integration API is supported only on Postgres version 12 or above. כדי להפעיל את השילוב של Vertex AI ב-Cloud SQL, צריך מסד נתונים של Cloud SQL ל-PostgreSQL בגרסה 12 ואילך. כדי לשדרג את מסד הנתונים לגרסה הזו, קראו את המאמר שדרוג הגרסה הראשית של מסד הנתונים במקום.
הודעת שגיאה: Google ML Integration API is not supported on shared core instance. Please upsize your machine type. אם בחרתם בליבת מעבד משותפת לסוג המכונה של המכונה שלכם, אתם לא יכולים להפעיל את השילוב של Vertex AI ב-Cloud SQL. לשדרג את סוג המכונה לליבה ייעודית. מידע נוסף זמין במאמר בנושא סוג מכונה.
הודעת שגיאה: Google ML Integration is unsupported for this maintenance version. Please follow https://cloud.google.com/sql/docs/postgres/self-service-maintenance to update the maintenance version of the instance. כדי להפעיל את השילוב של Vertex AI ב-Cloud SQL, גרסת התחזוקה של המכונה צריכה להיות R20240130 ואילך. כדי לשדרג את המכונה לגרסה הזו, קראו את המאמר תחזוקה בשירות עצמי.
הודעת שגיאה: Cannot invoke ml_predict_row if 'cloudsql.enable_google_ml_integration' is off. הדגל לניהול מסד הנתונים cloudsql.enable_google_ml_integration מושבת. Cloud SQL לא יכול להשתלב עם Vertex AI.

כדי להפעיל את הדגל הזה, משתמשים בפקודה gcloud sql instances patch:

gcloud sql instances patch INSTANCE_NAME --database-flags cloudsql.enable_google_ml_integration=on

מחליפים את INSTANCE_NAME בשם של מכונת Cloud SQL הראשית.
הודעת שגיאה: Failed to connect to remote host: Connection refused. השילוב בין Cloud SQL ל-Vertex AI לא מופעל. כדי להפעיל את השילוב הזה, משתמשים בפקודה gcloud sql instances patch:

gcloud sql instances patch INSTANCE_NAME
--enable-google-ml-integration


מחליפים את INSTANCE_NAME בשם של המכונה הראשית של Cloud SQL.
הודעת שגיאה: Vertex AI API has not been used in project PROJECT_ID before or it is disabled. Enable it by visiting /apis/api/aiplatform.googleapis.com/overview?project=PROJECT_ID then retry. ‫Vertex AI API לא מופעל. מידע נוסף על הפעלת ה-API הזה זמין במאמר הפעלת שילוב של מסד נתונים עם Vertex AI.
הודעת שגיאה: Permission 'aiplatform.endpoints.predict' denied on resource. הרשאות Vertex AI לא נוספו לחשבון השירות של Cloud SQL בפרויקט שבו נמצאת המכונה של Cloud SQL. מידע נוסף על הוספת ההרשאות האלה לחשבון השירות זמין במאמר מתן הרשאות של ניהול זהויות והרשאות גישה (IAM) לחשבון השירות של Cloud SQL כדי לגשת ל-Vertex AI.
הודעת שגיאה: Publisher Model `projects/PROJECT_ID/locations/REGION_NAME/publishers/google/models/MODEL_NAME` not found. מודל למידת המכונה או ה-LLM לא קיימים ב-Vertex AI.
הודעת שגיאה: Resource exhausted: grpc: received message larger than max. גודל הבקשה ש-Cloud SQL מעביר ל-Vertex AI חורג מהמגבלה של gRPC, שהיא 4MB לכל בקשה.
הודעת שגיאה: Cloud SQL attempts to send a request to Vertex AI. However, the instance is in the %s region, but the Vertex AI endpoint is in the %s region. Make sure the instance and endpoint are in the same region. ‫Cloud SQL מנסה לשלוח בקשה ל-Vertex AI. עם זאת, המכונה נמצאת באזור אחד, אבל נקודת הקצה של Vertex AI נמצאת באזור אחר. כדי לפתור את הבעיה, המכונה ונקודת הקצה צריכות להיות באותו אזור.
הודעת שגיאה: The Vertex AI endpoint isn't formatted properly. הפורמט של נקודת הקצה של Vertex AI לא תקין. מידע נוסף זמין במאמר שימוש בנקודות קצה פרטיות לחיזוי אונליין.
הודעת שגיאה: Quota exceeded for aiplatform.googleapis.com/online_prediction_requests_per_base_model with base model: textembedding-gecko. מספר הבקשות ש-Cloud SQL מעביר ל-Vertex AI חורג מהמגבלה של 1,500 בקשות לדקה לכל אזור, לכל מודל ולכל פרויקט.

רישום ביומן

שגיאה פתרון בעיות
רישום ביומן צורך הרבה מעבד (CPU) וזיכרון במכונת Cloud SQL. צריך לכוונן את הרישום ביומן.

אפשר להגדיר את הדגל log_statement ל-none ואת הדגל logging_collector ל-off. אם עדיין מתבצע רישום ביומן, יכול להיות שיש דגלים אחרים שקשורים ליומן שאפשר לשנות. כדי לשנות את הדגלים האלה, אפשר לערוך את המכונה.

לא נמצאו יומני ביקורת. יומני Data Access נכתבים רק אם הפעולה היא קריאה מאומתת ל-API שמונעת על ידי משתמש, שיוצרת, משנה או קוראת נתונים שנוצרו על ידי משתמשים, או אם הפעולה ניגשת לקובצי תצורה או למטא-נתונים של משאבים.
מידע על הפעולות לא נמצא ביומנים. אתם רוצים לקבל מידע נוסף על פעולה מסוימת.

לדוגמה, משתמש נמחק אבל אתם לא מצליחים לגלות מי מחק אותו. ביומנים מוצג שהפעולה התחילה, אבל אין מידע נוסף. כדי שפרטים מזהים אישיים (PII) ופרטים נוספים יתועדו, צריך להפעיל את יומני הביקורת.

קשה לקרוא קובצי יומן. אתם מעדיפים להציג את היומנים כקובץ JSON או כטקסט.אתם יכולים להשתמש בפקודה gcloud logging read יחד עם פקודות עיבוד ב-Linux כדי להוריד את היומנים.

כדי להוריד את היומנים כקובץ JSON:

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d" \
> downloaded-log.json
    

כדי להוריד את היומנים כקובץ TEXT:

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d"| jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) \
| .textPayload' \
--order=asc
> downloaded-log.txt
   
יומני השאילתות לא נמצאים ביומנים של PostgreSQL. צריך להפעיל את הדגלים של pgaudit.
  1. מתחברים למסד הנתונים מהטרמינל:
    gcloud sql connect INSTANCE_NAME
          
  2. מריצים את הפקודה הבאה כדי ליצור את התוסף:
    CREATE EXTENSION pgaudit;
          
  3. יוצאים ממסד הנתונים ומריצים את הפקודה הבאה מהטרמינל:
    gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.enable_pgaudit=on,pgaudit.log=all
         

ניהול מופעים

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

אפשר לראות פירוט של השימוש בדיסק של המכונה לפי סוג הנתונים באמצעות המדד cloudsql.googleapis.com/database/disk/bytes_used_by_data_type בMetrics Explorer או התרשים Disk storage by type בלוח הבקרה System insights.

דברים שכדאי לנסות:

  • ב-Cloud SQL ל-PostgreSQL, המדד database/disk/bytes_used_by_data_type מפרט את נפח האחסון הנדרש שמשמש את Data,‏ Wal (יומני כתיבה מראש),‏ Archived_wal_log (יומני כתיבה מראש שהועברו לארכיון כשיומני שחזור מערכת מנקודה מסוימת בזמן (PITR) מאוחסנים בדיסק),‏ Tmp_data,‏ Audit_log,‏ Replication_slot ו-Other.
  • כדי לבדוק את הגודל של כל מסד נתונים במכונה של Cloud SQL ל-PostgreSQL, מתחברים למסד הנתונים ומריצים את השאילתה הבאה: SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;
  • כדי לבדוק אם יומני השחזור מנקודה מסוימת בזמן (PITR) מאוחסנים בדיסק או ב-Cloud Storage, קראו את המאמר בדיקת מיקום האחסון של יומני העסקאות שמשמשים ל-PITR.
אתם רוצים לברר אילו שאילתות פועלות עכשיו. מתחברים למסד הנתונים ומריצים את השאילתה הבאה:

SELECT datname, username, application_name as appname, client_addr, state, now() - backend_start as conn_age, now() - xact_start as xact_age, now() - query_start as query_age, now() - state_change as last_activity_age, wait_event_type, wait_event, query FROM pg_stat_activity WHERE state <> 'idle' ORDER BY 8 DESC LIMIT 20;

אתם רוצים לברר באילו יחידות משתמשים בשדה ספציפי. מתחברים למסד הנתונים ומריצים את השאילתה הבאה (עם FIELD_NAME משלכם):

SELECT name, setting, unit FROM pg_settings WHERE name = 'FIELD_NAME'.

אתם רוצים למצוא את הערך הנוכחי של הגדרה במסד נתונים. מתחברים למסד הנתונים ומריצים את השאילתה הבאה (באמצעות SETTING_NAME משלכם):

SHOW SETTING_NAME;

מריצים את SHOW ALL; כדי לראות את כל ההגדרות.

אתם רוצים להפסיק תהליך ברקע חסום. למשתמש צריך להיות התפקיד pg_signal_backend.

מריצים את הפקודות הבאות:

  1.       GRANT pg_signal_backend TO USERNAME;
          
  2. מוצאים את מזהה התהליך של התהליך החסום או התקוע:
          SELECT pid, username, state, query FROM pg_stat_activity;
          
  3. כדי לעצור תהליך שפועל או לא פעיל, משתמשים בפקודות הבאות:
          SELECT pg_cancel_backend(pid)
                FROM pg_stat_activity
                WHERE username = 'USERNAME';
          
          
          SELECT pg_terminate_backend(pid)
                FROM pg_stat_activity
                WHERE username = 'USERNAME';
          
          
המופע קרוב ל-100% צריכה של מזהי עסקאות. מערכת המעקב הפנימית שלכם מתריעה שהמכונה מתקרבת ל-100% צריכה של מזהי עסקאות. כדאי להימנע מ-transaction wraparound, שעלול לחסום כתיבות.

יכול להיות שמשימת ה-autovacuum חסומה, או שהיא לא מחזירה את מזהי העסקאות מספיק מהר כדי לעמוד בעומס העבודה.

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

אם אתם רוצים עצות כלליות לכוונון, תוכלו להיעזר במאמר אופטימיזציה, מעקב ופתרון בעיות של פעולות vacuum ב-PostgreSQL.

נפח האחסון הזמני הגדיל את נפח האחסון האוטומטי. האחסון האוטומטי מופעל.

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

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

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

אי אפשר למחוק את המכונה. יכול להיות שתופיע הודעת השגיאה ERROR: (gcloud.sql.instances.delete) HTTP Error 409: The instance or operation is not in an appropriate state to handle the request, או שהמכונה תהיה בסטטוס INSTANCE_RISKY_FLAG_CONFIG.

הנה כמה הסברים אפשריים:

  • מתבצעת כרגע פעולה אחרת. פעולות ב-Cloud SQL לא פועלות בו-זמנית. צריך להמתין עד שהפעולה השנייה תסתיים.
  • האזהרה INSTANCE_RISKY_FLAG_CONFIG מופעלת בכל פעם שנעשה שימוש בדגל beta אחד לפחות. מסירים את הגדרות הדגלים המסוכנים ומפעילים מחדש את המכונה.
המכונה תקועה בגלל גודל גדול של נתונים זמניים. המערכת יכולה ליצור הרבה טבלאות זמניות בו-זמנית, בהתאם לשאילתות ולעומס.

לצערנו, הדרך היחידה לכווץ את הקובץ ibtmp1 היא להפעיל מחדש את השירות.

אפשרות אחת להפחתת הסיכון היא ליצור את הטבלה הזמנית באמצעות ROW_FORMAT=COMPRESSED, כדי שהיא תאוחסן במרחבי טבלאות מסוג file-per-table בספריית הקבצים הזמניים. עם זאת, החיסרון הוא עלויות הביצועים שקשורות ליצירה ולהסרה של מרחב טבלאות מסוג file-per-table לכל טבלה זמנית.

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

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

המכונה הראשית המקומית תקועה. ‫Google Cloud לא יכול לעזור עם מכונות שלא נמצאות ב-Cloud SQL.
כיבוי איטי בהפעלה מחדש. כשמכונה מושבתת, כל החיבורים הפעילים שלא מסתיימים תוך 60 שניות גורמים להשבתה לא נקייה.

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

אי אפשר למחוק משתמש. כנראה שיש למשתמש אובייקטים במסד הנתונים שתלויים בו. צריך להסיר את האובייקטים האלה או להקצות אותם מחדש למשתמש אחר.

צריך לבדוק אילו אובייקטים תלויים במשתמש, ואז להסיר את האובייקטים האלה או להקצות אותם מחדש למשתמש אחר.

בשרשור הזה ב-Stack Exchange מוסבר איך למצוא את האובייקטים שבבעלות המשתמש.
שאילתות מסוימות פועלות לאט. יש הרבה סיבות לכך ששאילתות יכולות להיות איטיות, בעיקר בגלל היבטים ספציפיים של מסד הנתונים. אחת מהסיבות שקשורות ל-Cloud SQL היא זמן אחזור ברשת, כשמשאב המקור (הכותב או הקורא) ומשאב היעד (Cloud SQL) נמצאים באזורים שונים.

כדאי לעיין במיוחד ב טיפים הכלליים לשיפור הביצועים.

אם פעולות ההוספה, העדכון או המחיקה של מסד הנתונים איטיות, כדאי לבצע את הפעולות הבאות:

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

כדי לצמצם את זמן האחזור, מומלץ למקם את משאבי המקור והיעד באותו אזור.

יש אינדיקציה ל-אין זיכרון פנוי (OOM), אבל היא לא מופיעה בתרשימי המעקב. יכול להיות שמכונה תיכשל ותדווח על Out of memory, אבל בתרשימים של מסוף Google Cloud או של Cloud Monitoring נראה שעדיין נשאר זיכרון.

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

חשוב לוודא שיש למכונה מספיק תקורה כדי להתחשב בעומס העבודה, בתוספת תקורה נוספת.

שחזור של מכונה שנמחקה. כל הנתונים במכונה, כולל הגיבויים, נמחקים לתמיד כשמוחקים את המכונה.

כדי לשמור את הנתונים, צריך לייצא אותם ל-Cloud Storage לפני ש מוחקים מכונה.

התפקיד "אדמין ב-Cloud SQL" כולל את ההרשאה למחוק את המכונה. כדי למנוע מחיקה בטעות, כדאי להקצות את התפקיד הזה רק לפי הצורך.

אתם רוצים לשנות את השם של מכונה קיימת ב-Cloud SQL. אי אפשר לשנות את השם של מכונה קיימת.

יש דרכים אחרות להשיג את המטרה על ידי יצירת מכונה חדשה.

  • אפשר לשכפל את המכונה שרוצים לשנות את השם שלה, ולהגדיר שם חדש למכונה המשוכפלת. כך אפשר ליצור את המכונה החדשה בלי לייבא נתונים באופן ידני. כמו ביצירת מכונה חדשה, למכונה המשוכפלת יש כתובת IP חדשה.
  • אפשר לייצא נתונים מהמכונה לקטגוריה של Cloud Storage, ליצור מכונה חדשה עם השם החדש שרוצים ואז לייבא את הנתונים למכונה החדשה.

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

שגיאה במחיקת מופע. אם ההגנה מפני מחיקה מופעלת במכונה, צריך לאשר את התוכניות למחיקת המכונה. ואז להשבית את ההגנה מפני מחיקה לפני שמוחקים את המכונה.
הודעת שגיאה: 429 Too Many Requests (rateLimitExceeded). יכול להיות שתקבלו את השגיאה 429 Too Many Requests ב-HTTP עם הסיבה rateLimitExceeded כשאפליקציה או חשבון שירות חורגים מהמכסה לקצב הגשת הבקשות לכל משתמש ב-Cloud SQL Admin API. מכסות לקצב הגשת בקשות נאכפות לדקה, למשתמש ולאזור, ולכן יכול להיות שמדדי המכסות המצטברים ברמת הפרויקט בדף Cloud Quotas במסוף Google Cloud לא יראו ניצול מלא של המכסה.

כדי לאבחן איזה משתמש או חשבון שירות ממצה את הגבלת קצב של יצירת בקשות לכל משתמש:

  1. במסוף Google Cloud , בוחרים את הפרויקט הצרכני שממנו נשלחות הבקשות, ואז נכנסים לדף Metrics Explorer.
  2. לוחצים על Select a metric ומזינים serviceruntime.googleapis.com/api/request_count בסרגל הסינון. בתפריטי המשנה, בוחרים באפשרות Consumed API > Api > Request count ולוחצים על Apply.
  3. ברכיב Filter, לוחצים על Add filter, בוחרים באפשרות response_code, משאירים את Comparator מוגדר ל-= (equals), מזינים 429 בשדה Value ולוחצים על Apply.
  4. לוחצים שוב על הוספת מסנן, בוחרים באפשרות service (מזינים sqladmin.googleapis.com בשדה ערך) או באפשרות method (לדוגמה, מזינים google.cloud.sql.v1.SqlInstancesService.Get בשדה ערך) ואז לוחצים על אישור.
  5. ברכיב Aggregation, מוודאים שהתפריט הראשון מוגדר ל-Sum, ובתפריט השני (לצד by) בוחרים באפשרות credential_id כדי לקבץ את הבקשות לפי פרטי כניסה ספציפיים.
  6. בתוצאות, מחפשים את מזהה פרטי הכניסה (credential_id) עם המספר הגבוה ביותר של תגובות 429. הערך הזה הוא מזהה הלקוח ב-OAuth 2.0 של חשבון השירות או של פרטי הכניסה של המשתמש שמנצל את מגבלת הקצב לכל משתמש.
  7. במסוף Google Cloud , נכנסים לדף Service accounts ומחפשים את מזהה הלקוח ב-OAuth 2.0 שתואם למזהה פרטי הכניסה. הרשומה התואמת היא חשבון השירות שממצה את הגבלת קצב של יצירת בקשות לכל משתמש.

כדי לפתור את השגיאה, מטמיעים באפליקציה שמירת נתונים במטמון בצד הלקוח או השהיה מעריכית לפני ניסיון חוזר (exponential backoff), מפזרים את עומסי העבודה בין חשבונות שירות שונים או מבקשים לשנות את המכסה. מידע נוסף זמין במאמר פתרון בעיות שקשורות לשגיאות במגבלת הקצב.

התחברות לשירות פרטי

שגיאה פתרון בעיות
החיבור לשירות של המכונה לא מקבל את נקודת הקצה של Private Service Connect.
  1. בודקים את הסטטוס של נקודת הקצה.

    gcloud

    כדי לבדוק את הסטטוס, משתמשים בפקודה
    gcloud compute forwarding-rules describe.

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    | grep pscConnectionStatus

    מחליפים את הפרטים הבאים:

    • ‫ENDPOINT_NAME: השם של נקודת הקצה
    • ‫PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את נקודת הקצה (endpoint)
    • ‫REGION_NAME: שם האזור של נקודת הקצה (endpoint)

    REST

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את נקודת הקצה של Private Service Connect
    • ‫REGION_NAME: שם האזור
    • ‫ENDPOINT_NAME: השם של נקודת הקצה

    ה-method של ה-HTTP וכתובת ה-URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    {
      "kind": "compute#forwardingRule",
      "id": "ENDPOINT_ID",
      "creationTimestamp": "2024-05-09T12:03:21.383-07:00",
      "name": "ENDPOINT_NAME",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "IPAddress": "IP_ADDRESS",
      "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
      "serviceDirectoryRegistrations": [
        {
          "namespace": "goog-psc-default"
        }
      ],
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "fingerprint": "FINGERPRINT_ID",
      "pscConnectionId": "CONNECTION_ID",
      "pscConnectionStatus": "ACCEPTED",
      "allowPscGlobalAccess": true
    }
    
  2. מוודאים שהסטטוס של נקודת הקצה הוא ACCEPTED. אם הסטטוס הוא PENDING, המכונה לא מאפשרת לפרויקט Google Cloud שמכיל את נקודת הקצה. חשוב לוודא שפרויקט הרשת שבו נוצרה נקודת הקצה מורשה. מידע נוסף זמין במאמר עריכת מכון עם Private Service Connect מופעל.
ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: The resource 'projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME' was not found הודעת השגיאה הזו יכולה להופיע כששומרים כתובת IP פנימית סטטית לנקודת הקצה של Private Service Connect. מוודאים שרשת המשנה שצוינה קיימת בפרויקט שצוין ב-URI. אם רוצים ליצור נקודת קצה בפרויקט שירות אבל להשתמש ברשת משנה מ-VPC משותף, צריך לציין את רשת המשנה לפי ה-URI שלה ולהשתמש במזהה הפרויקט של הפרויקט המארח ב-URI. מידע נוסף זמין במאמר יצירת נקודת הקצה באופן ידני.
ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: - The resource 'projects/PROJECT_ID/global/networks/NETWORK_NAME' was not found הודעת השגיאה הזו יכולה להופיע כשיוצרים נקודת קצה (endpoint) של Private Service Connect באופן ידני. חשוב לוודא שהרשת שצוינה קיימת בפרויקט שצוין ב-URI. אם רוצים ליצור נקודת קצה בפרויקט שירות אבל להשתמש ברשת VPC משותפת, צריך לציין את הרשת לפי ה-URI שלה ולהשתמש במזהה הפרויקט של הפרויקט המארח ב-URI. מידע נוסף זמין במאמר יצירת נקודת הקצה באופן ידני.
Invalid consumer network status for PSC auto connection.

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

  • ‫CONNECTION_POLICY_MISSING: אין מדיניות תואמת לחיבור לשירות ברשת הצרכן. כללי מדיניות של חיבורי שירות מוגדרים לפי רשת ולפי אזור. כדי להגדיר מחדש את הרשת, קראו את המאמר עדכון מדיניות החיבור לשירות.
  • ‫CONSUMER_INSTANCE_PROJECT_NOT_ALLOWLISTED: יש מדיניות תואמת לחיבור לשירות, אבל השדה Service instance scope במדיניות לא מוגדר לאפשר חיבור למכונה הזו של Cloud SQL. מעדכנים את המדיניות כדי להגדיר את הערך של השדה Service instance scope ‏(--producer-instance-location) עם הפרויקט, התיקייה או הארגון שבהם נמצא המכונה של Cloud SQL. כדי להגדיר מחדש את מדיניות החיבור לשירות, קראו את המאמר עדכון מדיניות החיבור לשירות.
  • ‫POLICY_LIMIT_REACHED: מדיניות החיבור לשירות הגיעה למגבלת נקודות הקצה שלה. כדי לפתור את הבעיה, צריך להגדיל את מגבלת נקודות הקצה על ידי עדכון המדיניות של חיבורי השירות.
No permission to create a service connection policy.

אין לכם את ההרשאות הנדרשות כדי ליצור מדיניות חיבור לשירות. כדי ליצור מדיניות חיבור לשירות, צריך את התפקיד Compute Network Admin IAM. למידע נוסף, קראו את המאמר תפקידים והרשאות.

אי אפשר לקבל חיבורים מממשק Private Service Connect כשמשתמשים בקישוריות יוצאת של Private Service Connect.

אם הרשת החיצונית לא יכולה לקבל חיבורים מהממשק של Private Service Connect, יכול להיות שכללי המדיניות של החיבורים במחבר הרשת לא מוגדרים נכון.

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

כדי לאמת את החיבורים שאושרו במחבר הרשת, משתמשים בפקודה הבאה:

    gcloud compute network-attachments describe default
    --region=REGION_ID
    

אם הממשק של Private Service Connect לא נמצא ברשימת הממשקים שאושרו, מעדכנים את מחבר הרשת. מידע נוסף זמין במאמר ניהול של חיבורי רשת.

רפליקציה

שגיאה פתרון בעיות
הרפליקה לקריאה בלבד לא התחילה לשכפל בזמן היצירה. סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.
אי אפשר ליצור עותק לקריאה בלבד – שגיאת invalidFlagValue. אחד מהדגלים בבקשה לא תקין. זה יכול להיות דגל שציינתם במפורש או דגל שהוגדר לערך ברירת מחדל.

קודם כל, בודקים שהערך של הדגל max_connections גדול מהערך בשרת הראשי או שווה לו.

אם הדגל max_connections מוגדר כראוי, בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.

לא ניתן ליצור עותק לקריאה בלבד – שגיאה לא ידועה. סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.

אם השגיאה היא set Service Networking service account as servicenetworking.serviceAgent role on consumer project, אפשר ליצור ידנית את חשבון השירות הנדרש לפי ההוראות במאמר יצירה והקצאה של תפקידים לסוכני שירות.

הדיסק מלא. גודל הדיסק של המכונה הראשית יכול להתמלא במהלך יצירת הרפליקה. עורכים את המכונה הראשית כדי לשדרג אותה לגודל דיסק גדול יותר.
המקום בכונן גדל באופן משמעותי. אם יש משבצת שלא משמשת באופן פעיל למעקב אחרי נתונים, PostgreSQL שומר את מקטעי ה-WAL ללא הגבלת זמן, וכך המקום בכונן גדל ללא הגבלת זמן. אם אתם משתמשים בתכונות שכפול לוגי ופענוח ב-Cloud SQL, משבצות השכפול נוצרות ומוסרות באופן אוטומטי. כדי לזהות משבצות רפליקציה שלא בשימוש, אפשר לשלוח שאילתה לתצוגת המערכת pg_replication_slots ולסנן לפי העמודה active. אפשר להסיר משבצות שלא בשימוש כדי להסיר מקטעי WAL באמצעות הפקודה pg_drop_replication_slot.
מופע הרפליקה משתמש ביותר מדי זיכרון. הרפליקה משתמשת בזיכרון זמני כדי לשמור במטמון פעולות קריאה שמתבצעות לעיתים קרובות, מה שעלול לגרום לה להשתמש ביותר זיכרון מאשר המכונה הראשית.

מפעילים מחדש את מכונת הרפליקה כדי לפנות את שטח הזיכרון הזמני.

השכפול הופסק. הגעתם למגבלת האחסון המקסימלית וההגדלה האוטומטית של נפח האחסון לא מופעלת.

עורכים את המכונה כדי להפעיל את automatic storage increase.

השהיית השכפול גבוהה באופן עקבי. עומס הכתיבה גבוה מדי והרפליקה לא יכולה לטפל בו. השהיית שכפול מתרחשת כשה-SQL thread ברפליקה לא מצליח לעמוד בקצב של ה-IO thread. סוגים מסוימים של שאילתות או עומסי עבודה יכולים לגרום לעיכוב זמני או קבוע בשכפול של סכימה מסוימת. חלק מהסיבות הנפוצות לעיכוב ברפליקציה:
  • שאילתות איטיות ברפליקה. צריך למצוא ולתקן אותן.
  • בכל הטבלאות צריך להיות מפתח ראשי או ייחודי. כל עדכון בטבלה כזו בלי מפתח ייחודי או ראשי גורם לסריקות מלאות של הטבלה ברפליקה.
  • שאילתות כמו DELETE ... WHERE field < 50000000 גורמות לעיכוב ברפליקציה עם רפליקציה מבוססת-שורות, כי מספר עצום של עדכונים נערמים ברפליקה.

פתרונות אפשריים:

  • עורכים את המכונה כדי להגדיל את הרפליקה.
  • להפחית את העומס על מסד הנתונים.
  • שליחת תנועת קריאה לרפליקת הקריאה.
  • מוסיפים את הטבלאות לאינדקס.
  • זיהוי ותיקון של שאילתות כתיבה איטיות.
  • יוצרים מחדש את הרפליקה.
שגיאות במהלך בנייה מחדש של אינדקסים ב-PostgreSQL 9.6. קיבלתם הודעת שגיאה מ-PostgreSQL שבה כתוב שצריך לבנות מחדש אינדקס מסוים. אפשר לעשות את זה רק במכונה הראשית. אם תיצרו מכונת רפליקה חדשה, תקבלו שוב את אותה הודעת שגיאה. בגרסאות PostgreSQL שמתחת ל-10, אינדקסים של גיבוב (hash) לא מופצים לרפליקות.

אם אתם חייבים להשתמש באינדקסי גיבוב, שדרגו ל-PostgreSQL 10 ואילך. אחרת, אם אתם רוצים להשתמש גם ברפליקות, אל תשתמשו באינדקסי גיבוב ב-PostgreSQL 9.6.

השאילתה במכונה הראשית תמיד פועלת. אחרי שיוצרים רפליקה, השאילתה SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' אמורה לפעול באופן רציף במכונה הראשית.
יצירת הרפליקה נכשלת בגלל זמן קצוב לתפוגה. טרנזקציות ארוכות שלא אושרו במכונה הראשית יכולות לגרום לכך שהיצירה של רפליקה לקריאה בלבד תיכשל.

יוצרים מחדש את הרפליקה אחרי שעוצרים את כל השאילתות שפועלות.

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

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

  1. מפעילים את הדגל log_duration ומגדירים את הפרמטר log_statement לערך ddl. כך תקבלו גם את השאילתות וגם את זמן הריצה במסד הנתונים. עם זאת, בהתאם לעומס העבודה, יכול להיות שזה יגרום לבעיות בביצועים.
  2. מריצים את explain analyze לשאילתות גם במכונה הראשית וגם ברפליקה לקריאה בלבד.
  3. משווים בין התוכניות לביצוע שאילתות ובודקים אם יש הבדלים.

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