2010-12-10 63 views
0

我的情況非常簡單。巨大的數據包沒有得到「數據包太大」的錯誤

我有一個配置爲max_allowed_pa​​cket設置爲16M的服務器。它運行Percona Server 5.1.52。

我在perl中編寫了一個簡單的腳本來執行巨大的批量插入操作。通過了解我通過DBI發送的數據字符串的大小,我大致知道數據包的大小。

無論大小如何,批量插入MySQL似乎接受數據包並執行插入操作,但我期待它爲我提供超過16M的數據包太大錯誤。

在此處,它變得非常怪異......

如果我設置max_allowed_pa​​cket個到16777215(一個字節小於16M)或任何低,我得到了超過該大小的數據包錯誤,顯然沒有得到錯誤的數據包在這個大小。

因此,看起來好像在16M以下的任何情況下都遵從數據包限制,但是16M或更高,並且完全被忽略。

有什麼想法可能導致這種情況?這真的很奇怪,而且大多數人使用max_allowed_pa​​cket都會遇到相反的問題。

是否有可能MySQL客戶端可以做一些自動分塊?服務器似乎只運行一個大的查詢,所以自動分塊似乎不太可能,因爲它可能顯示爲多個插入。

我可以檢查的任何變量以獲取有關正在發生的更多信息?

回答

0

我將此報告爲MySQL錯誤並進行了驗證。所以,我想現在就是這樣。

這是5.1.52及以上的問題。

這裏的錯誤報告:http://bugs.mysql.com/58887

0

你在插入什麼?如果它只是非常大的BLOB,則max_allowed_packet不起作用。

常規字段的消息按通常的方式拆分並重新組合,用於網絡協議。該參數用於溝通BLOB字段。請參閱documentation

+0

我插入大字符串,其行爲與BLOBs類似。 – 2010-12-12 16:47:08