בדף הזה מוסבר איך לנהל את קיבולת האחסון של מכונה ב-Cloud SQL באמצעות יכולות כיווץ האחסון.
לפני שמתחילים
בודקים את מגבלות התכונה .
אם אתם משתמשים ב-CLI של gcloud , ודאו שאתם משתמשים בגרסה העדכנית של Google Cloud SDK ושל ה-CLI של gcloud.
מתקינים את הגרסה העדכנית של ה-CLI של gcloud (גרסה 563.0.0 ואילך).
כדי לקבל את הגרסה הנוכחית של ה-CLI של gcloud, מריצים את הפקודה gcloud --version.
כדי לעדכן את גרסת ה-CLI של gcloud, מריצים את הפקודה gcloud components update.
מקבלים את הרשאות ה-IAM הבאות:
cloudsql.instances.getDiskShrinkConfig
cloudsql.instances.performDiskShrink
ההרשאות האלה זמינות בתפקידים הבאים. כשמקצים את התפקיד, מומלץ להשתמש בעיקרון של הרשאות מינימליות:
אדמין ב-Cloud SQL (roles/cloudsql.admin)
עריכה ב-Cloud SQL (roles/cloudsql.editor)
מידע נוסף זמין במקורות המידע הבאים:
הכנת המכונה
לפני שמתחילים, צריך לבצע את הפעולות הבאות.
השלבים האלה זהים למכונות ראשיות ולעותקי קריאה.
אם מעדכנים רפליקה לקריאה בלבד, חשוב קודם להקטין את הקיבולת של המכונה הראשית, ואז להקטין את הגודל של הרפליקה.
מאתרים את מזהה הפרויקט שמכיל את המכונה שרוצים לנהל.
בודקים את המצב הנוכחי של המכונה כדי לוודא שהיא פועלת. אחת הדרכים לבדוק היא להשתמש בפקודה describe :
gcloud sql instances describe
הפונקציה מחזירה את הסטטוס הבא:
RUNNABLE
אם לא, מפעילים את המכונה .
יוצרים גיבוי של המכונה הנוכחית. כך תוכלו לשחזר את המכונה מאוחר יותר אם תיתקלו בבעיות במהלך ההגדרה.
אם אתם מריצים מכונה של PostgreSQL, הגדירו את ערך הדגל max_wal_size לפחות מ-5,128MB. אם הערך של max_wal_size גדול מדי, יכול להיות שהמכונה תופעל לאט והפעולה תיכשל.
משביתים את כל התוספים או התכונות שמאפשרים חיבורים יוצאים (או שדורשים העברת נתונים יוצאים).
לדוגמה, יכול להיות שחיבור יוצא נוצר באמצעות אחד מהתוספים או התכונות האלה, וצריך להשבית אותו לפני שמבצעים פעולת כיווץ של האחסון:
התוסף dblink
התוסף PL/proxy
התוסף pglogical
מעטפות נתונים זרים (כמו postgres_fdw, oracle_fdw ו-tds_fdw)
שכפול לוגי ב-PostgreSQL מגרסה 10 ואילך
הקטנת נפח האחסון של מכונה
השלבים הבאים זהים למכונות ראשיות ולעותקים לקריאה בלבד.
בודקים את קיבולת האחסון המינימלית של המכונה ואת משך הפעולה המשוער. המידע הזה יכול לעזור לכם לתכנן את פעולת הכיווץ של האחסון.
הערה: אי אפשר לבדוק את קיבולת האחסון המינימלית של היעד לרפליקות לקריאה בלבד. קיבולת האחסון של רפליקה לקריאה בלבד בדרך כלל תואמת לזו של המכונה הראשית שמשויכת אליה.
gcloud מריצים את הפקודה gcloud sql instances get-storage-shrink-config :
gcloud sql instances get-storage-shrink-config INSTANCE_NAME
מחליפים את מה שכתוב בשדות הבאים:
INSTANCE_NAME : השם של המכונה הראשית.
התשובה כוללת ערך של minimalTargetSizeGb. אפשר להשתמש בערך הזה כדי לקבוע את הערך שרוצים להשתמש בו בפרמטר --storage-size כשמפעילים פעולת כיווץ של האחסון.
התגובה גם מחזירה הודעה עם זמן הפעולה המשוער, בדומה לזה:
...
"The estimated operation time is 20 minutes".
REST v1 משתמשים בשיטה GET כדי לראות את קיבולת האחסון המינימלית של המכונה.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : שם הפרויקט שבו נמצא המכונה הראשית.
INSTANCE_ID : מזהה המכונה של המכונה הראשית.
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /getDiskShrinkConfig
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /getDiskShrinkConfig"
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /getDiskShrinkConfig" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#instance",
"min_target_size_gb": "1234"
"message": "The size of your instance's storage impacts IOPS, and therefore shrinking your storage
may have a negative impact on IOPS. Before shrinking your storage, please refer to our
documentation on Cloud SQL limits to understand what impact shrinking your storage might have:
https://docs.cloud.google.com/sql/docs/quotas#fixed-limits. Additionally, we recommend leaving an
appropriate buffer for operational purposes, like reindexing, etc. We recommend a buffer of at
least 100 GB or 20% more than current usage, whichever is larger. For more details, please refer
to: https://docs.cloud.google.com/sql/docs/shared-responsibility. The estimated operation time is
20 minutes."
}
התשובה כוללת ערך של min_target_size_gb. אפשר להשתמש בערך הזה כדי לקבוע את הערך שרוצים להשתמש בו בפרמטר --storage-size כשמפעילים פעולת כיווץ של האחסון.
התגובה גם מחזירה הודעה עם זמן הפעולה המשוער, בדומה לזה:
...
"The estimated operation time is 20 minutes".
REST v1beta4 משתמשים בשיטה GET כדי לראות את קיבולת האחסון המינימלית של המכונה.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : שם הפרויקט שבו נמצא המכונה הראשית.
INSTANCE_ID : מזהה המכונה של המכונה הראשית.
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /getDiskShrinkConfig
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /getDiskShrinkConfig"
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /getDiskShrinkConfig" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#instance",
"min_target_size_gb": "1234"
"message": "The size of your instance's storage impacts IOPS, and therefore shrinking your storage
may have a negative impact on IOPS. Before shrinking your storage, please refer to our
documentation on Cloud SQL limits to understand what impact shrinking your storage might have:
https://docs.cloud.google.com/sql/docs/quotas#fixed-limits. Additionally, we recommend leaving an
appropriate buffer for operational purposes, like reindexing, etc. We recommend a buffer of at
least 100 GB or 20% more than current usage, whichever is larger. For more details, please refer
to: https://docs.cloud.google.com/sql/docs/shared-responsibility. The estimated operation time is
20 minutes."
}
התשובה כוללת ערך של min_target_size_gb. אפשר להשתמש בערך הזה כדי לקבוע את הערך שרוצים להשתמש בו בפרמטר --storage-size כשמפעילים פעולת כיווץ של האחסון.
התגובה גם מחזירה הודעה עם זמן הפעולה המשוער, בדומה לזה:
...
"The estimated operation time is 20 minutes".
להקטין את נפח האחסון של המכונה.
הערה: הפרמטר --storage-size נתמך רק במכונות ראשיות או עצמאיות. כדי להקטין את נפח האחסון במכונה של רפליקה, משמיטים את הפרמטר --storage-size בפקודה.
gcloud מריצים את הפקודה הבאה כדי לצמצם את נפח האחסון במכונה:
gcloud sql instances perform-storage-shrink INSTANCE_NAME \
--storage-size= TARGET_STORAGE_SIZE
מחליפים את מה שכתוב בשדות הבאים:
INSTANCE_NAME : שם המכונה.
TARGET_STORAGE_SIZE : נפח האחסון הרצוי ב-GB. לדוגמה, 100GB.
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : מזהה הפרויקט שבו נמצא המכונה.
INSTANCE_ID : מזהה המכונה.
TARGET_STORAGE_SIZE : נפח האחסון הרצוי ב-GB.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /performDiskShrink
תוכן בקשת JSON:
{
"targetSizeGb": TARGET_STORAGE_SIZE
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
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/INSTANCE_ID /performDiskShrink"
PowerShell (Windows)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID /performDiskShrink" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2019-09-25T22:19:33.735Z",
"operationType": "UPDATE",
"name": "operation-id",
"targetId": "INSTANCE_ID ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/operation-id",
"targetProject": "PROJECT_ID "
}
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : מזהה הפרויקט שבו נמצא המכונה.
INSTANCE_ID : מזהה המכונה.
TARGET_STORAGE_SIZE : נפח האחסון הרצוי של המכונה.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /performDiskShrink
תוכן בקשת JSON:
{
"targetSizeGb": TARGET_STORAGE_SIZE
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
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/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /performDiskShrink"
PowerShell (Windows)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID /performDiskShrink" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2019-09-25T22:19:33.735Z",
"operationType": "UPDATE",
"name": "operation-id",
"targetId": "INSTANCE_ID ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/operation-id",
"targetProject": "PROJECT_ID "
}
כדי לבדוק את הסטטוס של פעולת צמצום האחסון, אפשר לעיין במאמר בדיקת הסטטוס של פעולה .
ביטול הפעולה של כיווץ האחסון
הערה: אפשר לבטל פעולות רק במכונות ראשיות או עצמאיות.
מאתרים את מזהה הפעולה של כיווץ האחסון.
כדי לאחזר את מזהה הפעולה, מריצים את הפקודה list הבאה:
gcloud sql operations list
שולחים בקשת ביטול.
gcloud מריצים את הפקודה הבאה כדי לבטל את הבקשה:
gcloud sql operations cancel OPERATION_ID
מחליפים את מה שכתוב בשדות הבאים:
OPERATION_ID : המזהה של פעולת צמצום האחסון שרוצים לבטל.
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : מזהה הפרויקט שבו נמצא המכונה.
OPERATION_ID : המזהה של פעולת צמצום האחסון שרוצים לבטל.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID /cancel
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d "" \ "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID /cancel"
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID /cancel" | Select-Object -Expand Content
אמורים לקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : מזהה הפרויקט שבו נמצא המכונה.
OPERATION_ID : המזהה של פעולת צמצום האחסון שרוצים לבטל.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID /cancel
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d "" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID /cancel"
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID /cancel" | Select-Object -Expand Content
אמורים לקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
בדיקת הסטטוס של בקשת ביטול או פעולה אחרת
כדי לבדוק את הסטטוס של בקשה, מריצים את הפקודות הבאות:
gcloud
מאתרים את מזהה הפעולה של בקשת הביטול:
gcloud sql operations list
בודקים את סטטוס הפעולה:
gcloud sql operations describe OPERATION_ID
מחליפים את מה שכתוב בשדות הבאים:
OPERATION_ID : המזהה של הפעולה שרוצים לבדוק.
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : שם הפרויקט שבו נמצא המכונה.
OPERATION_ID : המזהה של פעולת צמצום האחסון.
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID "
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID " | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_ID ",
"status": "RUNNING",
"user": "user@example.com",
"insertTime": "2023-12-18T22:43:09.849Z",
"startTime": "2023-12-18T22:43:10.373Z",
"operationType": "UPDATE",
"name": "OPERATION_ID",
"targetId": "example_instance",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID ",
"targetProject": "PROJECT_ID"
}
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
PROJECT_ID : שם הפרויקט שבו נמצא המכונה.
OPERATION_ID : המזהה של פעולת צמצום האחסון.
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID "
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID " | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_ID ",
"status": "RUNNING",
"user": "user@example.com",
"insertTime": "2023-12-18T22:43:09.849Z",
"startTime": "2023-12-18T22:43:10.373Z",
"operationType": "UPDATE",
"name": "OPERATION_ID",
"targetId": "example_instance",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID ",
"targetProject": "PROJECT_ID"
}
פתרון בעיות
למידע על פתרון בעיות, אפשר לעיין במאמר בעיות בעדכון נפח האחסון .
המאמרים הבאים