ITPub博客

首页 > Linux操作系统 > Linux操作系统 > mysql线程独占内存参数

mysql线程独占内存参数

原创 Linux操作系统 作者:markzy5201190 时间:2013-06-28 13:50:40 0 删除 编辑

thread_stack 线程栈信息使用内存
default:192KB,用来存放每一个线程自身的标识信息及线程栈分配多大的内存,如thread_id,线程运行时基本信息


mysql排序算法:
第一种,mysql4.1之前算法,实现方式是先将需要排序的字段columns和可以直接定位到相关行row数据的指针信息取出,
然后在设定的排序区(sort_buffer_size)中排序,完成排序之后再次通过行指针信息取出所需的columns,也就是需
要访问2次数据;
第二种,自mysql4.1开始使用改进的算法,一次性将所需的columns全部取出,在排序区排序后直接将数据返回给请求客户端。
注意点:改进后的算法只需要访问一次数据,减少了大量的随机IO,极大提高排序query语句效率,但,改进后算法一次性取
出数据比第一种算法要很多。故给出参数:max_length_for_sort_data
sort_buffer_size 排序使用内存 每个需要进行排序的线程分配该大小的一个缓存区 
default:2M,用此内存区域进行排序操作(filesort),完成客户端排序请求。若我们设置的排序区缓存大小无法满足
排序实际所需内存,会将数据写入磁盘文件来完成排序。
使用这个参数时,引入参数max_length_for_sort_data 用于控制排序时选择第一种算法还是第二种,当取出所有大字段总大小
大于此参数,选择第一种排序算法,否则第2种算法

join_buffer_size 连接操作使用内存
default:8M,join基本实现原理:Nested Loop Join,通过驱动表的结果集作为循环基础数据,然后一条
一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参
与Join,则再通过前2个表的Join结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询
数据,如此往复。
在Join类型是ALL,index,rang 或 index_merge时触发使用Join buffer

read_buffer_size 顺序读取数据缓冲区使用内存
用于当需要顺序读取数据的时候,如无法用索引情况下全表扫描,全索引扫描等,在此情况,mysql按照数
据的存储顺序依次读取数据块,每次读取数据块首先暂存在read_buffer_size中,当buffer空间被写满或
全部数据读取结束后,再将buffer中的数据返回给上层调用者,以提高效率。

read_rnd_buffer_size 随机读取数据缓冲区使用内存
default:8M 当Mysql进行非顺序读取(随机读取)数据块时,会利用这个缓冲区暂存读取的数据。

net_buffer_size 连接信息及返回客户端前结果集暂存使用内存
default:16kB 用来存放客户端连接线程的连接信息和返回客户端的结果集。当mysql开始产生可以返回的结果集,会在通过
网络返回给客户端请求线程之前,会先暂存在该参数设置的缓冲区中,等满足一定大小时候才开始向客户端发送,
以提高网络传输效率。该参数仅是该缓存区初始化大小,mysql会根据实际需要自行申请更多内存以满足需求,但
最大不会超过max_allowed_packet大小default:65M

bulk_insert_buffer_size 批量插入暂存使用内存
default:65M 当我们使用如insert ..values(),(),()..方式进行批量插入时,会先将提交的数据放入一个缓存空间中,当
该缓存空间被写满或提交完所有数据之后,才会一次性将该缓存空间中数据写入数据库并清空缓存。

tmp_table_size 临时表使用内存 
default:512M 我们进行一些特殊操作使用临时表才能完成(如:order by ,group by),需超过使用临时表空间大小,会
创建磁盘临时表,增加IO操作;
比较理想配置:Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%




所列线程独占内存仅仅只是部分,极端情况下内存总体使用量将是所有连接线程的总倍数,设置时要注意,过大设置,
会导致内存不够异常,反而降低整体性能.


MySQL 内存使用计算如下:
used_Mem = key_buffer_size 
+ query_cache_size 
+ innodb_buffer_pool_size 
+ innodb_additional_mem_pool_size
+ innodb_log_buffer_size
+ max_connections *(
   read_buffer_size 
+ read_rnd_buffer_size
+ sort_buffer_size
+ join_buffer_size
+ binlog_cache_size 
+ thread_stack 
+ tmp_table_size)

SET @giga_bytes=1024*1024*1024;
SELECT (@@key_buffer_size + @@query_cache_size + @@tmp_table_size
+ @innodb_buffer_pool_size + @innodb_additional_mem_pool_size
+ @innodb_log_buffer_size
+ @@max_connections * (
  @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack
) ) / @giga_bytes AS MAX_MEMORY_GB;







来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26855487/viewspace-765058/,如需转载,请注明出处,否则将追究法律责任。

下一篇: adaptive hash index
请登录后发表评论 登录
全部评论

注册时间:2012-04-05

  • 博文量
    82
  • 访问量
    456038