没有研究mysql之前,一直用的宝塔自带的mysql。每次性能调整的时候,看见上面的参数一脸懵逼,现在有时间来看一下上面的参数都是什么意思,需要设置多大的值最好。
① key_buffer_size
为了最小化磁盘的 I/O , MyISAM 存储引擎的表使用键高速缓存来缓存索引,这个键高速缓存的大小则通过 key-buffer-size 参数来设置。如果应用系统中使用的表以 MyISAM 存储引擎为主,则应该适当增加该参数的值,以便尽可能的缓存索引,提高访问的速度。
这个参数时针对MyISAM 存储引擎的,现在mysql都是InnoDB的存储引擎,所以一般用不到。
mysql5.7.16默认是8M, 如果大家的数据库用的很多MyISAM可以把参数调成内存的10%
② query_cache_size
查询缓存的大小,我们查询一条sql时,会先到查询缓存中看一下是不是执行过这个sql,之前执行过 的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是 查询的结果。如果你的查询能够直接在这个缓存中找到key,那么这个value就会被直接返回给客户端。
是不是觉得这个查询缓存有点东西,但是有一个问题是:每次对一个表进行了更新,这个表对应的所有查询缓存都会被清空,因此,有时候费了老大劲把数据进行缓存了,还没有用就清空了,对于更新压力大的数据库 来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。 比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。
所以,查询缓存对于一些不经常更新操作的数据库非常有用,对于经常更新操作的可能有弊端。
从 MySQL 5.7.20 开始不推荐使用查询缓存,并在 MySQL 8.0 中删除。
如果是系统是不经常执行更新操作的,可以设置为内存的10%,对于经常更新操作的数据库建议关闭设置0;
③ tmp_table_size
临时表的缓存大小,临时表一般会在union语句、group by、子查询会出现。
Mysql5.7 tmp_table_size 配置_天道酬勤-明天会更好的博客-CSDN博客_mysql修改tmp_table_size建议大家看一下上面的这篇文章就明白了,建议设置32M大小,内存大的可以更大一点。
④ innodb_buffer_pool_size
innodb存储引擎的缓冲池大小。
Mysql InnoDB 缓冲池_天道酬勤-明天会更好的博客-CSDN博客
建议设置内存的60%-70%,这里可能要考虑有些数据库是跟apache、nginx放一起的。
⑤ sort_buffer_size
排序缓存大小,推荐用32M
可以查看Mysql5.7 order by 排序_天道酬勤-明天会更好的博客-CSDN博客
⑥ read_buffer_size
read_buffer_size:是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。
这个建议可以不用修改。
⑦ read_rnd_buffer_size
此变量用于从MyISAM
表中读取,并且对于任何存储引擎,用于多范围读取优化。
MyISAM
在键排序操作后按排序顺序 从表中读取行时,将通过此缓冲区读取行以避免磁盘寻道
不是很理解呀,如果不懂就建议先不修改。
⑧ join_buffer_size
Mysql SQL JOIN 算法_天道酬勤-明天会更好的博客-CSDN博客
主要是针对没有索引的join连接,所以我们应该调大join buffer的值,默认是256KB,如果内存比较足够,例如8G内存建议设置8M。
⑨ thread_stack
每个连接线程被创建时,MySQL给它分配的内存大小。建议不用修改。
⑩ binlog_cache_size
一个事务,在没有提交(uncommitted)的时候,产生的日志,记录到Cache中;等到事务提交(committed)需要提交的时候,则把日志持久化到磁盘。 如果没有长事务的话建议不用修改。
11)table_open_cache
这个参数表示针对所有threads的table cache总和,5.6.7之前默认是400,5.6.8之后是2000。
这是个server层的参数,mysql不支持并行查询,mysql的会话也没有PGA的概念,一个thread引用myisam表时需要在server层上创建一个table对象(索引也需要创建一个但是是共享的,self join会创建2个,分区表每个分区按单表对待),如果同时多个会话引用一个表也会创建多个表对象,虽然会加大内存使用量,但是却极大的减少了内部表锁的争用。主要是针对MyISAM数据引擎的。
12)max_connections
最大的连接数,这个可以稍微设置大一点。 需要查看show processlist当前mysql的连接数是多少,观察一下平均多少,然后设置平均值*2即可。
我这里配置的是512