יצירת עותקים לקריאה

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

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

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

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

לפני שמתחילים

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

יצירת עותק לקריאה

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

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. מחפשים את המופע שרוצים ליצור לו רפליקה, ואז פותחים את התפריט more actions לצד כרטיס המוצר.
  3. בוחרים באפשרות יצירת עותק לקריאה.

    אם האפשרות הזו לא מופיעה, סימן שהמופע הוא העתק. אי אפשר ליצור העתק של העתק.

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

    מידע נוסף על כל הגדרה מופיע בדף מידע על הגדרות של מופעים.

    לדוגמה, כדי לאפשר לשירותים אחרים, כמו BigQuery, לגשת לנתונים ב-Cloud SQL ולשלוח שאילתות לגבי הנתונים האלה דרך חיבור פנימי, מרחיבים את הקבוצה Connections ומבטלים את הסימון בתיבת הסימון Public IP. Cloud de Confiance by S3NS

  5. לוחצים על יצירת העתק.

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

gcloud

יוצרים את הרפליקה:

gcloud sql instances create REPLICA_NAME \
--master-instance-name=MASTER_INSTANCE_NAME

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

אפשר לציין אזור אחר באמצעות הפרמטר --region.

אם למופע הראשי יש רק כתובת IP פנימית, ואתם רוצים לאפשר לשירותים אחרים, כמו BigQuery, לגשת לנתונים ב-Cloud SQL ולבצע שאילתות על הנתונים האלה דרך חיבור פנימי, אתם צריכים להוסיף את הפרמטר --enable-google-private-path לפקודה. Cloud de Confiance by S3NS

צריך ליצור את הרפליקה באותה רשת VPC שבה נמצאת המכונה הראשית. אפשר גם לציין allocated-ip-range-name ברשת ה-VPC הזו. אם לא מציינים טווח, הרפליקה נוצרת בטווח אקראי.

Terraform

כדי ליצור העתק לקריאה, משתמשים במשאב של Terraform.

resource "google_sql_database_instance" "read_replica" {
  name                 = "postgres-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "POSTGRES_14"

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST v1

משתמשים בשיטה insert של משאב המכונות כדי ליצור את הרפליקה לקריאה. המאפיינים region ו-databaseVersion צריכים להיות זהים למאפיינים בשרת הראשי.

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

  • project-id: מזהה הפרויקט
  • database-version: מחרוזת גרסת Enum (לדוגמה, POSTGRES_12)
  • primary-instance-name: השם של המופע הראשי
  • primary-instance-region: האזור של המכונה הראשית
  • replica-region: האזור של מכונת הרפליקה
  • replica-name: השם של מכונת הרפליקה
  • machine-type: מחרוזת enum של סוג המכונה. לדוגמה: db-custom-1-3840
  • private-network: הרשת המורשית שמוסיפים או בוחרים כדי ליצור חיבור פרטי.

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

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

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

תוכן בקשת JSON:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    "ipConfiguration": {
    object (IpConfiguration)
  },
  {
  "ipv4Enabled": false,
  "privateNetwork": private-network,
  "requireSsl": boolean,
  "authorizedNetworks": [
    {
      object (AclEntry)
    }
  ],
  "allocatedIpRange": string
    }
  },
  "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}

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

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

REST v1beta4

משתמשים בשיטה insert של משאב המכונות כדי ליצור את הרפליקה לקריאה. המאפיינים region ו-databaseVersion צריכים להיות זהים למאפיינים בשרת הראשי.

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

  • project-id: מזהה הפרויקט
  • database-version: מחרוזת גרסת Enum (לדוגמה, POSTGRES_12)
  • primary-instance-name: השם של המופע הראשי
  • primary-instance-region: האזור של המכונה הראשית
  • replica-region: האזור של מכונת הרפליקה
  • replica-name: השם של מכונת הרפליקה
  • machine-type: מחרוזת enum של סוג המכונה. לדוגמה: db-custom-1-3840
  • private-network: הרשת המורשית שמוסיפים או בוחרים כדי ליצור חיבור פרטי.

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

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

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

תוכן בקשת JSON:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    
    "ipConfiguration": {
    object (IpConfiguration)
  },
  {
  "ipv4Enabled": false,
  "privateNetwork": private-network,
  "requireSsl": boolean,
  "authorizedNetworks": [
    {
      object (AclEntry)
    }
  ],
  "allocatedIpRange": string
    }
    
  },
  "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}

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

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

יצירת העתק לקריאה של מופע עם Private Service Connect מופעל

