כדאי לפעול לפי ההנחיות הבאות כשמשתמשים ב-BatchJobService
.
שיפור הקצב
עדיף להשתמש במספר קטן יותר של משימות גדולות מאשר במספר גדול של משימות קטנות.
מיון הפעולות שהועלו לפי סוג הפעולה. לדוגמה, אם המשימה מכילה פעולות להוספת קמפיינים, קבוצות של מודעות וקריטריונים לקבוצות של מודעות, צריך לסדר את הפעולות בהעלאה כך שכל פעולות הקמפיינים יהיו קודם, ואחריה כל פעולות קבוצות המודעות, ולבסוף כל פעולות הקריטריונים לקבוצות של מודעות.
בפעולות מאותו סוג, כדאי לקבץ אותן לפי משאב הורה כדי לשפר את הביצועים. לדוגמה, אם יש לכם סדרה של אובייקטים מסוג
AdGroupCriterionOperation
, יעיל יותר לקבץ את הפעולות לפי קבוצת מודעות, במקום לשלב פעולות שמשפיעות על הקריטריונים של קבוצות המודעות בקבוצות מודעות שונות.
הימנעות מבעיות של בו-זמניות
כששולחים כמה משימות בו-זמנית לאותו חשבון, כדאי לנסות לצמצם את הסבירות לכך שמשימות יפעלו על אותם אובייקטים באותו זמן, תוך שמירה על גודל גדול של המשימות. משימות רבות שלא הסתיימו, עם הסטטוס
RUNNING
, מנסים לבצע מוטציה לאותה קבוצת אובייקטים. התנהגות כזו עלולה להוביל לתנאים דמויי נעילה גורפת (deadlock), וכתוצאה מכך לירידה חדה בביצועים ואפילו לכשל במשימות.אל תשלחו מספר פעולות שמבצעות מוטציה לאותו אובייקט באותה משימה, כי התוצאה עשויה להיות בלתי צפויה.
אחזור תוצאות באופן אופטימלי
לא כדאי לבדוק את סטטוס המשימה בתדירות גבוהה מדי, אחרת אתם עלולים להיתקל בטעויות של הגבלת קצב שליחת הבקשות.
לא מאחזרים יותר מ-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);