โปรดคำนึงถึงหลักเกณฑ์ต่อไปนี้เมื่อใช้ BatchJobService
ปรับปรุงปริมาณงาน
เราต้องการงานขนาดใหญ่จำนวนน้อยมากกว่างานขนาดเล็กจำนวนมาก
จัดเรียงการดำเนินการที่อัปโหลดตามประเภทการดำเนินการ เช่น หากงานของคุณ มีการดำเนินการเพื่อเพิ่มแคมเปญ กลุ่มโฆษณา และเกณฑ์กลุ่มโฆษณา ให้จัดลำดับการดำเนินการในการอัปโหลดเพื่อให้การดำเนินการของแคมเปญทั้งหมดอยู่ก่อน ตามด้วยการดำเนินการของกลุ่มโฆษณาทั้งหมด และสุดท้ายคือการดำเนินการของเกณฑ์กลุ่มโฆษณาทั้งหมด
ในการดำเนินการประเภทเดียวกัน การจัดกลุ่มตามทรัพยากรหลักจะช่วยปรับปรุงประสิทธิภาพได้ ตัวอย่างเช่น หากคุณมีชุดออบเจ็กต์
AdGroupCriterionOperationการจัดกลุ่มการดำเนินการตามกลุ่มโฆษณาอาจมีประสิทธิภาพมากกว่าการผสมการดำเนินการที่มีผลต่อเกณฑ์กลุ่มโฆษณาในกลุ่มโฆษณาต่างๆ
ความเป็นหน่วยย่อยในการแยกกลุ่ม
Google Ads API อาจแบ่งการดำเนินการในงานแบบกลุ่มที่ส่งเป็นชุดย่อยที่เล็กลงเพื่อประมวลผล หากคุณไม่จัดกลุ่มการดำเนินการที่เกี่ยวข้อง เช่น
การแก้ไขกลุ่มเป้าหมายภายใน AssetGroup
และ AdGroup ต่อเนื่องกันภายในงานแบบเป็นชุด Google Ads API อาจแยกการดำเนินการเหล่านี้ออกเป็นชุดย่อยต่างๆ การแยกนี้
อาจทําให้การแก้ไขทั้งหมดล้มเหลว หรือทําให้บัญชีอยู่ในสถานะ
ที่ไม่สอดคล้องกัน
การจัดกลุ่มเชิงตรรกะ
AssetGroupListingGroupFilterOperation
จัดการกลุ่มรายชื่อภายในAssetGroup ซึ่ง
เป็นเรื่องปกติในแคมเปญ Performance Max
AdGroupCriterionOperation จัดการ
กลุ่มข้อมูลภายใน AdGroup ซึ่งมักพบใน
แคมเปญ Shopping มาตรฐาน ทั้ง 2 อย่างใช้เพื่อกำหนดการกำหนดเป้าหมายผลิตภัณฑ์ หากคุณทำการเปลี่ยนแปลงที่มีผลต่อลำดับชั้นการกำหนดเป้าหมายผลิตภัณฑ์ในทั้ง 2 บริบท ให้จัดกลุ่มการดำเนินการเหล่านี้ตามลำดับในงานแบบกลุ่มเพื่อให้แน่ใจว่าระบบจะใช้การดำเนินการร่วมกัน
ความสอดคล้องของข้อมูล
หากต้องการรักษาความสอดคล้องของข้อมูลและป้องกันการอัปเดตบางส่วน ให้เพิ่มการดำเนินการกลุ่มข้อมูลที่เกี่ยวข้อง ลงในงานแบบกลุ่มของคุณอย่างต่อเนื่อง การจัดลำดับนี้จะช่วยจัดกลุ่มคำขอเป็นชุดย่อยแบบอะตอมตามตรรกะการแยกชุดของ API ซึ่งจะช่วยป้องกันไม่ให้บัญชีของคุณอยู่ในสถานะที่ไม่สอดคล้องกัน
หลีกเลี่ยงปัญหาการทำงานพร้อมกัน
เมื่อส่งงานหลายรายการพร้อมกันสำหรับบัญชีเดียวกัน ให้พยายามลด โอกาสที่งานจะดำเนินการกับออบเจ็กต์เดียวกันในเวลาเดียวกัน ขณะที่ ยังคงรักษางานขนาดใหญ่ไว้ งานที่ยังไม่เสร็จหลายงานซึ่งมีสถานะเป็น
RUNNINGพยายามเปลี่ยนชุดออบเจ็กต์เดียวกัน ซึ่งอาจทำให้เกิดสภาวะคล้ายกับเดดล็อก ส่งผลให้การทำงานช้าลงอย่างมากและอาจทำให้งานล้มเหลวด้วยอย่าส่งการดำเนินการหลายรายการที่เปลี่ยนแปลงออบเจ็กต์เดียวกันในงานเดียวกัน เนื่องจากผลลัพธ์อาจคาดเดาไม่ได้
เรียกข้อมูลผลลัพธ์อย่างเหมาะสม
อย่าสำรวจสถานะของงานบ่อยเกินไป ไม่เช่นนั้นคุณอาจเสี่ยงต่อการได้รับข้อผิดพลาดเนื่องจากเกินขีดจำกัดอัตราคำขอ
อย่าดึงข้อมูลผลลัพธ์มากกว่า 1,000 รายการต่อหน้า เซิร์ฟเวอร์อาจแสดงผลน้อยกว่านั้นเนื่องจากโหลดหรือปัจจัยอื่นๆ
ลำดับผลลัพธ์จะเหมือนกับลำดับการอัปโหลด
คำแนะนำเพิ่มเติมในการใช้งาน
คุณสามารถกำหนดขอบเขตบนสำหรับระยะเวลาที่อนุญาตให้งานแบบกลุ่มทำงานก่อนที่จะ ถูกยกเลิก เมื่อสร้างงานแบบกลุ่มใหม่ ให้ตั้งค่าฟิลด์
metadata.execution_limit_secondsเป็นขีดจำกัดเวลาที่ต้องการเป็นวินาที หากไม่ได้ตั้งค่าmetadata.execution_limit_secondsระบบจะไม่มีการจำกัดเวลาเริ่มต้นเราขอแนะนำให้เพิ่มการดำเนินการไม่เกิน 1,000 รายการต่อ
AddBatchJobOperationsRequestและใช้sequence_tokenเพื่ออัปโหลดการดำเนินการที่เหลือไปยังงานเดียวกัน การดำเนินการมากเกินไปในAddBatchJobOperationsRequestเดียวอาจทำให้เกิดข้อผิดพลาดREQUEST_TOO_LARGEขึ้นอยู่กับ เนื้อหาของการดำเนินการ คุณสามารถจัดการข้อผิดพลาดนี้ได้โดยลดจำนวนการดำเนินการและลองAddBatchJobOperationsRequestอีกครั้ง
ข้อจำกัด
BatchJobแต่ละรายการรองรับการดำเนินการได้สูงสุด 1 ล้านรายการแต่ละบัญชีจะมีงานที่ใช้งานอยู่หรือรอดำเนินการได้สูงสุด 100 งานพร้อมกัน
ระบบจะนำงานที่รอดำเนินการซึ่งเก่ากว่า 7 วันออกโดยอัตโนมัติ
ตั้งแต่เวอร์ชัน 22 เป็นต้นไป
AddBatchJobOperationsคำขอแต่ละรายการมีการดำเนินการ mutate สูงสุด 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.bytesizePHP
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);