分类

链接

2022 年 7 月
 123
45678910
11121314151617
18192021222324
25262728293031

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > MySQL > 正文
共享办公室出租
mysql服务性能优化—my.cnf配置说明详解(不同内存)
MySQL 暂无评论 阅读(111)

本文中的配置说明都是从《MySQL5权威指南(3rd)》中摘抄出来的,并接合实际工作经验以及网上资源总结出来。

个人认为对于使用MySQL十分有用。放在此处方便自己随时查阅,也希望对其他朋友有所助益。

 

以下配置,仅供参考,请根据实际业务场景(比如:数据量,并发数据,连接数等),同时参考系统使用率(CPU/内存等)调整。

$ find / -name my.cnf

 

my.cnf

 

参数名称 描述 默认值 2G内存推荐 4G内存推荐 8G内存推荐 16G内存推荐
back_log 在MYSQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中。如果系统在短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。默认值50。 50 60
max_connections MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值, 100 500 500 1000 2000
table_cache table_cache 参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。#因此, table_cache 的大小应与 max_connections 的设置有关。例如,对于 200 个#并行运行的连接,应该让表的缓存至少有 200 × N ,这里 N 是应用可以执行的查询#的一个联接中表的最大数量。此外,还需要为临时表和文件保留一些额外的文件描述符。 1024 1024
max_allowed_packet 设置在网络传输中一次消息传输量的最大值。系统默认值 为1MB,最大值是1GB,必须设置1024的倍数。

可根据系统实时情况来,如果单次返回数据量大,可设置大一点。

1M 16M 16M
sort_buffer_size [非常重要] Sort_Buffer_Size 是一个connection级参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。

如果sort数据量大(比如:大数据分析、报表统计时),可增加。

相反,如果页面并发高,访问量大,连接数多,可减少。

例如:500个连接将会消耗 500*sort_buffer_size(8M)=4G内存

32M
join_buffer_size [非常重要] 用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。 8M
thread_cache_size 表示可以重新利用保存在缓存中线程的数量, 当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能. 8 8 16 32
thread_concurrency  [非常重要]  设置thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个 cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4; 2个双核的cpu, thread_concurrency的值应为8 1 2 4 4
query_cache_size  [非常重要] 我们首先分析一下 query_cache_size的工作原理:一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,DB在该表没发生变化的情况下把结果从缓存中返回给Client。这里有一个关建点,就是DB在利用Query_cache工作时,要求该语句涉及的表在这段时间内没有发生变更。那如果该表在发生变更时,Query_cache里的数据又怎么处理呢?首先要把Query_cache和该表相关的语句全部置为失效,然后在写入更新。那么如果Query_cache非常大,该表的查询结构又比较多,查询语句失效也慢,一个更新或是Insert就会很慢,这样看到的就是Update或是Insert怎么这么慢了。所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。而且在高并发,写入量大的系统,建议把该功能禁掉。 32M 64M 128M
256M
512M
query_cache_limit 指定单个查询能够使用的缓冲区大小,缺省为1M 1M 2M 3M 4M 8M
query_cache_min_res_unit 默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费 4K
thread_stack 设置MYSQL每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为128K至4GB,默认为192KB。 192KB
transaction_isolation  设定默认的事务隔离级别.可用的级别如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
# 1.READ UNCOMMITTED-读未提交2.READ COMMITTE-读已提交3.REPEATABLE READ -可重复读4.SERIALIZABLE -串行
tmp_table_size  tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。如果超过该值,则会将临时表写入磁盘。 2M 32M 64M 128M 256M
read_buffer_size   [非常重要] MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。 128K 512K 1M 16M 4M
read_rnd_buffer_size MySql的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。 16M
bulk_insert_buffer_size #批量插入数据缓存大小,可以有效提高插入效率,默认为8M 8M
innodb_buffer_pool_size   [非常重要] 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了 128M 256M 512M 1024M 2048M
innodb_thread_concurrency 服务器有几个CPU就设置为几,建议用默认设置,一般为8. 1 2 4 8 16
innodb_log_buffer_size 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据.MySQL开发人员建议设置为1-8M之间 8M

 

8G内存参考配置:

[mysqld]
key_buffer_size = 128M
table_cache = 1024
read_buffer_size = 2M
read_rnd_buffer_size = 2M
sort_buffer_size = 32M
myisam_sort_buffer_size = 256M
thread_cache_size = 32
query_cache_size= 256M
query_cache_limit= 5M
tmp_table_size=128M
max_heap_table_size=1024M
max_allowed_packet = 16M
table_open_cache = 3072
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_additional_mem_pool_size=128M
max_connections=1000
join_buffer_size = 8M

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:mysql服务性能优化—my.cnf配置说明详解(不同内存) | Bruce's Blog

发表评论

留言无头像?