加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql常用的配置意义

发布时间:2022-01-18 01:19:25 所属栏目:MySql教程 来源:互联网
导读:本篇内容介绍了mysql常用的配置释义的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! key_buffer_size 设置这个变量可以一次性为键缓冲区分配所有指定
       本篇内容介绍了“mysql常用的配置释义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
 
key_buffer_size
 
       设置这个变量可以一次性为键缓冲区分配所有指定的空间.然而,操作系统不会真的立刻分配内存,而是使用时才真正分配.例如设置键缓冲区大小为1GB,并不意味着服务器立刻分配1GB的内存.
 
mysql允许创建多个键缓存,如果把非默认键缓存的这个变量设置为0,mysql将丢弃缓存存在该键缓存中的索引,转而使用默认键缓存,并且当不再有任何引用时会删除该键缓存.为了一个不存在的键缓存设置这个变量,将会创建新的键缓存.对一个已经存在的键缓存设置非零值,会导致刷新该键缓存的内容.这会阻塞所有尝试访问该键缓存的操作,直到刷新操作完成.
 
table_cache_size
 
      设置这个变量为缓存表的个数,这个变量不会立即生效,会延迟到下次有线程打开表才有效果.当有线程打开表时,mysql会检查这个变量的值.如果值大于缓存中表的数量,线程可以把最新打开的表放入缓存,如果值比缓存中的表数小,mysql将从缓存中删除不常用的表.
 
thread_cache_size
 
线程缓存设置,该变量不会立即生效--将在下次哟连接被关闭时产生效果.当有连接被关闭时,mysql检查缓存中是否还有空间来缓存线程.如果有空间,则缓存线程以备下次连接重用;如果没有空间,它将销毁该线程而不再缓存.在这个场景中,缓存中的线程量,以及线程缓存使用的内存,并不会立即减少.mysql只在关闭连接时,才会在缓存中增加线程,创建新连接时,才会从缓存中删除线程.
 
query_cache_size
 
    mysql在启动时一次性分配,并初始化这块内存,该内存为查询缓存.如果修改这个变量,则mysql会立即删除缓存中所有查询缓存数据.重新分配该缓存到指定大小.并且重新初始化内存,该过程会花费很大时间.在完成初始化前,服务器一直不能提供服务,mysql是逐渐清理缓存,而不是一次性清理.
 
read_buffer_size
 
    是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能.
 
read_rnd_buffer_size
 
    这个参数用在sort查询之后 ,以保证获取以顺序的方式获取到查询的数据。如果你有很多order by 查询语句,增长这值能够提升性能。”老实说,这个参数和read_buffer_size很像,read_buffer_size仅仅用于MyISAM引擎,我下意识的也认为read_rnd_buffer_size也仅仅用于MyISAM引擎.
 
它不是这样的。read_rnd_buffer_size不仅仅用在MyISAM引擎,而是用在所有引擎。它用在查询后,对读取真正的数据进行优化。它是这样工作的:
 
sort后,得到的是行数据指针,通过key-value的形式存在,对于MyISAM是数据的偏移量,对于innodb是主键或存储重新查询的全量数据(对于小片的数据是有益的)。
 
假设sort后的数据使用的是行指针,并且行中的字段能够被转换成固定的大小(除了BLOB/TEXT字段外),MySQL能够使用read_rnd_buffer_size优化数据读取。
 
因为sort后的数据是以key-value的形式存在的,使用这些行指针去读取数据,将是以指针数据物理的顺序去读取,很大程度上是随机的方式读取数据的。MySQL从sort_buffer中读取这些行指针数据,然后通过指针排序后存入read_rnd_buffer中,之后再通过指针读取数据时,基本上都是顺序读取了。
 
read_rnd_buffer_size是很重要的参数,尤其工作在如下场景:
 
* sort_buffer中存的是行指针而不是要查询的数据。
 
* 查询的字段中包含Blob/Text字段。
 
* sort后有大量的数据行(limit 10并不能帮助你,因为MySQL是通过指针获取行数据的)
 
如果你取出很少字段的数据(小于max_length_for_sort_data),行数据将会全部存储在sort buffer里,因此将不需要read_rnd_buffer_size这个参数。而如果你查询的字段数据很长(这些字段很可能含有Text/Blob字段),比max_length_for_sort_data还长,read_rnd_buffer_size这个参数将派上用场。
 
sort_buffer_size
 
    是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存。并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源
 
“mysql常用的配置释义”的内容就介绍到这里了,感谢大家的阅读。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!