mysql服务性能优化—my.cnf配置说明详解(不同内存)
本文中的配置说明都是从《MySQL5权威指南(3rd)》中摘抄出来的,并接合实际工作经验以及网上资源总结出来。
个人认为对于使用MySQL十分有用。放在此处方便自己随时查阅,也希望对其他朋友有所助益。
以下配置,仅供参考,请根据实际业务场景(比如:数据量,并发数据,连接数等),同时参考系统使用率(CPU/内存等)调整。
$ find / -name 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
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · mysql创建用户并赋予权限
- · docker定时任务Mysql脚本
- · docker安装mysql8注意事项
- · 定时备份docker中的mysql
- · docker-compose通过容器名连接mysql
- · unity3d mysql error: The given key was not present in the dictionary.
- · MySQL 批量修改数据表编码及字符集
- · Your database must use ‘READ-COMMITTED’ as the default isolation level.
- · MySQL-InnoDB存储引擎
- · 将数据从mysql迁移到clickhouse
- · docker安装Mysql5.7
- · PAGEHELPER分页插件查询速度慢的解决方法