通过查看mysql 配置参数、状态来优化你的mysql
2012-08-20 17:03:17 来源:WEB开发网核心提示:每个连接到MySQL服务器的线程都需要有自己的缓冲,默认为其分配256K,通过查看mysql 配置参数、状态来优化你的mysql(4),事务开始之后,则需要增加更多的空间,用crash-me测试检测出的许多限制取决于该值, 默认值足够大,运行较小的查询可能仅给指定的线程增加少量的内存消耗,例如存储查询语句的空间等
每个连接到MySQL服务器的线程都需要有自己的缓冲,默认为其分配256K。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,例如存储查询语句的空间等。但如果对数据表做复杂的操作比较复杂,例如排序则需要使用临时表,此时会分配大约read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size大小的内存空间。不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。
myisam_sort_buffer_size 8388608
当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配之缓冲区。
sort_buffer_size 2097144
每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作。
注意:该参数对应的分配内存是每个连接独享,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。
mysql> SHOW STATUS LIKE "sort%";
---------------------------
Sort_merge_passes 1
Sort_range 79192
Sort_rows 2066532
Sort_scan 44006
---------------------------
如果 sort_merge_passes 很大,就表示需要注意 sort_buffer_size。
当 MySQL 必须要进行排序时,就会在从磁盘上读取数据时分配一个排序缓冲区来存放这些数据行。如果要排序的数据太大,那么数据就必须保存到磁盘上的临时文件中,并再次进行排序。如果 sort_merge_passes 状态变量很大,这就指示了磁盘的活动情况。
read_buffer_size 131072
(show variables like 'read%';)
----------------
read_buffer_size 1048576
read_rnd_buffer_size 524288
---------------
read_buffer_size是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值, 默认值为131072。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
read_rnd_buffer_size
read_rnd_buffer_size是MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。该参数对应的分配内存也是每连接独享。
join_buffer_size 131072
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
--------------------------------------------------------------------------------------------------------
max_allowed_packet 1048576
net_buffer_length 16384
包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。该值默认很小,以捕获大的(可能是错误的)数据包。
--------------------------------------------------------------------------------------------------------
thread_stack 196608
每个线程的堆栈大小。用crash-me测试检测出的许多限制取决于该值。 默认值足够大,可以满足普通操作。
--------------------------------------------------------------------------------------------------------
myisam_sort_buffer_size 8388608
当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配之缓冲区。
sort_buffer_size 2097144
每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作。
注意:该参数对应的分配内存是每个连接独享,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。
mysql> SHOW STATUS LIKE "sort%";
---------------------------
Sort_merge_passes 1
Sort_range 79192
Sort_rows 2066532
Sort_scan 44006
---------------------------
如果 sort_merge_passes 很大,就表示需要注意 sort_buffer_size。
当 MySQL 必须要进行排序时,就会在从磁盘上读取数据时分配一个排序缓冲区来存放这些数据行。如果要排序的数据太大,那么数据就必须保存到磁盘上的临时文件中,并再次进行排序。如果 sort_merge_passes 状态变量很大,这就指示了磁盘的活动情况。
read_buffer_size 131072
(show variables like 'read%';)
----------------
read_buffer_size 1048576
read_rnd_buffer_size 524288
---------------
read_buffer_size是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值, 默认值为131072。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
read_rnd_buffer_size
read_rnd_buffer_size是MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。该参数对应的分配内存也是每连接独享。
join_buffer_size 131072
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
--------------------------------------------------------------------------------------------------------
max_allowed_packet 1048576
net_buffer_length 16384
包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。该值默认很小,以捕获大的(可能是错误的)数据包。
--------------------------------------------------------------------------------------------------------
thread_stack 196608
每个线程的堆栈大小。用crash-me测试检测出的许多限制取决于该值。 默认值足够大,可以满足普通操作。
--------------------------------------------------------------------------------------------------------
更多精彩
赞助商链接