MySQL全局优化与Mysql8.0新增特性

Mysql全局优化总结

MySQL全局优化与Mysql8.0新增特性_第1张图片

从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。


补充一点配置文件my.ini或my.cnf的全局参数:

假设服务器配置为:

  • CPU:32核
  • 内存:64G
  • DISK:2T SSD

下面参数都是服务端参数,默认在配置文件的 [mysqld] 标签下

max_connections=3000       

连接的创建和销毁都需要系统资源,比如内存、文件句柄,业务说的支持多少并发,指的是每秒请求数,也就是QPS。

一个连接最少占用内存是256K,最大是64M,如果一个连接的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上。

如果3000个用户同时连上mysql,最小需要内存3000256KB=750M,最大需要内存300064MB=192G。

如果innodb_buffer_pool_size是40GB,给操作系统分配4G,给连接使用的最大内存不到20G,如果连接过多,使用的内存超过20G,将会产生磁盘SWAP,此时将会影响性能。连接数过高,不一定带来吞吐量的提高,而且可能占用更多的系统资源。


​max_user_connections=2980               

允许用户连接的最大数量,剩余连接数用作DBA管理。


back_log=300               

MySQL能够暂存的连接数量。如果MySQL的连接数达到max_connections时,新的请求将会被存在堆栈中,等待某一连接释放资源,该堆栈数量即back_log,如果等待连接的数量超过back_log,将被拒绝。


wait_timeout=300               

指的是app应用通过jdbc连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。


interactive_timeout=300               

指的是mysql client连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。


innodb_thread_concurrency=64               

此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍,如果超过配置并发数,则需要排队,这个值不宜太大,不然可能会导致线程之间锁争用严重,影响性能。


innodb_buffer_pool_size=40G               

innodb存储引擎buffer pool缓存大小,一般为物理内存的60%-70%。


innodb_lock_wait_timeout=10               

行锁锁定时间,默认50s,根据公司业务定,没有标准值。


innodb_flush_log_at_trx_commit=1               

redo log 的写入策略,可参考上一章节


sync_binlog=1               

binlog写入磁盘机制,可参考上一章节


sort_buffer_size=4M               

每个需要排序的线程分配该大小的一个缓冲区。增加该值可以加速ORDER BY或GROUP BY操作。

sort_buffer_size是一个connection级的参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。

sort_buffer_size:并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统的内存资源。例如:500个连接将会消耗500*sort_buffer_size(4M)=2G。


join_buffer_size=4M               

用于表关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

Mysql8.0新增特性

待定

你可能感兴趣的:(MySQL学习,mysql,数据库)