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

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

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

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

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

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

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

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

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

המסוף

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

    כניסה לדף Cloud SQL Instances

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

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

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

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

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

  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 לפקודה. Google Cloud

צריך ליצור את העותק המשוכפל באותה רשת 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 מופעל, משתמשים ב-gcloud CLI או ב-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: המזהה או מספר הפרויקט של פרויקט Google Cloud שמכיל את המופע.
  • 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: המזהה או מספר הפרויקט של פרויקט Google Cloud שמכיל את המופע.
  • 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: המזהה או מספר הפרויקט של פרויקט Google Cloud שמכיל את המופע.
  • 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 for PostgreSQL מפעיל אותו אוטומטית בעותקי הקריאה. עם זאת, אם לא מפעילים את ה-flag הזה במופע הראשי, Cloud SQL ל-PostgreSQL לא מפעיל אותו בעותקי הקריאה. אי אפשר להשתמש בעותקים המשוכפלים לאימות מסד נתונים של IAM.

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

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

    כניסה לדף 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 במסוף Google Cloud .

    כניסה לדף 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 thread בעותק לא מצליח לעמוד בקצב של ה-IO thread. סוגים מסוימים של שאילתות או עומסי עבודה עלולים לגרום לעיכובים זמניים או קבועים בשכפול של סכימה נתונה. חלק מהסיבות האופייניות לעיכוב בשכפול:
  • שאילתות איטיות בעותק המשוכפל. צריך לאתר את הבעיות ולתקן אותן.
  • לכל הטבלאות צריך להיות מפתח ייחודי או מפתח ראשי. כל עדכון בטבלה כזו ללא מפתח ייחודי או ראשי גורם לסריקות מלאות של הטבלה ברפליקה.
  • שאילתות כמו 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. משווים את תוכנית השאילתה ומחפשים הבדלים.

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

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