כשמשתמשים ב-BatchJobService, חשוב להקפיד על ההנחיות הבאות.
שיפור התפוקה
עדיף להשתמש בפחות משרות גדולות מאשר בהרבה משרות קטנות.
הפעולות שהועלו מסודרות לפי סוג הפעולה. לדוגמה, אם העבודה שלכם כוללת פעולות להוספת קמפיינים, קבוצות של מודעות וקריטריונים לקבוצות של מודעות, צריך לסדר את הפעולות בהעלאה כך שכל הפעולות שקשורות לקמפיין יופיעו ראשונות, ואחריהן כל הפעולות שקשורות לקבוצות של מודעות, ולבסוף כל הפעולות שקשורות לקריטריונים לקבוצות של מודעות.
בפעולות מאותו סוג, כדאי לקבץ אותן לפי משאב האב כדי לשפר את הביצועים. לדוגמה, אם יש לכם סדרה של
AdGroupCriterionOperationאובייקטים, יכול להיות שיעיל יותר לקבץ פעולות לפי קבוצת מודעות, במקום לערבב פעולות שמשפיעות על קריטריונים של קבוצות מודעות בקבוצות מודעות שונות.
אטומיות בפיצול אצווה
יכול להיות שממשק Google Ads API יפצל את הפעולות במשימת אצווה שנשלחה לאצוות משנה קטנות יותר לצורך עיבוד. אם לא מקבצים פעולות קשורות, כמו שינויים בקבוצה של כרטיסי מוצר בתוך AssetGroup ו-AdGroup, ברצף בתוך משימה באצווה, יכול להיות ש-Google Ads API יפצל את הפעולות האלה לאצוות משנה שונות. ההפרדה הזו עלולה לגרום לשינוי כולו להיכשל, או להשאיר את החשבון במצב לא עקבי.
קיבוץ לוגי
AssetGroupListingGroupFilterOperation
מנהל קבוצות של כרטיסי מוצר בתוך AssetGroup, וזה נפוץ בקמפיינים למיקסום הביצועים.
AdGroupCriterionOperation מנהל קבוצות של כרטיסי מוצר בתוך AdGroup, וזה נפוץ בקמפיינים רגילים של שופינג. שני המאפיינים משמשים להגדרת טירגוט מוצרים. אם מבצעים שינויים שמשפיעים על היררכיית טירגוט המוצרים בשני ההקשרים, צריך לקבץ את הפעולות האלה ברצף במשימה באצווה כדי לוודא שהן יחולו יחד.
עקביות הנתונים
כדי לשמור על עקביות הנתונים ולמנוע עדכונים חלקיים, מוסיפים לפעולות הקבוצתיות של משימת האצווה פעולות קשורות של קבוצות כרטיסי מוצר ברצף. הסדר הזה עוזר לקבץ אותם למנות משנה אטומיות לפי לוגיקת פיצול המנות של ה-API, וכך למנוע מצב של חוסר עקביות בחשבון.
איך למנוע בעיות של פעולות שמתבצעות בו-זמנית
כששולחים כמה משימות בו-זמנית לאותו חשבון, כדאי לנסות להקטין את הסיכוי שמשימות יפעלו על אותם אובייקטים באותו הזמן, תוך שמירה על גודל משימה גדול. הרבה משימות לא גמורות, שהסטטוס שלהן הוא
RUNNING, מנסות לשנות את אותו סט של אובייקטים, מה שעלול להוביל לתנאים דומים לקיפאון שגורמים להאטה משמעותית ואפילו לכשלים במשימות.אל תשלחו כמה פעולות שמשנות את אותו אובייקט באותה משימה, כי התוצאה עלולה להיות בלתי צפויה.
אחזור תוצאות בצורה אופטימלית
אל תבדקו את סטטוס העבודה בתדירות גבוהה מדי, כדי שלא תסתכנו בהגעה למגבלת הקצב.
אל תאחזרו יותר מ-1,000 תוצאות לכל דף. יכול להיות שהשרת יחזיר פחות מזה בגלל עומס או גורמים אחרים.
סדר התוצאות יהיה זהה לסדר ההעלאה.
הנחיות נוספות לשימוש
אפשר להגדיר גבול עליון למשך הזמן שבו מותר להפעיל משימה באצווה לפני שהיא תבוטל. כשיוצרים משימה באצווה חדשה, מגדירים את השדה
metadata.execution_limit_secondsלמגבלת הזמן המועדפת בשניות. אם לא מגדירים אתmetadata.execution_limit_seconds, אין הגבלת זמן שמוגדרת כברירת מחדל.מומלץ להוסיף עד 1,000 פעולות לכל
AddBatchJobOperationsRequestולהשתמש ב-sequence_tokenכדי להעלות את שאר הפעולות לאותה משימה. בהתאם לתוכן הפעולות, יותר מדי פעולות ב-AddBatchJobOperationsRequestאחד עלולות לגרום לשגיאהREQUEST_TOO_LARGE. כדי לפתור את השגיאה הזו, צריך לצמצם את מספר הפעולות ולנסות שוב אתAddBatchJobOperationsRequest.
מגבלות
כל
BatchJobתומך בעד מיליון פעולות.בכל חשבון יכולים להיות עד 100 משימות פעילות או בהמתנה בו-זמנית.
משימות בהמתנה מלפני יותר מ-7 ימים מוסרות באופן אוטומטי.
החל מגרסה v22, כל בקשת
AddBatchJobOperationsמוגבלת ל-10,000 פעולות שינוי לכל בקשה.החל מגרסה 22, בשדה
page_sizeב-ListBatchJobResultsRequest:- אם
page_sizeלא מוגדר או מוגדר כ-0, ברירת המחדל היא 1,000. - אם הערך של
page_sizeגדול מ-1,000 או קטן מ-0, ה-API מחזיר שגיאה מסוגINVALID_PAGE_SIZE.
- אם
החל מגרסה 23, הגודל המקסימלי של כל
AddBatchJobOperationsRequestהוא 41,937,920 בייטים. אם תחרגו מהמכסה הזו, תקבלוINTERNAL_ERROR. אפשר לקבוע את גודל הבקשה לפני ששולחים אותה ולנקוט פעולה מתאימה אם היא גדולה מדי.Java
static final int MAX_REQUEST_BYTES = 41_937_920; ... (code to get the request object) int sizeInBytes = request.getSerializedSize();Python
from google.ads.googleads.client import GoogleAdsClient MAX_REQUEST_BYTES = 41937920 ... (code to get the request object) size_in_bytes = request._pb.ByteSize()Ruby
require 'google/ads/google_ads' MAX_REQUEST_BYTES = 41937920 ... (code to get the request object) size_in_bytes = request.to_proto.bytesizePHP
use Google\Ads\GoogleAds\V24\Resources\Campaign; const MAX_REQUEST_BYTES = 41937920; ... (code to get the request object) $size_in_bytes = $campaign->byteSize() . PHP_EOL;.NET
using Google.Protobuf; const int MAX_REQUEST_BYTES = 41937920; ... (code to get the request object) int sizeInBytes = request.ToByteArray().Length;Perl
use Devel::Size qw(total_size); use constant MAX_REQUEST_BYTES => 41937920; ... (code to get the request object) my $size_in_bytes = total_size($request);
גודל של פעולת שינוי אחת
הגודל של הבקשה הכוללת יכול להיות גדול יותר, אבל הגודל של פעולת שינוי יחידה באצווה מוגבל ל-10,484,488 בייט (כ-10.48MB).