כדי ליצור רפליקה לקריאה של מופע עם Private Service Connect מופעל, משתמשים ב-ה-CLI של gcloud או ב-API. אפשר ליצור את הרפליקה הזו באותו אזור או באזור אחר מהמופע הראשי (רפליקת קריאה חוצה אזורים).

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

gcloud

כדי ליצור העתק לקריאה של מכונה, משתמשים בפקודה gcloud sql instances create:

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

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

  • REPLICA_INSTANCE_NAME: השם של מכונת הרפליקה.
  • PRIMARY_INSTANCE_NAME: השם של המכונה הראשית.
  • PROJECT_ID: המזהה או מספר הפרויקט של Cloud de Confiance הפרויקט שמכיל את המופע.
  • REGION_NAME: שם האזור של מכונת הרפליקה.
  • ALLOWED_PROJECTS: רשימה של מספרי פרויקטים או מזהי פרויקטים מותרים, מופרדת בפסיקים. אם פרויקט לא מופיע ברשימה הזו, אי אפשר להשתמש בו כדי ליצור מופע ולהפעיל בו את Private Service Connect.

    ‫Cloud SQL לא מעתיק את הפרויקטים המורשים למופע הראשי אל העותק. לכל רפליקה צריך ליצור נקודת קצה מסוג Private Service Connect. אם אתם משתמשים בשרת proxy ל-Cloud SQL Auth או במחברי שפה ל-Cloud SQL, אתם צריכים ליצור תחום DNS ורשומת DNS עבור הרפליקות.

  • AVAILABILITY_TYPE: הפעלת זמינות גבוהה למכונה. לפרמטר הזה מציינים אחד מהערכים הבאים:
    • REGIONAL: הפעלה של זמינות גבוהה. מומלץ למופעי ייצור. המופע עובר לזמינות חלקית באזור אחר בתוך האזור שנבחר.
    • ZONAL: לא מספקות יכולת מעבר לגיבוי (failover). זה ערך ברירת המחדל.

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

REST v1

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

  • PRIMARY_INSTANCE_NAME: השם של המכונה הראשית.
  • PROJECT_ID: המזהה או מספר הפרויקט של Cloud de Confiance הפרויקט שמכיל את המופע.
  • REPLICA_INSTANCE_NAME: השם של מכונת הרפליקה.
  • REGION_NAME: שם האזור של מכונת הרפליקה.
  • MACHINE_TYPE: סוג המכונה של המופע.
  • AVAILABILITY_TYPE: הפעלת זמינות גבוהה למכונה. לפרמטר הזה מציינים אחד מהערכים הבאים:
    • REGIONAL: הפעלה של זמינות גבוהה. מומלץ למופעי ייצור. המופע עובר לזמינות חלקית באזור אחר בתוך האזור שנבחר.
    • ZONAL: לא מספקות יכולת מעבר לגיבוי (failover). זה ערך ברירת המחדל.

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

  • ALLOWED_PROJECTS: רשימה של מספרי פרויקטים או מזהי פרויקטים מותרים, מופרדת בפסיקים. אם פרויקט לא מופיע ברשימה הזו, אי אפשר להשתמש בו כדי ליצור מופע ולהפעיל בו את Private Service Connect.

    ‫Cloud SQL לא מעתיק את הפרויקטים המורשים למופע הראשי אל העותק. לכל רפליקה צריך ליצור נקודת קצה מסוג Private Service Connect. אם אתם משתמשים בשרת proxy ל-Cloud SQL Auth או במחברי שפה ל-Cloud SQL, אתם צריכים ליצור תחום DNS ורשומת DNS עבור הרפליקות.

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

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

תוכן בקשת JSON:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "POSTGRES_13",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • PRIMARY_INSTANCE_NAME: השם של המכונה הראשית.
  • PROJECT_ID: המזהה או מספר הפרויקט של Cloud de Confiance הפרויקט שמכיל את המופע.
  • REPLICA_INSTANCE_NAME: השם של מכונת הרפליקה.
  • REGION_NAME: שם האזור של מכונת הרפליקה.
  • MACHINE_TYPE: סוג המכונה של המופע.
  • AVAILABILITY_TYPE: הפעלת זמינות גבוהה למכונה. לפרמטר הזה מציינים אחד מהערכים הבאים:
    • REGIONAL: הפעלה של זמינות גבוהה. מומלץ למופעי ייצור. המופע עובר לזמינות חלקית באזור אחר בתוך האזור שנבחר.
    • ZONAL: לא מספקות יכולת מעבר לגיבוי (failover). זה ערך ברירת המחדל.

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

  • ALLOWED_PROJECTS: רשימה של מספרי פרויקטים או מזהי פרויקטים מותרים, מופרדת בפסיקים. אם פרויקט לא מופיע ברשימה הזו, אי אפשר להשתמש בו כדי ליצור מופע ולהפעיל בו את Private Service Connect.

    ‫Cloud SQL לא מעתיק את הפרויקטים המורשים למופע הראשי אל העותק. לכל רפליקה צריך ליצור נקודת קצה מסוג Private Service Connect. אם אתם משתמשים בשרת proxy ל-Cloud SQL Auth או במחברי שפה ל-Cloud SQL, אתם צריכים ליצור תחום DNS ורשומת DNS עבור הרפליקות.

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

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

