相關參數查看命令
SELECT @@join_buffer_size;
SELECT @@sort_buffer_size;
==========================================================================================
join_buffer_size
當我們的join是ALL,index,rang或者Index_merge的時候使用的buffer。
實際上這種join被稱為FULL JOIN。
實際上參與join的每一個表都需要一個join buffer。
所以在join出現的時候,至少是2個。
join buffer的這只在mysql5.1.23版本之前最大為4G,但是從5.1.23版本開始,再出了windows之外的64為平台上可以超出4GB的限制。
系統默認是128KB。
==========================================================================================
sort_buffer_size
sort buffer是系統中對數據進行排序的時候用到的Buffer。
sort buffer同樣是針對單個線程的,所以當多個線程同時進行排序的時候,系統中就會出現多個sort buffer。
我們一般可以通過增大sort buffer的大小來提高order by或者group by的處理性能。
系統默認大小時2MB,最大限制和join buffer一樣。
==========================================================================================
優化建議
如果應用中,很少出現join語句,則可以不用太在乎join_buffer_size參數的設置大小。
如果join語句不是很少的話,個人建議可以適當增大join_buffer_size到1MB左右,如果內存充足可以設置為2MB。
對於sort_buffer_size來說,一般設置為2-4MB可以滿足大多數應用的需求。
當然,如果應用中的排序都比較大。內存充足卻並發量不是特別大的時候,也可以繼續增大sort buffer size的設置。
最後需要注意的是,每一個線程都會創建自己獨立的buffer而不是整個系統共享,所以設置的值過大會造成系統內存不足。