Các phương pháp hay nhất và hạn chế
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Hãy xem xét các nguyên tắc sau khi sử dụng BatchJobService
.
Cải thiện thông lượng
Bạn nên có ít công việc lớn hơn thay vì nhiều công việc nhỏ hơn.
Sắp xếp các thao tác đã tải lên theo loại thao tác. Ví dụ: nếu công việc của bạn chứa các thao tác để thêm chiến dịch, nhóm quảng cáo và tiêu chí nhóm quảng cáo, hãy sắp xếp các thao tác trong tệp tải lên sao cho tất cả thao tác chiến dịch đều ở vị trí đầu tiên, tiếp theo là tất cả thao tác nhóm quảng cáo và cuối cùng là tất cả thao tác tiêu chí nhóm quảng cáo.
Trong các thao tác cùng loại, bạn có thể cải thiện hiệu suất bằng cách nhóm các thao tác theo tài nguyên mẹ. Ví dụ: nếu bạn có một loạt các đối tượng AdGroupCriterionOperation
, thì việc nhóm các thao tác theo nhóm quảng cáo có thể hiệu quả hơn thay vì trộn lẫn các thao tác ảnh hưởng đến tiêu chí nhóm quảng cáo trong các nhóm quảng cáo khác nhau.
Tránh các vấn đề về tính đồng thời
Khi gửi nhiều công việc đồng thời cho cùng một tài khoản, hãy cố gắng giảm khả năng các công việc hoạt động trên cùng một đối tượng cùng một lúc, đồng thời duy trì kích thước công việc lớn. Nhiều công việc chưa hoàn thành, có trạng thái RUNNING
, hãy thử thay đổi cùng một nhóm đối tượng. Điều này có thể dẫn đến các điều kiện giống như bế tắc, dẫn đến tình trạng chậm trễ nghiêm trọng và thậm chí là lỗi công việc.
Đừng gửi nhiều thao tác làm thay đổi cùng một đối tượng trong cùng một công việc, vì kết quả có thể không dự đoán được.
Truy xuất kết quả một cách tối ưu
Đừng thăm dò trạng thái công việc quá thường xuyên, nếu không bạn có thể gặp phải lỗi giới hạn tốc độ.
Đừng truy xuất quá 1.000 kết quả trên mỗi trang. Máy chủ có thể trả về ít hơn số đó do tải hoặc các yếu tố khác.
Thứ tự kết quả sẽ giống với thứ tự tải lên.
Hướng dẫn bổ sung về cách sử dụng
Bạn có thể đặt giới hạn trên cho thời gian mà một công việc hàng loạt được phép chạy trước khi bị huỷ. Khi tạo một lô công việc mới, hãy đặt trường metadata.execution_limit_seconds
thành giới hạn thời gian mà bạn muốn (tính bằng giây). Không có giới hạn thời gian mặc định nếu bạn không đặt metadata.execution_limit_seconds
.
Bạn nên thêm không quá 1.000 thao tác cho mỗi AddBatchJobOperationsRequest
và dùng sequence_token
để tải các thao tác còn lại lên cùng một công việc. Tuỳ thuộc vào nội dung của các thao tác, quá nhiều thao tác trong một AddBatchJobOperationsRequest
có thể gây ra lỗi REQUEST_TOO_LARGE
. Bạn có thể xử lý lỗi này bằng cách giảm số lượng thao tác và thử lại AddBatchJobOperationsRequest
.
Các điểm hạn chế
Mỗi BatchJob
hỗ trợ tối đa một triệu thao tác.
Mỗi tài khoản có thể có tối đa 100 công việc đang hoạt động hoặc đang chờ xử lý cùng một lúc.
Các lệnh đang chờ xử lý đã quá 7 ngày sẽ tự động bị xoá.
Mỗi AddBatchJobOperationsRequest
có kích thước tối đa là 10.484.504 byte. Nếu vượt quá giới hạn này, bạn sẽ nhận được một INTERNAL_ERROR
. Bạn có thể xác định kích thước của yêu cầu trước khi gửi và thực hiện hành động thích hợp nếu yêu cầu đó quá lớn.
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);
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-09-05 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-09-05 UTC."],[[["\u003cp\u003eTo improve throughput when using BatchJobService, submit fewer, larger jobs and order operations by type and parent resource to enhance efficiency.\u003c/p\u003e\n"],["\u003cp\u003eWhen running concurrent jobs, minimize the likelihood of them operating on the same objects simultaneously to avoid potential deadlock-like conditions and job failures.\u003c/p\u003e\n"],["\u003cp\u003eFor optimal results retrieval, avoid excessive job status polling and retrieve results in batches of 1,000 or less to prevent rate limit errors and ensure efficient data handling.\u003c/p\u003e\n"],["\u003cp\u003eBatchJobService allows setting an execution time limit and recommends a maximum of 1,000 operations per request to avoid exceeding size limitations and potential errors.\u003c/p\u003e\n"],["\u003cp\u003eEach BatchJob is subject to limitations, including a maximum of one million operations, 100 active or pending jobs per account, a 7-day lifespan for pending jobs, and a request size limit of 10,484,504 bytes.\u003c/p\u003e\n"]]],[],null,["# Best Practices and Limitations\n\nConsider these guidelines when using [`BatchJobService`](/google-ads/api/reference/rpc/v21/BatchJobService).\n\nImprove throughput\n------------------\n\n- Fewer larger jobs is preferred over many smaller jobs.\n\n- Order uploaded operations by operation type. For example, if your job\n contains operations to add campaigns, ad groups, and ad group criteria,\n order the operations in your upload so that all of the [campaign\n operations](/google-ads/api/reference/rpc/v21/CampaignOperation) are first, followed by all of\n the [ad group operations](/google-ads/api/reference/rpc/v21/AdGroupOperation), and finally all\n [ad group criterion operations](/google-ads/api/reference/rpc/v21/AdGroupCriterionOperation).\n\n- Within operations of the same type, it can improve performance to group them\n by parent resource. For example, if you have a series of\n `AdGroupCriterionOperation` objects, it can be more efficient to group\n operations by ad group, rather than intermixing operations that affect ad\n group criteria in different ad groups.\n\nAvoid concurrency issues\n------------------------\n\n- When submitting multiple concurrent jobs for the same account, try to reduce\n the likelihood of jobs operating on the same objects at the same time, while\n maintaining large job sizes. Many unfinished jobs, which have the status of\n [`RUNNING`](/google-ads/api/reference/rpc/v21/BatchJobStatusEnum.BatchJobStatus#running),\n try to mutate the same set of objects, which can lead to deadlock-like\n conditions resulting in severe slow-down and even job failures.\n\n- Don't submit multiple operations that mutate the same object in the same\n job, as the result can be unpredictable.\n\nRetrieve results optimally\n--------------------------\n\n- Don't poll the job status too frequently or you risk hitting rate limit\n errors.\n\n- Don't retrieve more than 1,000 results per page. The server could return\n fewer than that due to load or other factors.\n\n- The results order will be the same as the upload order.\n\nAdditional usage guidance\n-------------------------\n\n- You can set an upper bound for how long a batch job is allowed to run before\n being cancelled. When creating a new batch job, set the\n [`metadata.execution_limit_seconds`](/google-ads/api/reference/rpc/v21/BatchJob.BatchJobMetadata#execution_limit_seconds)\n field to your preferred time limit, in seconds. There is no default time\n limit if `metadata.execution_limit_seconds` is not set.\n\n- It is recommended to add no more than 1,000 operations per\n [`AddBatchJobOperationsRequest`](/google-ads/api/reference/rpc/v21/BatchJobService/AddBatchJobOperations)\n and use the\n [`sequence_token`](/google-ads/api/reference/rpc/v21/AddBatchJobOperationsRequest#sequence_token)\n to upload the rest of the operations to the same job. Depending on the\n content of the operations, too many operations in a single\n `AddBatchJobOperationsRequest` could cause a [`REQUEST_TOO_LARGE`](/google-ads/api/reference/rpc/v21/DatabaseErrorEnum.DatabaseError#request_too_large) error. You\n can handle this error by reducing the number of operations and retrying the\n `AddBatchJobOperationsRequest`.\n\nLimitations\n-----------\n\n- Each [`BatchJob`](/google-ads/api/reference/rpc/v21/BatchJob) supports up to one million\n operations.\n\n- Each account can have up to 100 active or pending jobs at the same time.\n\n- Pending jobs older than 7 days are automatically removed.\n\n- Each [`AddBatchJobOperationsRequest`](/google-ads/api/reference/rpc/v21/BatchJobService/AddBatchJobOperations)\n has a maximum size of 10,484,504 bytes. If you exceed this, you will receive\n an `INTERNAL_ERROR`. You can determine the size of the request before\n submitting and take appropriate action if it is too large.\n\n ### Java\n\n\n static final int MAX_REQUEST_BYTES = 10_484_504;\n\n ... (code to get the request object)\n\n int sizeInBytes = request.getSerializedSize();\n\n ### Python\n\n\n from google.ads.googleads.client import GoogleAdsClient\n\n MAX_REQUEST_BYTES = 10484504\n\n ... (code to get the request object)\n\n size_in_bytes = request._pb.ByteSize()\n\n ### Ruby\n\n\n require 'google/ads/google_ads'\n\n MAX_REQUEST_BYTES = 10484504\n\n ... (code to get the request object)\n\n size_in_bytes = request.to_proto.bytesize\n\n ### PHP\n\n\n use Google\\Ads\\GoogleAds\\V16\\Resources\\Campaign;\n\n const MAX_REQUEST_BYTES = 10484504;\n\n ... (code to get the request object)\n\n $size_in_bytes = $campaign-\u003ebyteSize() . PHP_EOL;\n\n ### .NET\n\n\n using Google.Protobuf;\n const int MAX_REQUEST_BYTES = 10484504;\n\n ... (code to get the request object)\n\n int sizeInBytes = request.ToByteArray().Length;\n\n ### Perl\n\n\n use Devel::Size qw(total_size);\n use constant MAX_REQUEST_BYTES =\u003e 10484504;\n\n ... (code to get the request object)\n\n my $size_in_bytes = total_size($request);"]]