如果我們把socketTimeout設置如下:
socketTimeout=60000;
這意味着60秒以內服務器必須開始給客戶端吐數據,以保持socket的活性。配置成60秒,一般查詢都不會遇到問題。即使是全表掃描這樣的大查詢,數據也會流式地源源不斷吐給客戶端,不會達到60秒的限制。
但對於帶有ORDER BY、DISTINCT、COUNT、SUM等方法的大查詢,他們很可能60秒內還沒有計算出結果,這時候客戶端會檢測到socket超時並自動斷開,導致服務器會收到QUERY_KILL,中止本次執行。
結論:對於帶有排序、聚集函數的大查詢,socketTimeout 應該設置很大的值。例如:
socketTimeout=6000000;