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