net-buffer-length 网络包传输中,传输消息之前的 net buffer初始化大小
该参数主要影响的是网络传输的效率,由于该参数所设置的只是消息缓冲区的初始化大小,所以造成的影响主要是当每次的消息都很大时,MySQL 总是需要多次申请扩展缓冲区的大小。default 16MB,一般来说可以满足大多数场景,如果查询返回的数据量非常小,每次网络传输量都很少,而且系统内存又比较紧缺,可以适当将该值调整到 8MB。
max-allowed-packet 网络传输中,一次消息传输量的最大值
该参数与 net-buffer-length 相对应,只不过是net buffer的最大值,当消息传输量大于net-buffer-length的设置时,MySQL 会自动增大net buffer的大小,直到缓冲区大小达到 max-allowed-packet 所设置的值。系统默认值为 1MB,最大值是1GB,必须设定为1024的倍数,单位为字节。
back-log 在 MySQL 的连接请求等待队列中允许存放的最大连接请求数
连接请求等待队列,实际上是指当某一时刻客户端的连接请求数量过大,MySQL 主线程没办法及时给每一个新的连接请求分配(或创建)连接线程时,还没有分配到连接线程的所有请求将存放到一个等待队列中,这个队列就是MySQL 的连接请求队列。当系统存在瞬时的大量连接请求时,则应该注意 back-log 的设置时。default: 50,最大可以设置为 65535 。当增大 back-log 参数的设置时,同时还需注意 OS 级别对网络监听队列的限制,因为如果 OS 的网络监听设置小于 MySQL 的back-log设置,加大back-log设置是没有意义的。
flush_time(默认0最好不要改)
如果系统有问题并且经常锁死或重新引导,应将该变量设置为非零值,这将导致服务器按flush_time 秒来刷新表的高速缓存。用这种方法来写出对表的修改将降低性能,但可减少表讹误或数据丢失的机会。
一般使用缺省值。
tmp_table_size(线程独享的大小,是个阀值不是直接分配值)
不宜设置过大参考
不宜设置过大主要是防止内存不足的时候使用swap
它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 13 |
| Created_tmp_tables | 1 |
+-------------------------+-------+
你可以比较内部基于磁盘的临时表的总数和创建在内存中的临时表的总数(Created_tmp_disk_tables和Created_tmp_tables),一般的比例关系是:
Created_tmp_disk_tables/Created_tmp_tables<5%
上面这情况Created_tmp_tables几乎都没有,不要考虑增加tmp_table_size
max_heap_table_size
这个变量定义了用户可以创建的内存表(memory table,即CREATE TABLE test ENGINE=MEMORY这类表)的大小.这个值用来计算内存表的最大行数值。这个变量支持动态改变,即set @max_heap_table_size=#
,但是对于已经存在的内存表就没有什么用了,除非这个表被重新创建(create table)或者修改(alter table)或者truncate table。服务重启也会设置已经存在的内存表为全局max_heap_table_size的值。
这个变量和tmp_table_size一起限制了内部内存表的大小。
从下面连接中可以看到
“根据通用的mysql内存计算公司:
线程独享,约4.5GB = 151 * (10M + 10M + 5M + 5M + 512K),组成大概如下:
sort_buffer_size:10M
join_buffer_size:10M
read_buffer_size:5M
read_rnd_buffer_size:5M
thread_stack:512KB”
tmp_table_size、sort_buffer_size、join_buffer_size、read_buffer_size、
read_rnd_buffer_size、thread_stack等的参数都是线程独占的,是独享的,但都是按需分配的,并不是一开始就直接分配那么多
待续...