对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