תוכן בקשת JSON:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "POSTGRES_13",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

הגדרת רפליקות לקריאה לאימות מסד נתונים של IAM

אם מפעילים את הדגל cloudsql.iam_authentication במופע הראשי, Cloud SQL ל-PostgreSQL מפעיל אותו אוטומטית בעותקים לקריאה. עם זאת, אם לא מפעילים את ה-flag הזה במופע הראשי, Cloud SQL ל-PostgreSQL לא מפעיל אותו בעותקי הקריאה. אי אפשר להשתמש בעותקים המשוכפלים לאימות מסד נתונים של IAM.

כדי להגדיר רפליקה לקריאה לאימות מסד נתונים ב-IAM:

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. בכרטיס ההגדרה, מחפשים את הדגל cloudsql.iam_authentication. אם הדגל לא מופיע ברשימה, אין צורך להפעיל אותו בעותק לקריאה. אם הדגל מופיע ברשימה, צריך להפעיל אותו בעותק לקריאה. אם צריך להפעיל את הדגל ב-read replica, ממשיכים לשלב הבא.
  4. בתפריט הניווט של SQL, בוחרים באפשרות Replicas (רפליקות).
  5. לוחצים על השם של הרפליקה שרוצים לערוך.
  6. לוחצים על Edit.
  7. בקטע Configuration options (אפשרויות הגדרה), מרחיבים את Flags (דגלים).
  8. בוחרים באפשרות + הוספה.
  9. מזינים cloudsql.iam_authentication בשם הדגל. מוודאים שהאפשרות On (מופעל) נבחרה בשביל הדגל הזה.
  10. לוחצים על Save.

יצירת רפליקות מדורגות

בקטע הזה מוסבר איך ליצור ולנהל רפליקות מדורגות.

מידע על שכפול מדורג זמין במאמר שכפול מדורג.

שלבים ליצירת רפליקה מדורגת

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. לוחצים על הכרטיסייה Replicas (עותקים) של העותק שישמש כהורה של העותק שרוצים ליצור.
  3. לוחצים על יצירת העתק.
  4. בדף Create read replica (יצירת רפליקה לקריאה), מעדכנים את מזהה המופע ואת כל אפשרויות ההגדרה האחרות, כולל השם, האזור והתחום.
  5. לוחצים על יצירה.

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

  6. חוזרים על שלבים 4-6 לכל רפליקה חדשה של נתונים שרוצים ליצור.

gcloud

  1. יוצרים את הרפליקה החדשה על ידי ציון הרפליקה הראשית כמכונה הראשית באמצעות הדגל --master-instance-name:
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    מחליפים את מה שכתוב בשדות הבאים:
    • REPLICA_NAME: המזהה הייחודי של הרפליקה שאתם יוצרים
    • PARENT_REPLICA_NAME: השם של הרפליקה הראשית
  3. אחרי שיוצרים את העותק המשוכפל המדורג, אפשר לראות שהשינויים שבוצעו במופע הראשי משוכפלים בכל העותקים המשוכפלים בשרשרת של העותקים המשוכפלים המדורגים.

curl

  1. כדי ליצור רפליקה מתחת לרפליקה הראשית, עורכים את דוגמת קוד ה-JSON הבאה ושומרים אותה בקובץ בשם request.json:
    {
      "masterInstanceName": "PARENT_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. מריצים את הפקודה הבאה:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

פתרון בעיות

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

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

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

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

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

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

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

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

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

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

הנה כמה פתרונות אפשריים:

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

אם אתם חייבים להשתמש באינדקסים של hash, אתם צריכים לשדרג ל-PostgreSQL 10 ומעלה. אחרת, אם אתם רוצים להשתמש גם בעותקים משוכפלים, אל תשתמשו באינדקסים של hash ב-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. משווים את תוכנית השאילתה ומחפשים הבדלים.

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

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