對pre_thread_buffers優化(可以理解爲每個連接到mysql的用戶進程分配的內存):
read_buffer_size
該參數表示表的順序掃描,表示每個線程分配的緩衝區的大小。如在全表掃描時,會按照數據的存儲順序依次讀取數據塊,每次讀取的數據庫首先暫存在read_buffer_size中,當buffer空間被寫滿或者讀取結束後,再將buffer中的數據返回給上層調用者,以提高效率。默認128kb,不用設置太大,一般在128~256即可。
read_rnd_buffer_size
該參數表示表的隨機讀取,表示每個線程分配的緩衝大小,如按照一個非索引字段做order by 排序操作時,就會利用這個緩衝區來暫存取的數據,默認是256kb,也不用設置太多,在128~256即可。
sort_buffer_size
在表進行order by 和group by排序操作時,由於排序的字段沒有索引,會出現using filesort,爲了提高性能,可用這個參數增加每個線程分配的緩衝區大小。默認是2M,也不用太大,一般在128~256即可,如出現using filesort,可以用索引來解決問題。
thread_stack
該參數表示每個線程的堆棧大小,默認是192kb,如果是64位系統,設置256即可,不用設置過大。
join_buffer_size
表進行join連接操作時,如果關聯的字段沒有索引,會出現using jion buffer,爲了提高性能,可用次參數增加每個線程分配的換成區大小。默認是128kb,一般在128~256即可。一般出現using join buffer的時候,要通過增加索引來解決。
binlog_cache_size
如果數據庫沒有什麼大事物,寫入不是特別頻繁,這種1~2M是一個合適的選擇,如果事物很大,可以適當增加這個值。
max_connections
設置最大連接數,默認是100,一般設置512~1000即可。
pre_thread_buffers內存的計算公式:(read_buffer_size+read_rnd_buffer_size+sort_buffer_size+thread_stack+join_buffer_size+binlog_cache_size)*max_connections