我寫了一個使用MySQL數據庫的程序,並且數據庫服務器(非常強大的一個)和客戶端之間的事務正在通過ADSL連接(1Mbit/s)發生。MySQL數據包大小是否會導致速度下降?
但我有一個非常非常緩慢的連接每個客戶端和服務器之間。通過服務器僅發送大約3-4 KB/s的數據。服務器和客戶端都沒有將互聯網用於其他目的,只是我的程序使用互聯網。我想不出爲什麼? MySQL服務器數據包大小的原因是什麼?
有什麼建議嗎?
我寫了一個使用MySQL數據庫的程序,並且數據庫服務器(非常強大的一個)和客戶端之間的事務正在通過ADSL連接(1Mbit/s)發生。MySQL數據包大小是否會導致速度下降?
但我有一個非常非常緩慢的連接每個客戶端和服務器之間。通過服務器僅發送大約3-4 KB/s的數據。服務器和客戶端都沒有將互聯網用於其他目的,只是我的程序使用互聯網。我想不出爲什麼? MySQL服務器數據包大小的原因是什麼?
有什麼建議嗎?
嘗試使用mytop來識別服務器性能低下的原因。 另一個:您可能正在使用SELECT COUNT(*)FROM ..來導致表掃描的大型InnoDB表。
你能否測試一些其他服務機器之間的交換數據速率是否正常?即使ADSL用戶的輸出帶寬較低,但3-4 kB也可能不是低性能的原因。
有效傳輸速率常常受到客戶端和服務器之間往返數量的嚴重限制。沒有看到你的代碼很難說,但你應該檢查發生的請求數量。 如果您有一個請求導致返回多條記錄,您應該看到更好的帶寬使用情況,而不是每個請求只提供幾行的更多請求。
在後一種情況下,實際結果傳輸可能相當快,但「控制通信」(即語句本身,登錄請求等)中涉及的延遲會相加,從而有效降低整體吞吐量。
至於數據包大小:當數據包很小時,通信開銷較大,增加了上述效果。服務器的默認max_allowed_packet
大小(如果內存爲1MB),但在連接時應該沒問題。
您是否介意解釋您的放緩原因實際上是什麼? – 2009-11-05 13:45:37
@Daniel Schneller 恩 - 對不起。我使用「SELECT COUNT(*)FROM」大InnoDB表,它會導致速度放慢。我改變了我的編程思想,現在MySQL比以往任何時候都快。 – rasputin 2009-11-06 11:09:26