关于最左前缀的补充 MySQL一定是遵循最左前缀匹配的,这句话在mysql8以前是正确的,没有任何毛病。但是在MySQL 8.0中,就不一定了。
max_connections=3000
连接的创建和销毁都需要系统资源,比如内存、文件句柄,业务说的支持多少并发,指的是每秒请求数,也就是QPS。 一个连接最少占用内存是256K,最大是64M,如果一个连接的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上。 如果3000个用户同时连上mysql,最小需要内存3000256KB=750M,最大需要内存300064MB=192G。 如果innodb_buffer_pool_size是40GB,给操作系统分配4G,给连接使用的最大内存不到20G,如果连接过多,使用的内存超过20G,将会产生磁盘 SWAP,此时将会影响性能。连接数过高,不一定带来吞吐量的提高,而且可能占用更多的系统资源。
innodb_thread_concurrency=64
此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍,如果超过配置并发 数,则需要排队,这个值不宜太大,不然可能会导致线程之间锁争用严重,影响性能。
innodb_buffer_pool_size=40G
innodb存储引|擎bufferpool缓存大小,一般为物理内存的60%-70%。 内存大小直接反应数据库的性能。
innodb lock wait timeout=10
行锁锁定时间,默认50s,根据公司业务定,没有标准值。
innodb flush log at trx commit: 这个参数控制 redo log 的写入策略,它有三种可能取值: 设置为0:表示每次事务提交时都只是把 redo log 留在 redo log bufer 中,数据库宕机可能会丢失数据。 设置为1(默认值):表示每次事务提交时都将 redo og 直接持久化到磁盘,数据最安全,不会因为数据库宕机丢失数据,但是效率稍微差一点,线上系统推荐这个设置。设置为2:表示每次事务提交时都只是把redol0g写到操作系统的缓存page cache里,这种情况如果数据库宕机是不会丢失数据的,但是操作系统如果宕机了,page cache里的数据还没来得及写入磁盘文件的话就会丢失数据。
binlog写入磁盘机制 binlog写入磁盘机制主要通过 sync binlog 参数控制,默认值是 0。 。为0的时候,表示每次提交事务都只 wie 到page cache,由系统自行判断什么时候执行 sync写入磁盘。虽然性能得到提升,但是机器宕机,page cache里面的 binog 会丢失也可以设置为1,表示每次提交事务都会执行 fsync 写入磁盘,这种方式最安全。还有一种折中方式,可以设置为N(N>1),表示每次提交事务都wite 到page cache,但累积N个事务后才 fsync 写入磁盘,这种如果机器宕机会丢失N个事务的binil0g.