כדאי להביא בחשבון את ההנחיות האלה כשמשתמשים ב-BatchJobService
.
שיפור התפוקה
עדיף לבצע פחות משימות גדולות על פני משימות קטנות יותר.
סדר פעולות שהועלו לפי סוג הפעולה. לדוגמה, אם המשימה כוללת פעולות להוספת קמפיינים, קבוצות של מודעות וקריטריונים של קבוצות של מודעות, צריך לסדר את הפעולות בהעלאה כך שכל פעולות הקמפיין יופיעו ראשונות, ואחריהן פעולות של קבוצת מודעות, ולבסוף כל הפעולות של קריטריון של קבוצת מודעות.
בתוך פעולות מאותו סוג, ניתן לשפר את הביצועים כדי לקבץ אותן לפי משאב הורה. לדוגמה, במקרה שיש לך סדרה של אובייקטים מסוג
AdGroupCriterionOperation
, יותר יעיל לקבץ פעולות לפי קבוצת מודעות במקום פעולות משולבות שמשפיעות על קריטריונים של קבוצות מודעות בקבוצות שונות של מודעות.
הימנעות מבעיות בו-זמניות (concurrency)
כששולחים כמה משימות בו-זמנית עבור אותו חשבון, כדאי לצמצם את הסבירות שמשימות יפעלו על אותם אובייקטים בו-זמנית, תוך שמירה על גדלים גדולים של משימות. משימות רבות שלא סיימתם (עם הסטטוס
RUNNING
) שמנסות לשנות את אותה קבוצת אובייקטים, עלולות לגרום לתנאים דמויי-מחסום ולגרום להאטה חמורה ואפילו לכשלים בביצוע משימות.אל תשלחו מספר פעולות שמבצעות שינויים באותו אובייקט באותה משימה, כי התוצאה עלולה להיות בלתי צפויה.
אחזור תוצאות באופן אופטימלי
לא כדאי לבדוק את סטטוס המשימה לעיתים קרובות מדי, כי אתם עלולים להיתקל בשגיאות של מגבלת קצב.
אל תאחזר יותר מ-1,000 תוצאות בדף. השרת יכול להחזיר פחות זמן בגלל עומס או גורמים אחרים.
סדר התוצאות יהיה זהה לסדר ההעלאה.
הנחיות נוספות לשימוש
אפשר להגדיר גבול עליון למשך הזמן שבו משימה באצווה מורשית לפעול לפני שמבטלים אותה. כשיוצרים משימה חדשה באצווה, מגדירים את השדה
metadata.execution_limit_seconds
למגבלת הזמן המועדפת, בשניות. אם לא מגדירים אתmetadata.execution_limit_seconds
, אין מגבלת זמן כברירת מחדל.מומלץ לא להוסיף יותר מ-1,000 פעולות לכל
AddBatchJobOperationsRequest
ולהשתמש ב-sequence_token
כדי להעלות את שאר הפעולות לאותה המשימה. בהתאם לתוכן של הפעולות, יותר מדי פעולות באותוAddBatchJobOperationsRequest
עלולות לגרום לשגיאהREQUEST_TOO_LARGE
. כדי לטפל בשגיאה הזו אפשר להקטין את מספר הפעולות ולנסות שוב לבצע את הפעולהAddBatchJobOperationsRequest
.
הגבלות
כל
BatchJob
תומך במיליון פעולות לכל היותר.כל חשבון יכול לכלול עד 100 משימות פעילות או בהמתנה בו-זמנית.
משימות בהמתנה מלפני יותר מ-7 ימים מוסרות באופן אוטומטי.
לכל
AddBatchJobOperationsRequest
יש גודל מקסימלי של 10,484,504 בייטים. אם תחרגו מהמכסה, תקבלוINTERNAL_ERROR
. אפשר לבדוק את גודל הבקשה לפני ששולחים אותה, ולנקוט פעולה מתאימה אם היא גדולה מדי.Java
static final int MAX_REQUEST_BYTES = 10_484_504; ... (code to get the request object) int sizeInBytes = request.getSerializedSize();
Python
from google.ads.googleads.client import GoogleAdsClient MAX_REQUEST_BYTES = 10484504 ... (code to get the request object) size_in_bytes = request._pb.ByteSize()
Ruby
require 'google/ads/google_ads' MAX_REQUEST_BYTES = 10484504 ... (code to get the request object) size_in_bytes = request.to_proto.bytesize
PHP
use Google\Ads\GoogleAds\V16\Resources\Campaign; const MAX_REQUEST_BYTES = 10484504; ... (code to get the request object) $size_in_bytes = $campaign->byteSize() . PHP_EOL;
.NET
using Google.Protobuf; const int MAX_REQUEST_BYTES = 10484504; ... (code to get the request object) int sizeInBytes = request.ToByteArray().Length;
Perl
use Devel::Size qw(total_size); use constant MAX_REQUEST_BYTES => 10484504; ... (code to get the request object) my $size_in_bytes = total_size($request);