שיטות מומלצות ומגבלות

כדאי לפעול לפי ההנחיות הבאות כשמשתמשים ב-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);