文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  複製和 max_allowed_packet

19.5.1.20 複製和 max_allowed_packet

max_allowed_packet 設定 MySQL 伺服器與用戶端(包括副本)之間任何單一訊息大小的上限。如果您要複製大型資料行值(例如可能在 TEXTBLOB 資料行中找到的值),而且來源上的 max_allowed_packet 太小,則來源會因錯誤而失敗,且副本會關閉複製 I/O(接收器)執行緒。如果副本上的 max_allowed_packet 太小,也會導致副本停止 I/O 執行緒。

列式複製會將已更新列的所有資料行和資料行值從來源傳送到副本,包括未實際透過更新變更的資料行值。這表示,當您使用列式複製來複製大型資料行值時,您必須小心設定 max_allowed_packet,使其夠大以容納任何要複製之資料表中最大的列,即使您只複製更新,或只插入相對較小的值。

在多執行緒副本上(使用 replica_parallel_workers > 0),請確保系統變數 replica_pending_jobs_size_max 設定為等於或大於來源上 max_allowed_packet 系統變數設定的值。replica_pending_jobs_size_max 的預設設定為 128M,是 max_allowed_packet 預設設定 64M 的兩倍。max_allowed_packet 限制來源可以傳送的封包大小,但新增事件標頭可能會產生超過此大小的二進位日誌事件。此外,在列式複製中,單一事件的大小可能會明顯大於 max_allowed_packet 大小,因為 max_allowed_packet 的值只限制資料表的每個資料行。

副本實際上接受封包的大小上限由其 replica_max_allowed_packet 設定值決定,預設值為 1GB 的最大設定,以防止因大型封包導致複寫失敗。然而,replica_pending_jobs_size_max 的值控制著副本上可用的記憶體大小,用於存放傳入的封包。指定的記憶體會在所有副本工作佇列之間共享。

replica_pending_jobs_size_max 的值是一個軟性限制,如果一個異常大型的事件(由一個或多個封包組成)超過這個大小,該交易將被暫停,直到所有副本工作者佇列都為空,然後才進行處理。所有後續的交易都會被暫停,直到大型交易完成。因此,儘管可以處理大於 replica_pending_jobs_size_max 的異常事件,但清除所有副本工作者佇列的延遲以及等待將後續交易排入佇列的時間可能會導致副本上的延遲,並降低副本工作者的並發性。因此,replica_pending_jobs_size_max 應該設定得足夠高,以容納大多數預期的事件大小。