mysql之全局缓存和线程缓存

全局缓存:

key_buffer_size:决定索引处理的速度,尤其是索引读的速度。默认值是16M。该参数只对MyISAM表起作用。

innodb_buffer_pool_size: InnoDB使用该参数指定大小的内存来缓冲数据和索引,这个是Innodb引擎中影响性能最大的参数。

innodb_additional_mem_pool_size: 指定InnoDB用来存储数据字典和其他内部数据结构的内存池大小。缺省值是8M。通常不用太大,够用即可,应该与表结构的复杂度有关系。如果不够用,mysql会在错误日志中写入一条警告信息。

innodb_log_buffer_size: 指定Innodb用来存储日志数据的缓存大小,相当于oracle中的log buffer

query_cache_size: 是mysql的查询缓存大小。大多数情况下禁用该参数。

 

线程缓存:

每个连接到mysql服务器的线程都需要有自己的缓存。大概需要立刻分配256K,甚至在线程空闲时,他们使用默认的线程堆栈,网络缓存等。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,然而如果对数据表做复杂的操作例如扫描、排序或者需要临时表,则需要分配read_buffer_size、sort_buffer_size、read_rnd_buffer_size、tmp_table_size大小的内存空间。不过他们只是在需要的时候才分配,并且在那些操作完成之后便释放。

read_buffer_size: 是mysql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,mysql会为它分配一段内存缓冲区。该参数用来控制读入缓冲区的大小。如果对表的顺序扫描请求非常的频繁,并且认为频繁扫描进行的太慢,可以通过增加该变量值以及内存缓冲区大小来提高性能。

sort_buffer_size: 是mysql执行排序使用的缓冲大小。如果想要增加order by的速度,首先要看是否可以让mysql使用索引而不是额外的排序。如果不能,可以尝试增加sort_buffer_size变量的大小。

read_rnd_buffer_size:是mysql的随机读缓冲区大小。当按任意顺序读取行时,例如按照排序顺序,将分配一个随机读缓存区。在我理解,像全表扫描的话都顺序读,对于走索引的查询,应该都是随机读。在oracle里面有个index fast full scan的方式,这种属于顺序读。

tmp_table_size:是mysql的临时表缓冲大小。所有联合在一个dml指令内完成,并且大多数联合甚至可以不用临时表即可完成。大多数临时表是基于内存的heap表。具有大的记录长度的临时表或者包含blob列的表存储在硬盘上。

thread_stack:主要用来存放每一个线程自身的标识信息,如线程id,线程运行时基本信息等等,我们可以通过thread_stack参数来设置为每一个线程栈分配多大的内存。

join_buffer_size:应用程序经常会出现一些两表或多表join的操作需求,mysql在完成某些join需求的时候,为了减少参与join的被驱动表的读取次数以提高性能,需要使用的join buffer来协助完成join操作。当join buffer太小,mysql不会将该buffer存入磁盘文件,而是先将join buffer中的结果集与需要join的表进行join操作,然后清空join buffer中的数据,继续将剩余的结果集写入此buffer中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加IO访问,降低效率。

binlog_cache_size: 在事务过程中容纳二进制日志sql语句的缓存大小。二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志的前提下为每个客户端分配的内存,注意,每个client都可以分配设置大小的binlog cache空间。

 

你可能感兴趣的:(MYSQL学习记录)